From 2d5285fc5647a1877b398a918da57df1f342fd82 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Fri, 11 Jul 2025 08:57:55 -0700 Subject: [PATCH 01/69] Fix theme switcher to work with real directories in .config/omarchy/themes Not just symlinks --- bin/omarchy-theme-next | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/bin/omarchy-theme-next b/bin/omarchy-theme-next index 40ace80..8899526 100755 --- a/bin/omarchy-theme-next +++ b/bin/omarchy-theme-next @@ -3,20 +3,22 @@ THEMES_DIR="$HOME/.config/omarchy/themes/" CURRENT_THEME_LINK="$HOME/.config/omarchy/current/theme" -THEMES=($(find "$THEMES_DIR" -mindepth 1 | sort)) +THEMES=($(find "$THEMES_DIR" -mindepth 1 -maxdepth 1 | sort)) TOTAL=${#THEMES[@]} # Get current theme from symlink if [[ -L "$CURRENT_THEME_LINK" ]]; then - CURRENT_THEME=$(readlink "$CURRENT_THEME_LINK") + CURRENT_THEME=$(realpath "$CURRENT_THEME_LINK") else # Default to first theme if no symlink exists - CURRENT_THEME=${THEMES[0]} + CURRENT_THEME=$(realpath "${THEMES[0]}") fi # Find current theme index INDEX=0 for i in "${!THEMES[@]}"; do + THEMES[$i]=$(realpath "${THEMES[$i]}") + if [[ "${THEMES[$i]}" == "$CURRENT_THEME" ]]; then INDEX=$i break From bd2fc67abc9b73aff71498ccc0b20598e09460ad Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Fri, 11 Jul 2025 09:06:14 -0700 Subject: [PATCH 02/69] Add new matte black theme by @tahayvr --- themes/matte-black/alacritty.toml | 63 +++++++++++++++++++++ themes/matte-black/backgrounds.sh | 2 + themes/matte-black/btop.theme | 92 +++++++++++++++++++++++++++++++ themes/matte-black/hyprland.conf | 4 ++ themes/matte-black/hyprlock.conf | 10 ++++ themes/matte-black/mako.ini | 18 ++++++ themes/matte-black/neovim.lua | 30 ++++++++++ themes/matte-black/waybar.css | 4 ++ themes/matte-black/wofi.css | 8 +++ 9 files changed, 231 insertions(+) create mode 100644 themes/matte-black/alacritty.toml create mode 100644 themes/matte-black/backgrounds.sh create mode 100644 themes/matte-black/btop.theme create mode 100644 themes/matte-black/hyprland.conf create mode 100644 themes/matte-black/hyprlock.conf create mode 100644 themes/matte-black/mako.ini create mode 100644 themes/matte-black/neovim.lua create mode 100644 themes/matte-black/waybar.css create mode 100644 themes/matte-black/wofi.css diff --git a/themes/matte-black/alacritty.toml b/themes/matte-black/alacritty.toml new file mode 100644 index 0000000..7f2240a --- /dev/null +++ b/themes/matte-black/alacritty.toml @@ -0,0 +1,63 @@ +# ──────────────────────────────────────────────────────────── +# Matte Black Theme for Alacritty +# By noiseRandom +# https://github.com/tahayvr +# ──────────────────────────────────────────────────────────── + +[window] +# window padding {px} +padding.x = 12 +padding.y = 12 + +[font] +size = 12.0 + + + +[colors] +[colors.primary] +background = "#121212" +foreground = "#eaeaea" +dim_foreground = "#a5abb6" + +[colors.cursor] +text = "#121212" +cursor = "#eaeaea" + +[colors.vi_mode_cursor] +text = "#2e3440" +cursor = "#d8dee9" + +[colors.selection] +text = "CellForeground" +background = "#333333" #charcoal + +[colors.normal] +black = "#2c2c2c" +red = "#bf616a" +green = "#a3be8c" +yellow = "#ebcb8b" +blue = "#81a1c1" +magenta = "#b48ead" +cyan = "#88c0d0" +white = "#e5e9f0" + +[colors.bright] +black = "#8a8a8d" +red = "#bf616a" +green = "#a3be8c" +yellow = "#ebcb8b" +blue = "#81a1c1" +magenta = "#b48ead" +cyan = "#8fbcbb" +white = "#eceff4" + +[colors.dim] +black = "#373e4d" +red = "#94545d" +green = "#809575" +yellow = "#b29e75" +blue = "#68809a" +magenta = "#8c738c" +cyan = "#6d96a5" +white = "#aeb3bb" diff --git a/themes/matte-black/backgrounds.sh b/themes/matte-black/backgrounds.sh new file mode 100644 index 0000000..4c0c8d8 --- /dev/null +++ b/themes/matte-black/backgrounds.sh @@ -0,0 +1,2 @@ +mkdir -p "$BACKGROUNDS_DIR/matte-black" +download_background_image "https://raw.githubusercontent.com/tahayvr/omarchy-matte-black/refs/heads/main/images/1-matte-black.jpg" "matte-black/1-matte-black.jpg" diff --git a/themes/matte-black/btop.theme b/themes/matte-black/btop.theme new file mode 100644 index 0000000..452a9b8 --- /dev/null +++ b/themes/matte-black/btop.theme @@ -0,0 +1,92 @@ +# ──────────────────────────────────────────────────────────── +# Bashtop theme with Matte Black palette +# by noiseRandom +# https://github.com/tahayvr +# ──────────────────────────────────────────────────────────── + +# Colors should be in 6 or 2 character hexadecimal or single spaced rgb decimal: "#RRGGBB", "#BW" or "0-255 0-255 0-255" +# example for white: "#ffffff", "#ff" or "255 255 255". + +# All graphs and meters can be gradients +# For single color graphs leave "mid" and "end" variable empty. +# Use "start" and "end" variables for two color gradient +# Use "start", "mid" and "end" for three color gradient + +# Main background, empty for terminal default, need to be empty if you want transparent background +theme[main_bg]="" + +# Main text color +theme[main_fg]="#EAEAEA" + +# Title color for boxes +theme[title]="#8a8a8d" + +# Highlight color for keyboard shortcuts +theme[hi_fg]="#f59e0b" + +# Background color of selected item in processes box +theme[selected_bg]="#f59e0b" + +# Foreground color of selected item in processes box +theme[selected_fg]="#EAEAEA" + +# Color of inactive/disabled text +theme[inactive_fg]="#333333" + +# Misc colors for processes box including mini cpu graphs, details memory graph and details status text +theme[proc_misc]="#8a8a8d" + +# Cpu box outline color +theme[cpu_box]="#8a8a8d" + +# Memory/disks box outline color +theme[mem_box]="#8a8a8d" + +# Net up/down box outline color +theme[net_box]="#8a8a8d" + +# Processes box outline color +theme[proc_box]="#8a8a8d" + +# Box divider line and small boxes line color +theme[div_line]="#8a8a8d" + +# Temperature graph colors +theme[temp_start]="#8a8a8d" +theme[temp_mid]="#f59e0b" +theme[temp_end]="#b91c1c" + +# CPU graph colors +theme[cpu_start]="#8a8a8d" +theme[cpu_mid]="#f59e0b" +theme[cpu_end]="#b91c1c" + +# Mem/Disk free meter +theme[free_start]="#8a8a8d" +theme[free_mid]="#f59e0b" +theme[free_end]="#b91c1c" + +# Mem/Disk cached meter +theme[cached_start]="#8a8a8d" +theme[cached_mid]="#f59e0b" +theme[cached_end]="#b91c1c" + +# Mem/Disk available meter +theme[available_start]="#8a8a8d" +theme[available_mid]="#f59e0b" +theme[available_end]="#b91c1c" + +# Mem/Disk used meter +theme[used_start]="#8a8a8d" +theme[used_mid]="#f59e0b" +theme[used_end]="#b91c1c" + +# Download graph colors +theme[download_start]="#8a8a8d" +theme[download_mid]="#f59e0b" +theme[download_end]="#b91c1c" + +# Upload graph colors +theme[upload_start]="#8a8a8d" +theme[upload_mid]="#f59e0b" +theme[upload_end]="#b91c1c" diff --git a/themes/matte-black/hyprland.conf b/themes/matte-black/hyprland.conf new file mode 100644 index 0000000..13020af --- /dev/null +++ b/themes/matte-black/hyprland.conf @@ -0,0 +1,4 @@ +general { + # https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors + col.active_border = rgb(8A8A8D) +} diff --git a/themes/matte-black/hyprlock.conf b/themes/matte-black/hyprlock.conf new file mode 100644 index 0000000..d20896c --- /dev/null +++ b/themes/matte-black/hyprlock.conf @@ -0,0 +1,10 @@ +$color = rgba(46,52,64,1.0) # #2e3440 solid color + +$inner_color = rgba(136,136,136,0.3) #rgb(136, 136, 136) with opacity +$outer_color = rgba(216,222,233,0.5) # #d8dee9 + +$font_color = rgba(216,222,233,1.0) + +$placeholder_color = rgba(216,222,233,0.6) +$check_color = rgba(136, 192, 208, 1.0) + diff --git a/themes/matte-black/mako.ini b/themes/matte-black/mako.ini new file mode 100644 index 0000000..a57c59b --- /dev/null +++ b/themes/matte-black/mako.ini @@ -0,0 +1,18 @@ +text-color=#8a8a8d +background-color=#1e1e1e +border-radius=10 +width=420 +height=110 +padding=10 +font=CaskaydiaMono Nerd Font +border-size=0 +anchor=top-right +default-timeout=3000 +max-icon-size=32 + +[app-name=Spotify] +invisible=1 + +[urgency=high] +background-color=#660d0d +text-color=#ffffff \ No newline at end of file diff --git a/themes/matte-black/neovim.lua b/themes/matte-black/neovim.lua new file mode 100644 index 0000000..31b9afe --- /dev/null +++ b/themes/matte-black/neovim.lua @@ -0,0 +1,30 @@ +return { + { "rebelot/kanagawa.nvim"}, + { "EdenEast/nightfox.nvim" }, + { + "LazyVim/LazyVim", + opts = { + colorscheme = "carbonfox", + }, + init = function() + -- Custom highlight groups for dashboard colors only + vim.api.nvim_create_autocmd("ColorScheme", { + pattern = "*", + callback = function() + vim.api.nvim_set_hl(0, "SnacksDashboardHeader", { fg = "#8a8a8d", bold = true }) + vim.api.nvim_set_hl(0, "SnacksDashboardIcon", { fg = "#8a8a8d" }) + vim.api.nvim_set_hl(0, "SnacksDashboardDir", { fg = "#8a8a8d" }) + vim.api.nvim_set_hl(0, "SnacksDashboardFile", { fg = "#8a8a8d" }) + vim.api.nvim_set_hl(0, "SnacksDashboardFooter", { fg = "#8a8a8d", italic = true }) + vim.api.nvim_set_hl(0, "SnacksDashboardKey", { fg = "#ffffff", bold = true }) + vim.api.nvim_set_hl(0, "SnacksDashboardDesc", { fg = "#ffffff" }) + vim.api.nvim_set_hl(0, "SnacksDashboardSpecial", { fg = "#ffffff", bold = true }) + + end, + }) + vim.schedule(function() + vim.cmd("doautocmd ColorScheme") + end) + end, + }, +} \ No newline at end of file diff --git a/themes/matte-black/waybar.css b/themes/matte-black/waybar.css new file mode 100644 index 0000000..e2dbce1 --- /dev/null +++ b/themes/matte-black/waybar.css @@ -0,0 +1,4 @@ +* { + color: #8a8a8d; + background-color: #1e1e1e; +} diff --git a/themes/matte-black/wofi.css b/themes/matte-black/wofi.css new file mode 100644 index 0000000..a699672 --- /dev/null +++ b/themes/matte-black/wofi.css @@ -0,0 +1,8 @@ +@define-color selected-text #B91C1C; +@define-color text #EAEAEA; +@define-color base #121212; + +@define-color selected-text #B91C1C; +@define-color text #EAEAEA; +@define-color base #121212; +@define-color border #EAEAEA; From e8b47de2a93d1153b02558398fbd81aad407e667 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Fri, 11 Jul 2025 09:10:59 -0700 Subject: [PATCH 03/69] Add migration to install new matte black theme --- migrations/1752249974.sh | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 migrations/1752249974.sh diff --git a/migrations/1752249974.sh b/migrations/1752249974.sh new file mode 100644 index 0000000..ace2e0d --- /dev/null +++ b/migrations/1752249974.sh @@ -0,0 +1,12 @@ +echo "Add new matte black theme" + +download_background_image() { + local url="$1" + local path="$2" + gum spin --title "Downloading $url as $path..." -- curl -sL -o "$BACKGROUNDS_DIR/$path" "$url" +} + +if [[ ! -L "~/.config/omarchy/themes/matte-black" ]]; then + ln -snf ~/.local/share/omarchy/themes/matte-black ~/.config/omarchy/themes/ + source ~/.local/share/omarchy/themes/matte-black/backgrounds.sh +fi From a477b415933d412e48ee73effc57000b1b0b6118 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Fri, 11 Jul 2025 09:19:17 -0700 Subject: [PATCH 04/69] Fix backgrounds path --- themes/matte-black/backgrounds.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/themes/matte-black/backgrounds.sh b/themes/matte-black/backgrounds.sh index 4c0c8d8..1e24ed9 100644 --- a/themes/matte-black/backgrounds.sh +++ b/themes/matte-black/backgrounds.sh @@ -1,2 +1,2 @@ -mkdir -p "$BACKGROUNDS_DIR/matte-black" +mkdir -p "~/.config/omarchy/backgrounds/matte-black" download_background_image "https://raw.githubusercontent.com/tahayvr/omarchy-matte-black/refs/heads/main/images/1-matte-black.jpg" "matte-black/1-matte-black.jpg" From b761d3df0b9638dd7d29e8e7ac71021ffdc9d5b8 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Fri, 11 Jul 2025 09:23:22 -0700 Subject: [PATCH 05/69] Fix the migration, not the installer --- migrations/1752249974.sh | 1 + themes/matte-black/backgrounds.sh | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/migrations/1752249974.sh b/migrations/1752249974.sh index ace2e0d..30dad9e 100644 --- a/migrations/1752249974.sh +++ b/migrations/1752249974.sh @@ -1,5 +1,6 @@ echo "Add new matte black theme" +BACKGROUNDS_DIR=~/.config/omarchy/backgrounds/ download_background_image() { local url="$1" local path="$2" diff --git a/themes/matte-black/backgrounds.sh b/themes/matte-black/backgrounds.sh index 1e24ed9..4c0c8d8 100644 --- a/themes/matte-black/backgrounds.sh +++ b/themes/matte-black/backgrounds.sh @@ -1,2 +1,2 @@ -mkdir -p "~/.config/omarchy/backgrounds/matte-black" +mkdir -p "$BACKGROUNDS_DIR/matte-black" download_background_image "https://raw.githubusercontent.com/tahayvr/omarchy-matte-black/refs/heads/main/images/1-matte-black.jpg" "matte-black/1-matte-black.jpg" From dd207232e134081cff13b3558e3131e5540cb844 Mon Sep 17 00:00:00 2001 From: Ryan Hughes <1630358+ryanrhughes@users.noreply.github.com> Date: Sun, 13 Jul 2025 17:25:00 -0400 Subject: [PATCH 06/69] Add margin to notifications --- themes/catppuccin/mako.ini | 1 + themes/everforest/mako.ini | 1 + themes/gruvbox/mako.ini | 1 + themes/kanagawa/mako.ini | 1 + themes/nord/mako.ini | 1 + themes/tokyo-night/mako.ini | 1 + 6 files changed, 6 insertions(+) diff --git a/themes/catppuccin/mako.ini b/themes/catppuccin/mako.ini index 0ba300c..1b13e79 100644 --- a/themes/catppuccin/mako.ini +++ b/themes/catppuccin/mako.ini @@ -7,6 +7,7 @@ padding=10 border-size=2 font=Liberation Sans 11 anchor=top-right +outer-margin=20 default-timeout=5000 max-icon-size=32 diff --git a/themes/everforest/mako.ini b/themes/everforest/mako.ini index 6e84cf5..3c1cc74 100644 --- a/themes/everforest/mako.ini +++ b/themes/everforest/mako.ini @@ -7,6 +7,7 @@ padding=10 border-size=2 font=Liberation Sans 11 anchor=top-right +outer-margin=20 default-timeout=5000 max-icon-size=32 diff --git a/themes/gruvbox/mako.ini b/themes/gruvbox/mako.ini index fe4a298..f0106a9 100644 --- a/themes/gruvbox/mako.ini +++ b/themes/gruvbox/mako.ini @@ -7,6 +7,7 @@ padding=10 border-size=2 font=Liberation Sans 11 anchor=top-right +outer-margin=20 default-timeout=5000 max-icon-size=32 diff --git a/themes/kanagawa/mako.ini b/themes/kanagawa/mako.ini index f6b365b..27495bd 100644 --- a/themes/kanagawa/mako.ini +++ b/themes/kanagawa/mako.ini @@ -7,6 +7,7 @@ padding=10 border-size=2 font=Liberation Sans 11 anchor=top-right +outer-margin=20 default-timeout=5000 max-icon-size=32 diff --git a/themes/nord/mako.ini b/themes/nord/mako.ini index c5786d1..0a7dadd 100644 --- a/themes/nord/mako.ini +++ b/themes/nord/mako.ini @@ -7,6 +7,7 @@ padding=10 border-size=2 font=Liberation Sans 11 anchor=top-right +outer-margin=20 default-timeout=5000 max-icon-size=32 diff --git a/themes/tokyo-night/mako.ini b/themes/tokyo-night/mako.ini index 2a57423..51af627 100644 --- a/themes/tokyo-night/mako.ini +++ b/themes/tokyo-night/mako.ini @@ -7,6 +7,7 @@ padding=10 border-size=2 font=Liberation Sans 11 anchor=top-right +outer-margin=20 default-timeout=5000 max-icon-size=32 From 1df035864df70db3be69745092ae0b79ce60927f Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sun, 13 Jul 2025 15:45:05 -0700 Subject: [PATCH 07/69] Bring Matte Black mako.ini in line with the rest --- themes/matte-black/mako.ini | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/themes/matte-black/mako.ini b/themes/matte-black/mako.ini index a57c59b..fecb6b9 100644 --- a/themes/matte-black/mako.ini +++ b/themes/matte-black/mako.ini @@ -1,18 +1,20 @@ text-color=#8a8a8d +border-color=#D8DEE9 background-color=#1e1e1e -border-radius=10 width=420 height=110 padding=10 +border-size=2 font=CaskaydiaMono Nerd Font -border-size=0 anchor=top-right -default-timeout=3000 +default-timeout=5000 max-icon-size=32 [app-name=Spotify] invisible=1 -[urgency=high] -background-color=#660d0d -text-color=#ffffff \ No newline at end of file +[mode=do-not-disturb] +invisible=true + +[mode=do-not-disturb app-name=notify-send] +invisible=false From 83877298b78ff2ef001b30577810246a9a9aab6b Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sun, 13 Jul 2025 15:45:44 -0700 Subject: [PATCH 08/69] We use Liberation Sans for these --- themes/matte-black/mako.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/themes/matte-black/mako.ini b/themes/matte-black/mako.ini index fecb6b9..77be0ab 100644 --- a/themes/matte-black/mako.ini +++ b/themes/matte-black/mako.ini @@ -5,7 +5,7 @@ width=420 height=110 padding=10 border-size=2 -font=CaskaydiaMono Nerd Font +font=Liberation Sans 11 anchor=top-right default-timeout=5000 max-icon-size=32 From 13bc31ad0f7ff8610ef2c6d645fbd9e72ba347e3 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sun, 13 Jul 2025 16:29:22 -0700 Subject: [PATCH 09/69] Improve matte black lock screen colors --- themes/matte-black/hyprlock.conf | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/themes/matte-black/hyprlock.conf b/themes/matte-black/hyprlock.conf index d20896c..6b7266e 100644 --- a/themes/matte-black/hyprlock.conf +++ b/themes/matte-black/hyprlock.conf @@ -1,10 +1,10 @@ -$color = rgba(46,52,64,1.0) # #2e3440 solid color +$color = rgba(12,12,12,1.0) # #333333 matte black -$inner_color = rgba(136,136,136,0.3) #rgb(136, 136, 136) with opacity -$outer_color = rgba(216,222,233,0.5) # #d8dee9 +$inner_color = rgba(138,138,141,0.3) # #8a8a8d with opacity +$outer_color = rgba(234,234,234,0.5) # #EAEAEA -$font_color = rgba(216,222,233,1.0) +$font_color = rgba(234,234,234,1.0) # #EAEAEA -$placeholder_color = rgba(216,222,233,0.6) -$check_color = rgba(136, 192, 208, 1.0) +$placeholder_color = rgba(234,234,234,0.6) # #EAEAEA with opacity +$check_color = rgba(245,158,11,1.0) # #f59e0b amber accent From bde3d915c213889e96748129848c2b52504348b9 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sun, 13 Jul 2025 16:29:33 -0700 Subject: [PATCH 10/69] Excess CR --- themes/matte-black/hyprlock.conf | 1 - 1 file changed, 1 deletion(-) diff --git a/themes/matte-black/hyprlock.conf b/themes/matte-black/hyprlock.conf index 6b7266e..33f91b4 100644 --- a/themes/matte-black/hyprlock.conf +++ b/themes/matte-black/hyprlock.conf @@ -7,4 +7,3 @@ $font_color = rgba(234,234,234,1.0) # #EAEAEA $placeholder_color = rgba(234,234,234,0.6) # #EAEAEA with opacity $check_color = rgba(245,158,11,1.0) # #f59e0b amber accent - From 745a16f2a46ce6aab1ba86f90d53a0e3bfd33a93 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sun, 13 Jul 2025 16:31:05 -0700 Subject: [PATCH 11/69] Catch up with new spacing and improve color --- themes/matte-black/mako.ini | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/themes/matte-black/mako.ini b/themes/matte-black/mako.ini index 77be0ab..723e855 100644 --- a/themes/matte-black/mako.ini +++ b/themes/matte-black/mako.ini @@ -1,5 +1,5 @@ text-color=#8a8a8d -border-color=#D8DEE9 +border-color=#8A8A8D background-color=#1e1e1e width=420 height=110 @@ -7,6 +7,7 @@ padding=10 border-size=2 font=Liberation Sans 11 anchor=top-right +outer-margin=20 default-timeout=5000 max-icon-size=32 From 920e236fc72136a84e559a96fd4f84eaf97305eb Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sun, 13 Jul 2025 16:45:33 -0700 Subject: [PATCH 12/69] Focus on active window to solve the problem that opening URLs wouldnt focus browser if on a different workspace Closes #152 --- default/hypr/looknfeel.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/default/hypr/looknfeel.conf b/default/hypr/looknfeel.conf index be474d1..d73f677 100644 --- a/default/hypr/looknfeel.conf +++ b/default/hypr/looknfeel.conf @@ -95,5 +95,5 @@ master { misc { disable_hyprland_logo = true disable_splash_rendering = true + focus_on_activate = true } - From 41b5893d32c9c87fa7c99c34c0493282b7ce951e Mon Sep 17 00:00:00 2001 From: kieeps Date: Mon, 14 Jul 2025 01:50:22 +0200 Subject: [PATCH 13/69] Just a slight indication of the current audio volume with 3 diffrent icons (#158) * install: explicitly install iwd When archinstall is run using an ethernet connection, iwd will not be installed. Explicitly install and enable the service * Just a slight indication of the current audio volume with 3 diffrent icons --------- Co-authored-by: Tim Culverhouse Co-authored-by: David Heinemeier Hansson --- config/waybar/config | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/config/waybar/config b/config/waybar/config index 86cb205..4104a00 100644 --- a/config/waybar/config +++ b/config/waybar/config @@ -93,12 +93,14 @@ "on-click": "GTK_THEME=Adwaita-dark blueberry" }, "pulseaudio": { - "format": "", - "format-muted": "󰝟", - "scroll-step": 5, + "format": "{icon}", "on-click": "GTK_THEME=Adwaita-dark pavucontrol", - "tooltip-format": "Playing at {volume}%", "on-click-right": "pamixer -t", - "ignored-sinks": ["Easy Effects Sink"] + "tooltip-format": "Playing at {volume}%", + "scroll-step": 5, + "format-muted": "󰝟", + "format-icons": { + "default": ["", "", ""] + } } } From 6433511873b9823ce054eb3606faba4ff1e8c34e Mon Sep 17 00:00:00 2001 From: Nathan Anderson Date: Sun, 13 Jul 2025 20:17:48 -0400 Subject: [PATCH 14/69] Update keyboard shortcuts script to show all runtime keybinds (#70) * feat: Add a keyboard shortcuts helper This commit: * Changes keybinds to use `bindd` and adds descriptions for each one * Changes the keybinds script to use `hyprctl binds` to inspect runtime keybinds and generate a wofi menu to search/inspect keybinds * Rely on 'order defined' for sorting Using `hyprctl binds` lets us get the binds in the order they're defined. This lets us be deliberate about what keybinds we want to show up at the top of the presented window. * Skip cache file for keybinds * Strip extra newline causing double spacing --- bin/omarchy-show-keybindings | 101 +++++++++++++----------- bin/omarchy-toggle-dnd | 8 ++ default/hypr/bindings.conf | 14 +--- default/hypr/bindings/01-important.conf | 14 ++++ default/hypr/bindings/media.conf | 22 +++--- default/hypr/bindings/tiling.conf | 82 +++++++++---------- default/hypr/bindings/utilities.conf | 35 ++++---- install/development.sh | 3 +- 8 files changed, 148 insertions(+), 131 deletions(-) create mode 100644 bin/omarchy-toggle-dnd create mode 100644 default/hypr/bindings/01-important.conf diff --git a/bin/omarchy-show-keybindings b/bin/omarchy-show-keybindings index 6124355..abd9b0b 100755 --- a/bin/omarchy-show-keybindings +++ b/bin/omarchy-show-keybindings @@ -1,59 +1,64 @@ #!/bin/bash -# A script to display Hyprland keybindings defined in your configuration -# using wofi for an interactive search menu. +# Define modifier flags as associative array for name lookup +# per https://github.com/hyprwm/Hyprland/blob/main/src/devices/IKeyboard.hpp#L13-L22 +declare -A MODIFIER_NAMES=( + [$((1 << 0))]="SHIFT" + [$((1 << 1))]="CAPS" + [$((1 << 2))]="CTRL" + [$((1 << 3))]="ALT" + [$((1 << 4))]="MOD2" + [$((1 << 5))]="MOD3" + [$((1 << 6))]="SUPER" + [$((1 << 7))]="MOD5" +) -USER_HYPRLAND_CONF="$HOME/.config/hypr/hyprland.conf" -OMARCHY_BINDINGS_CONF="$HOME/.local/share/omarchy/default/hypr/bindings.conf $HOME/.local/share/omarchy/default/hypr/bindings/tiling.conf $HOME/.local/share/omarchy/default/hypr/bindings/utilities.conf $HOME/.local/share/omarchy/default/hypr/bindings.conf $HOME/.local/share/omarchy/default/hypr/media.conf" +decode_modmask() { + local modifiers=$1 + local result=() -OMARCHY_BINDINGS_CONF="$HOME/.local/share/omarchy/default/hypr/bindings.conf \ -$HOME/.local/share/omarchy/default/hypr/bindings/tiling.conf \ -$HOME/.local/share/omarchy/default/hypr/bindings/utilities.conf \ -$HOME/.local/share/omarchy/default/hypr/media.conf" + for bit in "${!MODIFIER_NAMES[@]}"; do + if (( modifiers & bit )); then + result+=("${MODIFIER_NAMES[$bit]}") + fi + done -# Process the configuration file to extract and format keybindings -# 1. `grep` finds all lines starting with 'bind' (allowing for leading spaces). -# 2. The first `sed` removes comments (anything after a '#'). -# 3. `awk` does the heavy lifting of formatting the output. -# - It sets the field separator to a comma ','. -# - It removes the 'bind... =' part from the beginning of the line. -# - It joins the key combination (e.g., "SUPER + Q"). -# - It joins the command that the key executes. -# - It prints everything in a nicely aligned format. -# 4. The final `sed` cleans up any leftover commas from the end of lines. -grep -h '^[[:space:]]*bind' $USER_HYPRLAND_CONF $OMARCHY_BINDINGS_CONF | - sed 's/#.*//' | - sed '/^[[:space:]]*$/d' | - sort -u | - awk -F, ' -{ - # Strip trailing comments - sub(/#.*/, ""); + # Output all detected modifiers (plus-separated) + echo "${result[*]}" +} - # Remove the "bind... =" part and surrounding whitespace - sub(/^[[:space:]]*bind[^=]*=(\+[[:space:]])?(exec, )?[[:space:]]*/, "", $1); +# Read live keybinds, not config file +OLD_IFS=$IFS +IFS=$'\n' +readarray -t KEYBINDS < <(hyprctl -j binds | jq -cr '.[]') +IFS=$OLD_IFS - # Combine the modifier and key (first two fields) - key_combo = $1 " + " $2; +# Loop over each keybind and pipe results to wofi for inspection/execution +# Format to send to wofi: +# +# -- # - +# exec -- alacritty #SUPER return - Launch a Terminal +# or +# exit -- #SUPER+ALT ESCAPE - Logout +# +# Wofi's pre-display-cmd looks for the '#' and prints everything after it +# in the wofi window. When we pipe that to `xargs hyprctl dispatch`, the +# Comment character ensures we ignore the description text and only executes +# the dispatcher + arg. +for keyconfig in "${KEYBINDS[@]}"; do + # Use pipe '|' to delimit results + IFS="|" read modmask key keycode description dispatcher arg < <(echo $(echo "$keyconfig" | jq -r '[.modmask, .key, .keycode, .description, .dispatcher, .arg] | join("|")')) + keys=($(decode_modmask $modmask) $key) + IFS=$OLD_IFS - # Clean up: strip leading "+" if present, trim spaces - gsub(/^[ \t]*\+?[ \t]*/, "", key_combo); - gsub(/[ \t]+$/, "", key_combo); + # We can't use IFS here, as it only supports single characters + delimiter=" + " - # Reconstruct the command from the remaining fields - action = ""; - for (i = 3; i <= NF; i++) { - action = action $i (i < NF ? "," : ""); - } + # Join the array elements with the delimiter + combo=$(printf "%s$delimiter" "${keys[@]}") - # Clean up trailing commas, remove leading "exec, ", and trim - sub(/,$/, "", action); - gsub(/(^|,)[[:space:]]*exec[[:space:]]*,?/, "", action); - gsub(/^[ \t]+|[ \t]+$/, "", action); - gsub(/[ \t]+/, " ", key_combo); # Collapse multiple spaces to one + # Remove the trailing delimiter + combo="${combo%$delimiter}" - if (action != "") { - printf "%-35s → %s\n", key_combo, action; - } -}' | - flock --nonblock /tmp/.wofi.lock -c "wofi -dmenu -i --width 60% --height 70% -p 'Hyprland Keybindings' -O alphabetical --style=\"$HOME/.local/share/omarchy/default/wofi/search.css\"" + printf "%s -- %s #%-30s → %s\n" "$dispatcher" "$arg" "$combo" "$description" +done | flock --nonblock /tmp/.wofi.lock -c "wofi --cache-file /dev/null --width 40% --height 70% -d -i -p 'Hyprland Keybindings' --style=\"$HOME/.local/share/omarchy/default/wofi/search.css\" -m --pre-display-cmd \"echo '%s' | cut -d'#' -f2 | tr -d '\n'\" | xargs hyprctl dispatch" diff --git a/bin/omarchy-toggle-dnd b/bin/omarchy-toggle-dnd new file mode 100644 index 0000000..6c52b51 --- /dev/null +++ b/bin/omarchy-toggle-dnd @@ -0,0 +1,8 @@ +#!/bin/bash +set -e + +makoctl mode -t do-not-disturb > /dev/null + +makoctl mode | grep -q 'do-not-disturb' \ + && notify-send "Silenced notifications" \ + || notify-send "Enabled notifications" diff --git a/default/hypr/bindings.conf b/default/hypr/bindings.conf index 15bfb20..835421d 100644 --- a/default/hypr/bindings.conf +++ b/default/hypr/bindings.conf @@ -1,16 +1,8 @@ # Deprecated bindings file. New installations include everything directly. +# Order matters for how they show up when you press SUPER + K to see the +# defined keybinds -bind = SUPER, return, exec, $terminal -bind = SUPER, F, exec, $fileManager -bind = SUPER, B, exec, $browser -bind = SUPER, M, exec, $music -bind = SUPER, N, exec, $terminal -e nvim -bind = SUPER, T, exec, $terminal -e btop -bind = SUPER, D, exec, $terminal -e lazydocker -bind = SUPER, G, exec, $messenger -bind = SUPER, O, exec, obsidian -disable-gpu -bind = SUPER, slash, exec, $passwordManager - +source = ~/.local/share/omarchy/default/hypr/bindings/01-important.conf source = ~/.local/share/omarchy/default/hypr/bindings/media.conf source = ~/.local/share/omarchy/default/hypr/bindings/tiling.conf source = ~/.local/share/omarchy/default/hypr/bindings/utilities.conf diff --git a/default/hypr/bindings/01-important.conf b/default/hypr/bindings/01-important.conf new file mode 100644 index 0000000..1ed2ec9 --- /dev/null +++ b/default/hypr/bindings/01-important.conf @@ -0,0 +1,14 @@ +# Launching +bindd = SUPER, space, Application Launcher, exec, pkill wofi || wofi --show drun --sort-order=alphabetical --style="$HOME/.local/share/omarchy/default/wofi/search.css" +bindd = SUPER, K, Show Keybindings, exec, ~/.local/share/omarchy/bin/omarchy-show-keybindings + +bindd = SUPER, return, Launch a Terminal, exec, $terminal +bindd = SUPER, F, Launch a File Manager, exec, $fileManager +bindd = SUPER, B, Launch a Browser, exec, $browser +bindd = SUPER, M, Launch a Music Player, exec, $music +bindd = SUPER, N, Launch nvim, exec, $terminal -e nvim +bindd = SUPER, T, Launch btop, exec, $terminal -e btop +bindd = SUPER, D, Launch lazydocker, exec, $terminal -e lazydocker +bindd = SUPER, G, Launch a Messenger App, exec, $messenger +bindd = SUPER, O, Launch Obsidian, exec, obsidian -disable-gpu +bindd = SUPER, slash, Launch a Password Manager, exec, $passwordManager diff --git a/default/hypr/bindings/media.conf b/default/hypr/bindings/media.conf index a70d8d6..aadcc3b 100644 --- a/default/hypr/bindings/media.conf +++ b/default/hypr/bindings/media.conf @@ -1,13 +1,13 @@ -# Laptop multimedia keys for volume and LCD brightness -bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+ -bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- -bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle -bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle -bindel = ,XF86MonBrightnessUp, exec, brightnessctl -e4 -n2 set 5%+ -bindel = ,XF86MonBrightnessDown, exec, brightnessctl -e4 -n2 set 5%- +# Laptop multimedia keys for volume, media control, and LCD brightness +bindeld = ,XF86AudioRaiseVolume, Raise Volume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+ +bindeld = ,XF86AudioLowerVolume, Lower Volume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- +bindeld = ,XF86AudioMute, Mute Speakers, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle +bindeld = ,XF86AudioMicMute, Mute Mic, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle +bindeld = ,XF86MonBrightnessUp, Raise Brightness, exec, brightnessctl -e4 -n2 set 5%+ +bindeld = ,XF86MonBrightnessDown, Lower Brightness, exec, brightnessctl -e4 -n2 set 5%- # Requires playerctl -bindl = , XF86AudioNext, exec, playerctl next -bindl = , XF86AudioPause, exec, playerctl play-pause -bindl = , XF86AudioPlay, exec, playerctl play-pause -bindl = , XF86AudioPrev, exec, playerctl previous +bindld = , XF86AudioNext, Next Track, exec, playerctl next +bindld = , XF86AudioPause, Pause Media, exec, playerctl play-pause +bindld = , XF86AudioPlay, Pause Media, exec, playerctl play-pause +bindld = , XF86AudioPrev, Previous Track, exec, playerctl previous diff --git a/default/hypr/bindings/tiling.conf b/default/hypr/bindings/tiling.conf index 6dcc37a..0a55195 100644 --- a/default/hypr/bindings/tiling.conf +++ b/default/hypr/bindings/tiling.conf @@ -1,58 +1,58 @@ # Close window -bind = SUPER, W, killactive, +bindd = SUPER, W, Close Window, killactive, # Control tiling -bind = SUPER, J, togglesplit, # dwindle -bind = SUPER, P, pseudo, # dwindle -bind = SUPER, V, togglefloating, +bindd = SUPER, J, Toggle Split, togglesplit, # dwindle +bindd = SUPER, P, Toggle Pseudo, pseudo # dwindle +bindd = SUPER, V, Toggle Floating, togglefloating, +bindd = SUPER CTRL, F, Toggle Fullscreen, fullscreen # Move focus with mainMod + arrow keys -bind = SUPER, left, movefocus, l -bind = SUPER, right, movefocus, r -bind = SUPER, up, movefocus, u -bind = SUPER, down, movefocus, d +bindd = SUPER, left, Move Focus Left, movefocus, l +bindd = SUPER, right, Move Focus Right, movefocus, r +bindd = SUPER, up, Move Focus Up, movefocus, u +bindd = SUPER, down, Move Focus Down, movefocus, d # Switch workspaces with mainMod + [0-9] -bind = SUPER, code:10, workspace, 1 -bind = SUPER, code:11, workspace, 2 -bind = SUPER, code:12, workspace, 3 -bind = SUPER, code:13, workspace, 4 -bind = SUPER, code:14, workspace, 5 -bind = SUPER, code:15, workspace, 6 -bind = SUPER, code:16, workspace, 7 -bind = SUPER, code:17, workspace, 8 -bind = SUPER, code:18, workspace, 9 -bind = SUPER, code:19, workspace, 10 +bindd = SUPER, code:10, Switch to workspace 1, workspace, 1 +bindd = SUPER, code:11, Switch to workspace 2, workspace, 2 +bindd = SUPER, code:12, Switch to workspace 3, workspace, 3 +bindd = SUPER, code:13, Switch to workspace 4, workspace, 4 +bindd = SUPER, code:14, Switch to workspace 5, workspace, 5 +bindd = SUPER, code:15, Switch to workspace 6, workspace, 6 +bindd = SUPER, code:16, Switch to workspace 7, workspace, 7 +bindd = SUPER, code:17, Switch to workspace 8, workspace, 8 +bindd = SUPER, code:18, Switch to workspace 9, workspace, 9 +bindd = SUPER, code:19, Switch to workspace 10, workspace, 10 # Move active window to a workspace with mainMod + SHIFT + [0-9] -bind = SUPER SHIFT, code:10, movetoworkspace, 1 -bind = SUPER SHIFT, code:11, movetoworkspace, 2 -bind = SUPER SHIFT, code:12, movetoworkspace, 3 -bind = SUPER SHIFT, code:13, movetoworkspace, 4 -bind = SUPER SHIFT, code:14, movetoworkspace, 5 -bind = SUPER SHIFT, code:15, movetoworkspace, 6 -bind = SUPER SHIFT, code:16, movetoworkspace, 7 -bind = SUPER SHIFT, code:17, movetoworkspace, 8 -bind = SUPER SHIFT, code:18, movetoworkspace, 9 -bind = SUPER SHIFT, code:19, movetoworkspace, 10 +bindd = SUPER SHIFT, code:10, Move Active Window to workspace 1, movetoworkspace, 1 +bindd = SUPER SHIFT, code:11, Move Active Window to workspace 2, movetoworkspace, 2 +bindd = SUPER SHIFT, code:12, Move Active Window to workspace 3, movetoworkspace, 3 +bindd = SUPER SHIFT, code:13, Move Active Window to workspace 4, movetoworkspace, 4 +bindd = SUPER SHIFT, code:14, Move Active Window to workspace 5, movetoworkspace, 5 +bindd = SUPER SHIFT, code:15, Move Active Window to workspace 6, movetoworkspace, 6 +bindd = SUPER SHIFT, code:16, Move Active Window to workspace 7, movetoworkspace, 7 +bindd = SUPER SHIFT, code:17, Move Active Window to workspace 8, movetoworkspace, 8 +bindd = SUPER SHIFT, code:18, Move Active Window to workspace 9, movetoworkspace, 9 +bindd = SUPER SHIFT, code:19, Move Active Window to workspace 10, movetoworkspace, 10 # Swap active window with the one next to it with mainMod + SHIFT + arrow keys -bind = SUPER SHIFT, left, swapwindow, l -bind = SUPER SHIFT, right, swapwindow, r -bind = SUPER SHIFT, up, swapwindow, u -bind = SUPER SHIFT, down, swapwindow, d +bindd = SUPER SHIFT, left, Swap Active Window with Left, swapwindow, l +bindd = SUPER SHIFT, right, Swap Active Window with Right, swapwindow, r +bindd = SUPER SHIFT, up, Swap Active Window with Up, swapwindow, u +bindd = SUPER SHIFT, down, Swap Active Window with Down, swapwindow, d # Resize active window -bind = SUPER, minus, resizeactive, -100 0 -bind = SUPER, equal, resizeactive, 100 0 -bind = SUPER SHIFT, minus, resizeactive, 0 -100 -bind = SUPER SHIFT, equal, resizeactive, 0 100 +bindd = SUPER, minus, Shrink Window Horizontally, resizeactive, -100 0 +bindd = SUPER, equal, Grow Window Horizontally, resizeactive, 100 0 +bindd = SUPER SHIFT, minus, Shrink Window Vertically, resizeactive, 0 -100 +bindd = SUPER SHIFT, equal, Grow Window Vertically, resizeactive, 0 100 # Scroll through existing workspaces with mainMod + scroll -bind = SUPER, mouse_down, workspace, e+1 -bind = SUPER, mouse_up, workspace, e-1 +bindd = SUPER, mouse_down, Scroll Down though workspaces, workspace, e+1 +bindd = SUPER, mouse_up, Scroll Up through workspaces, workspace, e-1 # Move/resize windows with mainMod + LMB/RMB and dragging -bindm = SUPER, mouse:272, movewindow -bindm = SUPER, mouse:273, resizewindow - +bindmd = SUPER, mouse:272, Move Windows, movewindow +bindmd = SUPER, mouse:273, Resize Windows, resizewindow diff --git a/default/hypr/bindings/utilities.conf b/default/hypr/bindings/utilities.conf index 0e6b1b7..74fb16b 100644 --- a/default/hypr/bindings/utilities.conf +++ b/default/hypr/bindings/utilities.conf @@ -1,32 +1,29 @@ -# Launching -bind = SUPER, space, exec, pkill wofi || wofi --show drun --sort-order=alphabetical --style="$HOME/.local/share/omarchy/default/wofi/search.css" -bind = SUPER, K, exec, ~/.local/share/omarchy/bin/omarchy-show-keybindings - # Aesthetics -bind = SUPER SHIFT, SPACE, exec, pkill -SIGUSR1 waybar -bind = SUPER CTRL, SPACE, exec, ~/.local/share/omarchy/bin/swaybg-next -bind = SUPER SHIFT CTRL, SPACE, exec, ~/.local/share/omarchy/bin/omarchy-theme-next +bindd = SUPER SHIFT, SPACE, Hide Waybar, exec, pkill -SIGUSR1 waybar +bindd = SUPER ALT, SPACE, Reload Waybar, exec, pkill -SIGUSR2 waybar +bindd = SUPER CTRL, SPACE, Next Wallpaper, exec, ~/.local/share/omarchy/bin/swaybg-next +bindd = SUPER SHIFT CTRL, SPACE, Next Theme, exec, ~/.local/share/omarchy/bin/omarchy-theme-next # Notifications -bind = SUPER, comma, exec, makoctl dismiss -bind = SUPER SHIFT, comma, exec, makoctl dismiss --all -bind = SUPER CTRL, comma, exec, makoctl mode -t do-not-disturb && makoctl mode | grep -q 'do-not-disturb' && notify-send "Silenced notifications" || notify-send "Enabled notifications" +bindd = SUPER, comma, Dismiss Notification, exec, makoctl dismiss +bindd = SUPER SHIFT, comma, Dismiss All Notifications, exec, makoctl dismiss --all +bindd = SUPER CTRL, comma, Toggle Do Not Disturb, exec, ~/.local/share/omarchy/bin/omarchy-toggle-dnd # Power menu controls lock, suspend, relaunch, restart, shutdown -bind = SUPER, ESCAPE, exec, ~/.local/share/omarchy/bin/omarchy-power-menu +bindd = SUPER, ESCAPE, Show Power Menu (Lock/Suspend/Relaunch/Restart/Shutdown), exec, ~/.local/share/omarchy/bin/omarchy-power-menu # Toggle idling -bind = SUPER CTRL, I, exec, ~/.local/share/omarchy/bin/omarchy-toggle-idle +bindd = SUPER CTRL, I, Toggle Idling, exec, ~/.local/share/omarchy/bin/omarchy-toggle-idle # Control Apple Display brightness -bind = CTRL, F1, exec, ~/.local/share/omarchy/bin/apple-display-brightness -5000 -bind = CTRL, F2, exec, ~/.local/share/omarchy/bin/apple-display-brightness +5000 -bind = SHIFT CTRL, F2, exec, ~/.local/share/omarchy/bin/apple-display-brightness +60000 +bindd = CTRL, F1, Dim Apple Screen Brightness, exec, ~/.local/share/omarchy/bin/apple-display-brightness -5000 +bindd = CTRL, F2, Raise Apple Screen Brightness, exec, ~/.local/share/omarchy/bin/apple-display-brightness +5000 +bindd = SHIFT CTRL, F2, Set Apple Screen Brightness to Max, exec, ~/.local/share/omarchy/bin/apple-display-brightness +60000 # Screenshots -bind = , PRINT, exec, hyprshot -m region -bind = SHIFT, PRINT, exec, hyprshot -m window -bind = CTRL, PRINT, exec, hyprshot -m output +bindd = , PRINT, Screenshot a Region, exec, hyprshot -m region +bindd = SHIFT, PRINT, Screenshot a Window, exec, hyprshot -m window +bindd = CTRL, PRINT, Screenshot Desktop, exec, hyprshot -m output # Color picker -bind = SUPER, PRINT, exec, hyprpicker -a +bindd = SUPER, PRINT, Pick a Color, exec, hyprpicker -a diff --git a/install/development.sh b/install/development.sh index 9fbf0ec..f986891 100644 --- a/install/development.sh +++ b/install/development.sh @@ -3,4 +3,5 @@ yay -S --noconfirm --needed \ imagemagick \ mariadb-libs postgresql-libs \ github-cli \ - lazygit lazydocker-bin + lazygit lazydocker-bin \ + jq From 4f60ac679781582834ed9b7e86c3534628443a57 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sun, 13 Jul 2025 17:24:49 -0700 Subject: [PATCH 15/69] We have F11 for this --- default/hypr/bindings/tiling.conf | 1 - 1 file changed, 1 deletion(-) diff --git a/default/hypr/bindings/tiling.conf b/default/hypr/bindings/tiling.conf index 0a55195..c8dd275 100644 --- a/default/hypr/bindings/tiling.conf +++ b/default/hypr/bindings/tiling.conf @@ -5,7 +5,6 @@ bindd = SUPER, W, Close Window, killactive, bindd = SUPER, J, Toggle Split, togglesplit, # dwindle bindd = SUPER, P, Toggle Pseudo, pseudo # dwindle bindd = SUPER, V, Toggle Floating, togglefloating, -bindd = SUPER CTRL, F, Toggle Fullscreen, fullscreen # Move focus with mainMod + arrow keys bindd = SUPER, left, Move Focus Left, movefocus, l From 59b59807a9d6e54d9eacb7ed1ce0a3453d815927 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sun, 13 Jul 2025 17:27:30 -0700 Subject: [PATCH 16/69] Revert "We have F11 for this" This reverts commit 4f60ac679781582834ed9b7e86c3534628443a57. --- default/hypr/bindings/tiling.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/default/hypr/bindings/tiling.conf b/default/hypr/bindings/tiling.conf index c8dd275..0a55195 100644 --- a/default/hypr/bindings/tiling.conf +++ b/default/hypr/bindings/tiling.conf @@ -5,6 +5,7 @@ bindd = SUPER, W, Close Window, killactive, bindd = SUPER, J, Toggle Split, togglesplit, # dwindle bindd = SUPER, P, Toggle Pseudo, pseudo # dwindle bindd = SUPER, V, Toggle Floating, togglefloating, +bindd = SUPER CTRL, F, Toggle Fullscreen, fullscreen # Move focus with mainMod + arrow keys bindd = SUPER, left, Move Focus Left, movefocus, l From dc0032c9c39e7fc67bc6185476b52d54f50ded7b Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sun, 13 Jul 2025 17:27:33 -0700 Subject: [PATCH 17/69] Revert "Update keyboard shortcuts script to show all runtime keybinds (#70)" This reverts commit 6433511873b9823ce054eb3606faba4ff1e8c34e. --- bin/omarchy-show-keybindings | 101 +++++++++++------------- bin/omarchy-toggle-dnd | 8 -- default/hypr/bindings.conf | 14 +++- default/hypr/bindings/01-important.conf | 14 ---- default/hypr/bindings/media.conf | 22 +++--- default/hypr/bindings/tiling.conf | 82 +++++++++---------- default/hypr/bindings/utilities.conf | 35 ++++---- install/development.sh | 3 +- 8 files changed, 131 insertions(+), 148 deletions(-) delete mode 100644 bin/omarchy-toggle-dnd delete mode 100644 default/hypr/bindings/01-important.conf diff --git a/bin/omarchy-show-keybindings b/bin/omarchy-show-keybindings index abd9b0b..6124355 100755 --- a/bin/omarchy-show-keybindings +++ b/bin/omarchy-show-keybindings @@ -1,64 +1,59 @@ #!/bin/bash -# Define modifier flags as associative array for name lookup -# per https://github.com/hyprwm/Hyprland/blob/main/src/devices/IKeyboard.hpp#L13-L22 -declare -A MODIFIER_NAMES=( - [$((1 << 0))]="SHIFT" - [$((1 << 1))]="CAPS" - [$((1 << 2))]="CTRL" - [$((1 << 3))]="ALT" - [$((1 << 4))]="MOD2" - [$((1 << 5))]="MOD3" - [$((1 << 6))]="SUPER" - [$((1 << 7))]="MOD5" -) +# A script to display Hyprland keybindings defined in your configuration +# using wofi for an interactive search menu. -decode_modmask() { - local modifiers=$1 - local result=() +USER_HYPRLAND_CONF="$HOME/.config/hypr/hyprland.conf" +OMARCHY_BINDINGS_CONF="$HOME/.local/share/omarchy/default/hypr/bindings.conf $HOME/.local/share/omarchy/default/hypr/bindings/tiling.conf $HOME/.local/share/omarchy/default/hypr/bindings/utilities.conf $HOME/.local/share/omarchy/default/hypr/bindings.conf $HOME/.local/share/omarchy/default/hypr/media.conf" - for bit in "${!MODIFIER_NAMES[@]}"; do - if (( modifiers & bit )); then - result+=("${MODIFIER_NAMES[$bit]}") - fi - done +OMARCHY_BINDINGS_CONF="$HOME/.local/share/omarchy/default/hypr/bindings.conf \ +$HOME/.local/share/omarchy/default/hypr/bindings/tiling.conf \ +$HOME/.local/share/omarchy/default/hypr/bindings/utilities.conf \ +$HOME/.local/share/omarchy/default/hypr/media.conf" - # Output all detected modifiers (plus-separated) - echo "${result[*]}" -} +# Process the configuration file to extract and format keybindings +# 1. `grep` finds all lines starting with 'bind' (allowing for leading spaces). +# 2. The first `sed` removes comments (anything after a '#'). +# 3. `awk` does the heavy lifting of formatting the output. +# - It sets the field separator to a comma ','. +# - It removes the 'bind... =' part from the beginning of the line. +# - It joins the key combination (e.g., "SUPER + Q"). +# - It joins the command that the key executes. +# - It prints everything in a nicely aligned format. +# 4. The final `sed` cleans up any leftover commas from the end of lines. +grep -h '^[[:space:]]*bind' $USER_HYPRLAND_CONF $OMARCHY_BINDINGS_CONF | + sed 's/#.*//' | + sed '/^[[:space:]]*$/d' | + sort -u | + awk -F, ' +{ + # Strip trailing comments + sub(/#.*/, ""); -# Read live keybinds, not config file -OLD_IFS=$IFS -IFS=$'\n' -readarray -t KEYBINDS < <(hyprctl -j binds | jq -cr '.[]') -IFS=$OLD_IFS + # Remove the "bind... =" part and surrounding whitespace + sub(/^[[:space:]]*bind[^=]*=(\+[[:space:]])?(exec, )?[[:space:]]*/, "", $1); -# Loop over each keybind and pipe results to wofi for inspection/execution -# Format to send to wofi: -# -# -- # - -# exec -- alacritty #SUPER return - Launch a Terminal -# or -# exit -- #SUPER+ALT ESCAPE - Logout -# -# Wofi's pre-display-cmd looks for the '#' and prints everything after it -# in the wofi window. When we pipe that to `xargs hyprctl dispatch`, the -# Comment character ensures we ignore the description text and only executes -# the dispatcher + arg. -for keyconfig in "${KEYBINDS[@]}"; do - # Use pipe '|' to delimit results - IFS="|" read modmask key keycode description dispatcher arg < <(echo $(echo "$keyconfig" | jq -r '[.modmask, .key, .keycode, .description, .dispatcher, .arg] | join("|")')) - keys=($(decode_modmask $modmask) $key) - IFS=$OLD_IFS + # Combine the modifier and key (first two fields) + key_combo = $1 " + " $2; - # We can't use IFS here, as it only supports single characters - delimiter=" + " + # Clean up: strip leading "+" if present, trim spaces + gsub(/^[ \t]*\+?[ \t]*/, "", key_combo); + gsub(/[ \t]+$/, "", key_combo); - # Join the array elements with the delimiter - combo=$(printf "%s$delimiter" "${keys[@]}") + # Reconstruct the command from the remaining fields + action = ""; + for (i = 3; i <= NF; i++) { + action = action $i (i < NF ? "," : ""); + } - # Remove the trailing delimiter - combo="${combo%$delimiter}" + # Clean up trailing commas, remove leading "exec, ", and trim + sub(/,$/, "", action); + gsub(/(^|,)[[:space:]]*exec[[:space:]]*,?/, "", action); + gsub(/^[ \t]+|[ \t]+$/, "", action); + gsub(/[ \t]+/, " ", key_combo); # Collapse multiple spaces to one - printf "%s -- %s #%-30s → %s\n" "$dispatcher" "$arg" "$combo" "$description" -done | flock --nonblock /tmp/.wofi.lock -c "wofi --cache-file /dev/null --width 40% --height 70% -d -i -p 'Hyprland Keybindings' --style=\"$HOME/.local/share/omarchy/default/wofi/search.css\" -m --pre-display-cmd \"echo '%s' | cut -d'#' -f2 | tr -d '\n'\" | xargs hyprctl dispatch" + if (action != "") { + printf "%-35s → %s\n", key_combo, action; + } +}' | + flock --nonblock /tmp/.wofi.lock -c "wofi -dmenu -i --width 60% --height 70% -p 'Hyprland Keybindings' -O alphabetical --style=\"$HOME/.local/share/omarchy/default/wofi/search.css\"" diff --git a/bin/omarchy-toggle-dnd b/bin/omarchy-toggle-dnd deleted file mode 100644 index 6c52b51..0000000 --- a/bin/omarchy-toggle-dnd +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash -set -e - -makoctl mode -t do-not-disturb > /dev/null - -makoctl mode | grep -q 'do-not-disturb' \ - && notify-send "Silenced notifications" \ - || notify-send "Enabled notifications" diff --git a/default/hypr/bindings.conf b/default/hypr/bindings.conf index 835421d..15bfb20 100644 --- a/default/hypr/bindings.conf +++ b/default/hypr/bindings.conf @@ -1,8 +1,16 @@ # Deprecated bindings file. New installations include everything directly. -# Order matters for how they show up when you press SUPER + K to see the -# defined keybinds -source = ~/.local/share/omarchy/default/hypr/bindings/01-important.conf +bind = SUPER, return, exec, $terminal +bind = SUPER, F, exec, $fileManager +bind = SUPER, B, exec, $browser +bind = SUPER, M, exec, $music +bind = SUPER, N, exec, $terminal -e nvim +bind = SUPER, T, exec, $terminal -e btop +bind = SUPER, D, exec, $terminal -e lazydocker +bind = SUPER, G, exec, $messenger +bind = SUPER, O, exec, obsidian -disable-gpu +bind = SUPER, slash, exec, $passwordManager + source = ~/.local/share/omarchy/default/hypr/bindings/media.conf source = ~/.local/share/omarchy/default/hypr/bindings/tiling.conf source = ~/.local/share/omarchy/default/hypr/bindings/utilities.conf diff --git a/default/hypr/bindings/01-important.conf b/default/hypr/bindings/01-important.conf deleted file mode 100644 index 1ed2ec9..0000000 --- a/default/hypr/bindings/01-important.conf +++ /dev/null @@ -1,14 +0,0 @@ -# Launching -bindd = SUPER, space, Application Launcher, exec, pkill wofi || wofi --show drun --sort-order=alphabetical --style="$HOME/.local/share/omarchy/default/wofi/search.css" -bindd = SUPER, K, Show Keybindings, exec, ~/.local/share/omarchy/bin/omarchy-show-keybindings - -bindd = SUPER, return, Launch a Terminal, exec, $terminal -bindd = SUPER, F, Launch a File Manager, exec, $fileManager -bindd = SUPER, B, Launch a Browser, exec, $browser -bindd = SUPER, M, Launch a Music Player, exec, $music -bindd = SUPER, N, Launch nvim, exec, $terminal -e nvim -bindd = SUPER, T, Launch btop, exec, $terminal -e btop -bindd = SUPER, D, Launch lazydocker, exec, $terminal -e lazydocker -bindd = SUPER, G, Launch a Messenger App, exec, $messenger -bindd = SUPER, O, Launch Obsidian, exec, obsidian -disable-gpu -bindd = SUPER, slash, Launch a Password Manager, exec, $passwordManager diff --git a/default/hypr/bindings/media.conf b/default/hypr/bindings/media.conf index aadcc3b..a70d8d6 100644 --- a/default/hypr/bindings/media.conf +++ b/default/hypr/bindings/media.conf @@ -1,13 +1,13 @@ -# Laptop multimedia keys for volume, media control, and LCD brightness -bindeld = ,XF86AudioRaiseVolume, Raise Volume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+ -bindeld = ,XF86AudioLowerVolume, Lower Volume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- -bindeld = ,XF86AudioMute, Mute Speakers, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle -bindeld = ,XF86AudioMicMute, Mute Mic, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle -bindeld = ,XF86MonBrightnessUp, Raise Brightness, exec, brightnessctl -e4 -n2 set 5%+ -bindeld = ,XF86MonBrightnessDown, Lower Brightness, exec, brightnessctl -e4 -n2 set 5%- +# Laptop multimedia keys for volume and LCD brightness +bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+ +bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- +bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle +bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle +bindel = ,XF86MonBrightnessUp, exec, brightnessctl -e4 -n2 set 5%+ +bindel = ,XF86MonBrightnessDown, exec, brightnessctl -e4 -n2 set 5%- # Requires playerctl -bindld = , XF86AudioNext, Next Track, exec, playerctl next -bindld = , XF86AudioPause, Pause Media, exec, playerctl play-pause -bindld = , XF86AudioPlay, Pause Media, exec, playerctl play-pause -bindld = , XF86AudioPrev, Previous Track, exec, playerctl previous +bindl = , XF86AudioNext, exec, playerctl next +bindl = , XF86AudioPause, exec, playerctl play-pause +bindl = , XF86AudioPlay, exec, playerctl play-pause +bindl = , XF86AudioPrev, exec, playerctl previous diff --git a/default/hypr/bindings/tiling.conf b/default/hypr/bindings/tiling.conf index 0a55195..6dcc37a 100644 --- a/default/hypr/bindings/tiling.conf +++ b/default/hypr/bindings/tiling.conf @@ -1,58 +1,58 @@ # Close window -bindd = SUPER, W, Close Window, killactive, +bind = SUPER, W, killactive, # Control tiling -bindd = SUPER, J, Toggle Split, togglesplit, # dwindle -bindd = SUPER, P, Toggle Pseudo, pseudo # dwindle -bindd = SUPER, V, Toggle Floating, togglefloating, -bindd = SUPER CTRL, F, Toggle Fullscreen, fullscreen +bind = SUPER, J, togglesplit, # dwindle +bind = SUPER, P, pseudo, # dwindle +bind = SUPER, V, togglefloating, # Move focus with mainMod + arrow keys -bindd = SUPER, left, Move Focus Left, movefocus, l -bindd = SUPER, right, Move Focus Right, movefocus, r -bindd = SUPER, up, Move Focus Up, movefocus, u -bindd = SUPER, down, Move Focus Down, movefocus, d +bind = SUPER, left, movefocus, l +bind = SUPER, right, movefocus, r +bind = SUPER, up, movefocus, u +bind = SUPER, down, movefocus, d # Switch workspaces with mainMod + [0-9] -bindd = SUPER, code:10, Switch to workspace 1, workspace, 1 -bindd = SUPER, code:11, Switch to workspace 2, workspace, 2 -bindd = SUPER, code:12, Switch to workspace 3, workspace, 3 -bindd = SUPER, code:13, Switch to workspace 4, workspace, 4 -bindd = SUPER, code:14, Switch to workspace 5, workspace, 5 -bindd = SUPER, code:15, Switch to workspace 6, workspace, 6 -bindd = SUPER, code:16, Switch to workspace 7, workspace, 7 -bindd = SUPER, code:17, Switch to workspace 8, workspace, 8 -bindd = SUPER, code:18, Switch to workspace 9, workspace, 9 -bindd = SUPER, code:19, Switch to workspace 10, workspace, 10 +bind = SUPER, code:10, workspace, 1 +bind = SUPER, code:11, workspace, 2 +bind = SUPER, code:12, workspace, 3 +bind = SUPER, code:13, workspace, 4 +bind = SUPER, code:14, workspace, 5 +bind = SUPER, code:15, workspace, 6 +bind = SUPER, code:16, workspace, 7 +bind = SUPER, code:17, workspace, 8 +bind = SUPER, code:18, workspace, 9 +bind = SUPER, code:19, workspace, 10 # Move active window to a workspace with mainMod + SHIFT + [0-9] -bindd = SUPER SHIFT, code:10, Move Active Window to workspace 1, movetoworkspace, 1 -bindd = SUPER SHIFT, code:11, Move Active Window to workspace 2, movetoworkspace, 2 -bindd = SUPER SHIFT, code:12, Move Active Window to workspace 3, movetoworkspace, 3 -bindd = SUPER SHIFT, code:13, Move Active Window to workspace 4, movetoworkspace, 4 -bindd = SUPER SHIFT, code:14, Move Active Window to workspace 5, movetoworkspace, 5 -bindd = SUPER SHIFT, code:15, Move Active Window to workspace 6, movetoworkspace, 6 -bindd = SUPER SHIFT, code:16, Move Active Window to workspace 7, movetoworkspace, 7 -bindd = SUPER SHIFT, code:17, Move Active Window to workspace 8, movetoworkspace, 8 -bindd = SUPER SHIFT, code:18, Move Active Window to workspace 9, movetoworkspace, 9 -bindd = SUPER SHIFT, code:19, Move Active Window to workspace 10, movetoworkspace, 10 +bind = SUPER SHIFT, code:10, movetoworkspace, 1 +bind = SUPER SHIFT, code:11, movetoworkspace, 2 +bind = SUPER SHIFT, code:12, movetoworkspace, 3 +bind = SUPER SHIFT, code:13, movetoworkspace, 4 +bind = SUPER SHIFT, code:14, movetoworkspace, 5 +bind = SUPER SHIFT, code:15, movetoworkspace, 6 +bind = SUPER SHIFT, code:16, movetoworkspace, 7 +bind = SUPER SHIFT, code:17, movetoworkspace, 8 +bind = SUPER SHIFT, code:18, movetoworkspace, 9 +bind = SUPER SHIFT, code:19, movetoworkspace, 10 # Swap active window with the one next to it with mainMod + SHIFT + arrow keys -bindd = SUPER SHIFT, left, Swap Active Window with Left, swapwindow, l -bindd = SUPER SHIFT, right, Swap Active Window with Right, swapwindow, r -bindd = SUPER SHIFT, up, Swap Active Window with Up, swapwindow, u -bindd = SUPER SHIFT, down, Swap Active Window with Down, swapwindow, d +bind = SUPER SHIFT, left, swapwindow, l +bind = SUPER SHIFT, right, swapwindow, r +bind = SUPER SHIFT, up, swapwindow, u +bind = SUPER SHIFT, down, swapwindow, d # Resize active window -bindd = SUPER, minus, Shrink Window Horizontally, resizeactive, -100 0 -bindd = SUPER, equal, Grow Window Horizontally, resizeactive, 100 0 -bindd = SUPER SHIFT, minus, Shrink Window Vertically, resizeactive, 0 -100 -bindd = SUPER SHIFT, equal, Grow Window Vertically, resizeactive, 0 100 +bind = SUPER, minus, resizeactive, -100 0 +bind = SUPER, equal, resizeactive, 100 0 +bind = SUPER SHIFT, minus, resizeactive, 0 -100 +bind = SUPER SHIFT, equal, resizeactive, 0 100 # Scroll through existing workspaces with mainMod + scroll -bindd = SUPER, mouse_down, Scroll Down though workspaces, workspace, e+1 -bindd = SUPER, mouse_up, Scroll Up through workspaces, workspace, e-1 +bind = SUPER, mouse_down, workspace, e+1 +bind = SUPER, mouse_up, workspace, e-1 # Move/resize windows with mainMod + LMB/RMB and dragging -bindmd = SUPER, mouse:272, Move Windows, movewindow -bindmd = SUPER, mouse:273, Resize Windows, resizewindow +bindm = SUPER, mouse:272, movewindow +bindm = SUPER, mouse:273, resizewindow + diff --git a/default/hypr/bindings/utilities.conf b/default/hypr/bindings/utilities.conf index 74fb16b..0e6b1b7 100644 --- a/default/hypr/bindings/utilities.conf +++ b/default/hypr/bindings/utilities.conf @@ -1,29 +1,32 @@ +# Launching +bind = SUPER, space, exec, pkill wofi || wofi --show drun --sort-order=alphabetical --style="$HOME/.local/share/omarchy/default/wofi/search.css" +bind = SUPER, K, exec, ~/.local/share/omarchy/bin/omarchy-show-keybindings + # Aesthetics -bindd = SUPER SHIFT, SPACE, Hide Waybar, exec, pkill -SIGUSR1 waybar -bindd = SUPER ALT, SPACE, Reload Waybar, exec, pkill -SIGUSR2 waybar -bindd = SUPER CTRL, SPACE, Next Wallpaper, exec, ~/.local/share/omarchy/bin/swaybg-next -bindd = SUPER SHIFT CTRL, SPACE, Next Theme, exec, ~/.local/share/omarchy/bin/omarchy-theme-next +bind = SUPER SHIFT, SPACE, exec, pkill -SIGUSR1 waybar +bind = SUPER CTRL, SPACE, exec, ~/.local/share/omarchy/bin/swaybg-next +bind = SUPER SHIFT CTRL, SPACE, exec, ~/.local/share/omarchy/bin/omarchy-theme-next # Notifications -bindd = SUPER, comma, Dismiss Notification, exec, makoctl dismiss -bindd = SUPER SHIFT, comma, Dismiss All Notifications, exec, makoctl dismiss --all -bindd = SUPER CTRL, comma, Toggle Do Not Disturb, exec, ~/.local/share/omarchy/bin/omarchy-toggle-dnd +bind = SUPER, comma, exec, makoctl dismiss +bind = SUPER SHIFT, comma, exec, makoctl dismiss --all +bind = SUPER CTRL, comma, exec, makoctl mode -t do-not-disturb && makoctl mode | grep -q 'do-not-disturb' && notify-send "Silenced notifications" || notify-send "Enabled notifications" # Power menu controls lock, suspend, relaunch, restart, shutdown -bindd = SUPER, ESCAPE, Show Power Menu (Lock/Suspend/Relaunch/Restart/Shutdown), exec, ~/.local/share/omarchy/bin/omarchy-power-menu +bind = SUPER, ESCAPE, exec, ~/.local/share/omarchy/bin/omarchy-power-menu # Toggle idling -bindd = SUPER CTRL, I, Toggle Idling, exec, ~/.local/share/omarchy/bin/omarchy-toggle-idle +bind = SUPER CTRL, I, exec, ~/.local/share/omarchy/bin/omarchy-toggle-idle # Control Apple Display brightness -bindd = CTRL, F1, Dim Apple Screen Brightness, exec, ~/.local/share/omarchy/bin/apple-display-brightness -5000 -bindd = CTRL, F2, Raise Apple Screen Brightness, exec, ~/.local/share/omarchy/bin/apple-display-brightness +5000 -bindd = SHIFT CTRL, F2, Set Apple Screen Brightness to Max, exec, ~/.local/share/omarchy/bin/apple-display-brightness +60000 +bind = CTRL, F1, exec, ~/.local/share/omarchy/bin/apple-display-brightness -5000 +bind = CTRL, F2, exec, ~/.local/share/omarchy/bin/apple-display-brightness +5000 +bind = SHIFT CTRL, F2, exec, ~/.local/share/omarchy/bin/apple-display-brightness +60000 # Screenshots -bindd = , PRINT, Screenshot a Region, exec, hyprshot -m region -bindd = SHIFT, PRINT, Screenshot a Window, exec, hyprshot -m window -bindd = CTRL, PRINT, Screenshot Desktop, exec, hyprshot -m output +bind = , PRINT, exec, hyprshot -m region +bind = SHIFT, PRINT, exec, hyprshot -m window +bind = CTRL, PRINT, exec, hyprshot -m output # Color picker -bindd = SUPER, PRINT, Pick a Color, exec, hyprpicker -a +bind = SUPER, PRINT, exec, hyprpicker -a diff --git a/install/development.sh b/install/development.sh index f986891..9fbf0ec 100644 --- a/install/development.sh +++ b/install/development.sh @@ -3,5 +3,4 @@ yay -S --noconfirm --needed \ imagemagick \ mariadb-libs postgresql-libs \ github-cli \ - lazygit lazydocker-bin \ - jq + lazygit lazydocker-bin From e50780e5bdc3a8f24ad5baf12eaa47bfc152a53f Mon Sep 17 00:00:00 2001 From: Leon Hazen <403745+leonhazen@users.noreply.github.com> Date: Mon, 14 Jul 2025 10:40:13 +1000 Subject: [PATCH 18/69] Add collapsing tray to waybar (#130) Co-authored-by: David Heinemeier Hansson --- config/waybar/config | 20 ++++++++++++++++++++ config/waybar/style.css | 5 +++++ 2 files changed, 25 insertions(+) diff --git a/config/waybar/config b/config/waybar/config index 4104a00..71c2c91 100644 --- a/config/waybar/config +++ b/config/waybar/config @@ -10,6 +10,7 @@ "clock" ], "modules-right": [ + "group/tray-expander", "bluetooth", "network", "pulseaudio", @@ -102,5 +103,24 @@ "format-icons": { "default": ["", "", ""] } + }, + "group/tray-expander": { + "orientation": "inherit", + "drawer": { + "transition-duration": 600, + "children-class": "tray-group-item" + }, + "modules": [ + "custom/expand-icon", + "tray" + ] + }, + "custom/expand-icon": { + "format": " ", + "tooltip": false + }, + "tray": { + "icon-size": 12, + "spacing": 12 } } diff --git a/config/waybar/style.css b/config/waybar/style.css index 5762928..0a5bc3b 100644 --- a/config/waybar/style.css +++ b/config/waybar/style.css @@ -17,6 +17,7 @@ } #custom-dropbox, +#tray, #cpu, #battery, #network, @@ -28,6 +29,10 @@ margin-right: 13px; } +#custom-expand-icon { + margin-right: 12px; +} + tooltip { padding: 2px; } From 20357908170ca20ffd6ea317124d7c4716e50d72 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sun, 13 Jul 2025 17:45:21 -0700 Subject: [PATCH 19/69] Fix indention --- config/waybar/config | 242 +++++++++++++++++++++---------------------- 1 file changed, 121 insertions(+), 121 deletions(-) diff --git a/config/waybar/config b/config/waybar/config index d435cca..9349bba 100644 --- a/config/waybar/config +++ b/config/waybar/config @@ -1,130 +1,130 @@ { "reload_style_on_change": true, "layer": "top", - "position": "top", - "spacing": 0, - "height": 26, - "modules-left": [ - "hyprland/workspaces" - ], - "modules-center": [ - "clock" - ], - "modules-right": [ - "group/tray-expander", - "bluetooth", - "network", - "pulseaudio", - "cpu", - "battery" - ], - "hyprland/workspaces": { - "on-click": "activate", - "format": "{icon}", - "format-icons": { - "default": "", - "1": "1", - "2": "2", - "3": "3", - "4": "4", - "5": "5", - "6": "6", - "7": "7", - "8": "8", - "9": "9", - "active": "󱓻" - }, - "persistent-workspaces": { - "1": [], - "2": [], - "3": [], - "4": [], - "5": [] - } + "position": "top", + "spacing": 0, + "height": 26, + "modules-left": [ + "hyprland/workspaces" + ], + "modules-center": [ + "clock" + ], + "modules-right": [ + "group/tray-expander", + "bluetooth", + "network", + "pulseaudio", + "cpu", + "battery" + ], + "hyprland/workspaces": { + "on-click": "activate", + "format": "{icon}", + "format-icons": { + "default": "", + "1": "1", + "2": "2", + "3": "3", + "4": "4", + "5": "5", + "6": "6", + "7": "7", + "8": "8", + "9": "9", + "active": "󱓻" }, - "cpu": { - "interval": 5, - "format": "󰍛", - "on-click": "alacritty -e btop" - }, - "clock": { - "format": "{:%A %H:%M}", - "format-alt": "{:%d %B W%V %Y}", - "tooltip": false - }, - "network": { - "format-icons": ["󰤯","󰤟","󰤢","󰤥","󰤨"], - "format" : "{icon}", - "format-wifi" : "{icon}", - "format-ethernet" : "󰀂", - "format-disconnected" : "󰖪", - "tooltip-format-wifi": "{essid} ({frequency} GHz)\n⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}", - "tooltip-format-ethernet": "⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}", - "tooltip-format-disconnected": "Disconnected", - "interval": 3, - "nospacing": 1, - "on-click": "alacritty --class=Impala -e impala" - }, - "battery": { - "format": "{capacity}% {icon}", - "format-discharging": "{icon}", - "format-charging": "{icon}", - "format-plugged": "", - "format-icons": { - "charging": [ - "󰢜", "󰂆", "󰂇", "󰂈", "󰢝", "󰂉", "󰢞", "󰂊", "󰂋", "󰂅" - ], - "default": [ - "󰁺", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹" - ] - }, - "format-full": "󰂅", - "tooltip-format-discharging": "{power:>1.0f}W↓ {capacity}%", - "tooltip-format-charging": "{power:>1.0f}W↑ {capacity}%", - "interval": 5, - "states": { - "warning": 20, - "critical": 10 - } - }, - "bluetooth": { - "format": "", - "format-disabled": "󰂲", - "format-connected": "", - "tooltip-format": "Devices connected: {num_connections}", - "on-click": "GTK_THEME=Adwaita-dark blueberry" - }, - "pulseaudio": { - "format": "{icon}", - "on-click": "GTK_THEME=Adwaita-dark pavucontrol", - "on-click-right": "pamixer -t", - "tooltip-format": "Playing at {volume}%", - "scroll-step": 5, - "format-muted": "󰝟", - "format-icons": { - "default": ["", "", ""] - } - }, - "group/tray-expander": { - "orientation": "inherit", - "drawer": { - "transition-duration": 600, - "children-class": "tray-group-item" - }, - "modules": [ - "custom/expand-icon", - "tray" - ] - }, - "custom/expand-icon": { - "format": " ", - "tooltip": false - }, - "tray": { - "icon-size": 12, - "spacing": 12 + "persistent-workspaces": { + "1": [], + "2": [], + "3": [], + "4": [], + "5": [] } }, + "cpu": { + "interval": 5, + "format": "󰍛", + "on-click": "alacritty -e btop" + }, + "clock": { + "format": "{:%A %H:%M}", + "format-alt": "{:%d %B W%V %Y}", + "tooltip": false + }, + "network": { + "format-icons": ["󰤯","󰤟","󰤢","󰤥","󰤨"], + "format" : "{icon}", + "format-wifi" : "{icon}", + "format-ethernet" : "󰀂", + "format-disconnected" : "󰖪", + "tooltip-format-wifi": "{essid} ({frequency} GHz)\n⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}", + "tooltip-format-ethernet": "⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}", + "tooltip-format-disconnected": "Disconnected", + "interval": 3, + "nospacing": 1, + "on-click": "alacritty --class=Impala -e impala" + }, + "battery": { + "format": "{capacity}% {icon}", + "format-discharging": "{icon}", + "format-charging": "{icon}", + "format-plugged": "", + "format-icons": { + "charging": [ + "󰢜", "󰂆", "󰂇", "󰂈", "󰢝", "󰂉", "󰢞", "󰂊", "󰂋", "󰂅" + ], + "default": [ + "󰁺", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹" + ] + }, + "format-full": "󰂅", + "tooltip-format-discharging": "{power:>1.0f}W↓ {capacity}%", + "tooltip-format-charging": "{power:>1.0f}W↑ {capacity}%", + "interval": 5, + "states": { + "warning": 20, + "critical": 10 + } + }, + "bluetooth": { + "format": "", + "format-disabled": "󰂲", + "format-connected": "", + "tooltip-format": "Devices connected: {num_connections}", + "on-click": "GTK_THEME=Adwaita-dark blueberry" + }, + "pulseaudio": { + "format": "{icon}", + "on-click": "GTK_THEME=Adwaita-dark pavucontrol", + "on-click-right": "pamixer -t", + "tooltip-format": "Playing at {volume}%", + "scroll-step": 5, + "format-muted": "󰝟", + "format-icons": { + "default": ["", "", ""] + } + }, + "group/tray-expander": { + "orientation": "inherit", + "drawer": { + "transition-duration": 600, + "children-class": "tray-group-item" + }, + "modules": [ + "custom/expand-icon", + "tray" + ] + }, + "custom/expand-icon": { + "format": " ", + "tooltip": false + }, + "tray": { + "icon-size": 12, + "spacing": 12 + } +}, "cpu": { "interval": 5, "format": "󰍛", From c9b193505447f955e0b9591bda92f8958efbe204 Mon Sep 17 00:00:00 2001 From: Ryan Hughes <1630358+ryanrhughes@users.noreply.github.com> Date: Sun, 13 Jul 2025 20:51:03 -0400 Subject: [PATCH 20/69] Improve boot screen transition (#140) * Working concept with SDDM * Working concept without SDDM dep * Working concept w/o SDDM and w/ UWSM * Cleanup and UWSM tweaks * Cleanup * Remove call to seamless-login.sh * Don't allow the progress to go backwards * Add refresh to migration --- bin/omarchy-power-menu | 2 +- config/environment.d/fcitx.conf | 1 - default/plymouth/omarchy.script | 30 ++++++--- install/4-config.sh | 8 --- install/hyprlandia.sh | 3 - install/login.sh | 115 ++++++++++++++++++++++++++++++++ install/plymouth.sh | 12 ++-- migrations/1752292967.sh | 18 +++++ 8 files changed, 162 insertions(+), 27 deletions(-) create mode 100644 install/login.sh create mode 100644 migrations/1752292967.sh diff --git a/bin/omarchy-power-menu b/bin/omarchy-power-menu index 6c8d6a7..b9989e4 100755 --- a/bin/omarchy-power-menu +++ b/bin/omarchy-power-menu @@ -15,7 +15,7 @@ show_power_menu() { case "$selection" in *Lock*) hyprlock ;; *Suspend*) systemctl suspend ;; - *Relaunch*) hyprctl dispatch exit ;; + *Relaunch*) uwsm stop ;; *Restart*) systemctl reboot ;; *Shutdown*) systemctl poweroff ;; esac diff --git a/config/environment.d/fcitx.conf b/config/environment.d/fcitx.conf index fbb5e69..ecedbcc 100644 --- a/config/environment.d/fcitx.conf +++ b/config/environment.d/fcitx.conf @@ -1,5 +1,4 @@ INPUT_METHOD=fcitx -GTK_IM_MODULE=fcitx QT_IM_MODULE=fcitx XMODIFIERS=@im=fcitx SDL_IM_MODULE=fcitx diff --git a/default/plymouth/omarchy.script b/default/plymouth/omarchy.script index 07b2cd0..663f4f5 100644 --- a/default/plymouth/omarchy.script +++ b/default/plymouth/omarchy.script @@ -20,6 +20,7 @@ global.fake_progress_active = 0; # 0 / 1 boolean global.animation_frame = 0; global.fake_progress_start_time = 0; # Track when fake progress started global.password_shown = 0; # Track if password dialog has been shown +global.max_progress = 0.0; # Track the maximum progress reached to prevent backwards movement fun refresh_callback () { @@ -55,11 +56,16 @@ Plymouth.SetRefreshFunction (refresh_callback); fun update_progress_bar(progress) { - width = Math.Int(progress_bar.original_image.GetWidth() * progress); - if (width < 1) width = 1; # Ensure minimum width of 1 pixel - - progress_bar.image = progress_bar.original_image.Scale(width, progress_bar.original_image.GetHeight()); - progress_bar.sprite.SetImage(progress_bar.image); + # Only update if progress is moving forward + if (progress > global.max_progress) + { + global.max_progress = progress; + width = Math.Int(progress_bar.original_image.GetWidth() * progress); + if (width < 1) width = 1; # Ensure minimum width of 1 pixel + + progress_bar.image = progress_bar.original_image.Scale(width, progress_bar.original_image.GetHeight()); + progress_bar.sprite.SetImage(progress_bar.image); + } } fun show_progress_bar() @@ -90,11 +96,15 @@ fun hide_password_dialog() fun start_fake_progress() { - global.fake_progress = 0.0; - global.real_progress = 0.0; + # Don't reset if we already have progress + if (global.max_progress == 0.0) + { + global.fake_progress = 0.0; + global.real_progress = 0.0; + update_progress_bar(0.0); + } global.fake_progress_active = 1; global.animation_frame = 0; - update_progress_bar(0.0); } fun stop_fake_progress() @@ -149,8 +159,12 @@ fun display_password_callback (prompt, bullets) { global.password_shown = 1; # Mark that password dialog has been shown + # Reset progress when password dialog appears stop_fake_progress(); hide_progress_bar(); + global.max_progress = 0.0; + global.fake_progress = 0.0; + global.real_progress = 0.0; show_password_dialog(); # Clear all bullets first diff --git a/install/4-config.sh b/install/4-config.sh index 8314790..69adf77 100644 --- a/install/4-config.sh +++ b/install/4-config.sh @@ -7,14 +7,6 @@ mkdir -p ~/.local/share/applications # Use default bashrc from Omarchy echo "source ~/.local/share/omarchy/default/bash/rc" >~/.bashrc -# Login directly as user, rely on disk encryption + hyprlock for security -sudo mkdir -p /etc/systemd/system/getty@tty1.service.d -sudo tee /etc/systemd/system/getty@tty1.service.d/override.conf >/dev/null <~/.bash_profile diff --git a/install/login.sh b/install/login.sh new file mode 100644 index 0000000..48ac5c4 --- /dev/null +++ b/install/login.sh @@ -0,0 +1,115 @@ +#!/bin/bash +# Hyprland launched via UWSM and login directly as user, rely on disk encryption + hyprlock for security +yay -S --noconfirm --needed uwsm + +# Compile the seamless login helper -- needed to prevent seeing terminal between loader and desktop +cat <<'CCODE' >/tmp/seamless-login.c +/* + * Seamless Login - Minimal SDDM-style Plymouth transition + * Replicates SDDM's VT management for seamless auto-login + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +int main(int argc, char *argv[]) { + int vt_fd; + int vt_num = 1; // TTY1 + char vt_path[32]; + + if (argc < 2) { + fprintf(stderr, "Usage: %s \n", argv[0]); + return 1; + } + + // Open the VT (simple approach like SDDM) + snprintf(vt_path, sizeof(vt_path), "/dev/tty%d", vt_num); + vt_fd = open(vt_path, O_RDWR); + if (vt_fd < 0) { + perror("Failed to open VT"); + return 1; + } + + // Activate the VT + if (ioctl(vt_fd, VT_ACTIVATE, vt_num) < 0) { + perror("VT_ACTIVATE failed"); + close(vt_fd); + return 1; + } + + // Wait for VT to be active + if (ioctl(vt_fd, VT_WAITACTIVE, vt_num) < 0) { + perror("VT_WAITACTIVE failed"); + close(vt_fd); + return 1; + } + + // Critical: Set graphics mode to prevent console text + if (ioctl(vt_fd, KDSETMODE, KD_GRAPHICS) < 0) { + perror("KDSETMODE KD_GRAPHICS failed"); + close(vt_fd); + return 1; + } + + // Clear VT and close (like SDDM does) + const char *clear_seq = "\33[H\33[2J"; + if (write(vt_fd, clear_seq, strlen(clear_seq)) < 0) { + perror("Failed to clear VT"); + } + + close(vt_fd); + + // Set working directory to user's home + const char *home = getenv("HOME"); + if (home) chdir(home); + + // Now execute the session command + execvp(argv[1], &argv[1]); + perror("Failed to exec session"); + return 1; +} +CCODE + +gcc -o /tmp/seamless-login /tmp/seamless-login.c +sudo mv /tmp/seamless-login /usr/local/bin/seamless-login +sudo chmod +x /usr/local/bin/seamless-login +rm /tmp/seamless-login.c + +cat </dev/null; then # Relying on mkinitcpio to assemble a UKI # https://wiki.archlinux.org/title/Unified_kernel_image if ! grep -q splash /etc/cmdline.d/*.conf; then - # Need splash, create the omarchy file - echo "splash" | sudo tee -a /etc/cmdline.d/omarchy.conf + # Need splash, create the omarchy file + echo "splash" | sudo tee -a /etc/cmdline.d/omarchy.conf fi if ! grep -q quiet /etc/cmdline.d/*.conf; then - # Need quiet, create or append the omarchy file - echo "quiet" | sudo tee -a /etc/cmdline.d/omarchy.conf + # Need quiet, create or append the omarchy file + echo "quiet" | sudo tee -a /etc/cmdline.d/omarchy.conf fi elif [ -f "/etc/kernel/cmdline" ]; then # Alternate UKI kernel cmdline location @@ -95,10 +95,10 @@ if ! command -v plymouth &>/dev/null; then # Add splash and quiet if not present new_cmdline="$current_cmdline" if [[ ! "$current_cmdline" =~ splash ]]; then - new_cmdline="$new_cmdline splash" + new_cmdline="$new_cmdline splash" fi if [[ ! "$current_cmdline" =~ quiet ]]; then - new_cmdline="$new_cmdline quiet" + new_cmdline="$new_cmdline quiet" fi # Trim any leading/trailing spaces diff --git a/migrations/1752292967.sh b/migrations/1752292967.sh new file mode 100644 index 0000000..293d74a --- /dev/null +++ b/migrations/1752292967.sh @@ -0,0 +1,18 @@ +echo "Update to use UWSM and seamless login" +sudo rm /etc/systemd/system/getty@tty1.service.d/override.conf +sudo rmdir /etc/systemd/system/getty@tty1.service.d/ 2>/dev/null || true + +if [ -f "$HOME/.bash_profile" ]; then + # Remove the specific line + sed -i '/^\[\[ -z \$DISPLAY && \$(tty) == \/dev\/tty1 \]\] && exec Hyprland$/d' "$HOME/.bash_profile" + echo "Cleaned up .bash_profile" +fi + +if [ -f "$HOME/.config/environment.d/fcitx.conf" ]; then + echo "Removing GTK_IM_MODULE from fcitx config for Wayland..." + sed -i 's/^GTK_IM_MODULE=fcitx$//' "$HOME/.config/environment.d/fcitx.conf" +fi + +omarchy-refresh-plymouth + +source ~/.local/share/omarchy/install/login.sh From 3d060c384e8c0f8995893b1daa2a175e640ddd83 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sun, 13 Jul 2025 18:01:08 -0700 Subject: [PATCH 21/69] Fix XCompose use in Typora --- applications/xtras/typora.desktop | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 applications/xtras/typora.desktop diff --git a/applications/xtras/typora.desktop b/applications/xtras/typora.desktop new file mode 100644 index 0000000..c1af035 --- /dev/null +++ b/applications/xtras/typora.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=Typora +GenericName=Markdown Editor +Exec=typora --enable-wayland-ime %U +Icon=typora +Type=Application +StartupNotify=true +Categories=Office;WordProcessor; +MimeType=text/markdown;text/x-markdown; + From 03f7403cdd0fb60701b65433d530c254e40d8e3f Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sun, 13 Jul 2025 18:02:19 -0700 Subject: [PATCH 22/69] Add migration to fix XCompose in Typora --- migrations/.sh | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 migrations/.sh diff --git a/migrations/.sh b/migrations/.sh new file mode 100644 index 0000000..5b464c3 --- /dev/null +++ b/migrations/.sh @@ -0,0 +1,4 @@ +echo "Fix XCompose use in Typora" +if command -v typora &>/dev/null; then + cp ~/.local/share/omarchy/applications/xtras/typora.desktop ~/.local/share/applications/ +fi From 6ac1cd4bbe2dd3a2a40261486b4927072a836131 Mon Sep 17 00:00:00 2001 From: Dean Perry Date: Mon, 14 Jul 2025 18:39:22 +0100 Subject: [PATCH 23/69] Add Synaptics to the fingerprint check (#172) --- bin/omarchy-fingerprint-setup | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/omarchy-fingerprint-setup b/bin/omarchy-fingerprint-setup index dd71aaa..f0bd9dd 100755 --- a/bin/omarchy-fingerprint-setup +++ b/bin/omarchy-fingerprint-setup @@ -2,7 +2,7 @@ yay -S --noconfirm --needed fprintd usbutils -if ! lsusb | grep -iq fingerprint; then +if ! lsusb | grep -Eiq 'fingerprint|synaptics'; then echo -e "\e[31m\nNo fingerprint sensor detected.\e[0m" else # Add fingerprint authentication as an option for sudo From 10d332e5d1d512d6f5946f6dd2bfa7bc57dd9df2 Mon Sep 17 00:00:00 2001 From: Taha Date: Mon, 14 Jul 2025 10:42:40 -0700 Subject: [PATCH 24/69] Update matte-black theme for consistency (#164) --- themes/matte-black/alacritty.toml | 54 +++----- themes/matte-black/btop.theme | 4 +- themes/matte-black/neovim.lua | 214 ++++++++++++++++++++++++++---- 3 files changed, 211 insertions(+), 61 deletions(-) diff --git a/themes/matte-black/alacritty.toml b/themes/matte-black/alacritty.toml index 7f2240a..2082409 100644 --- a/themes/matte-black/alacritty.toml +++ b/themes/matte-black/alacritty.toml @@ -1,6 +1,6 @@ # ──────────────────────────────────────────────────────────── -# Matte Black Theme for Alacritty -# By noiseRandom +# Omarchy Matte Black Theme for Alacritty +# By tahayvr # https://github.com/tahayvr # ──────────────────────────────────────────────────────────── @@ -17,47 +17,37 @@ size = 12.0 [colors] [colors.primary] background = "#121212" -foreground = "#eaeaea" -dim_foreground = "#a5abb6" +foreground = "#bebebe" +dim_foreground = "#8a8a8d" [colors.cursor] text = "#121212" cursor = "#eaeaea" [colors.vi_mode_cursor] -text = "#2e3440" -cursor = "#d8dee9" +text = "#121212" +cursor = "#eaeaea" [colors.selection] text = "CellForeground" -background = "#333333" #charcoal +background = "#333333" [colors.normal] -black = "#2c2c2c" -red = "#bf616a" -green = "#a3be8c" -yellow = "#ebcb8b" -blue = "#81a1c1" -magenta = "#b48ead" -cyan = "#88c0d0" -white = "#e5e9f0" +black = "#333333" +red = "#D35F5F" +green = "#FFC107" +yellow = "#b91c1c" +blue = "#e68e0d" +magenta = "#D35F5F" +cyan = "#bebebe" +white = "#bebebe" [colors.bright] black = "#8a8a8d" -red = "#bf616a" -green = "#a3be8c" -yellow = "#ebcb8b" -blue = "#81a1c1" -magenta = "#b48ead" -cyan = "#8fbcbb" -white = "#eceff4" - -[colors.dim] -black = "#373e4d" -red = "#94545d" -green = "#809575" -yellow = "#b29e75" -blue = "#68809a" -magenta = "#8c738c" -cyan = "#6d96a5" -white = "#aeb3bb" +red = "#B91C1C" +green = "#FFC107" +yellow = "#b90a0a" +blue = "#f59e0b" +magenta = "#B91C1C" +cyan = "#eaeaea" +white = "#ffffff" \ No newline at end of file diff --git a/themes/matte-black/btop.theme b/themes/matte-black/btop.theme index 452a9b8..c8cdcd0 100644 --- a/themes/matte-black/btop.theme +++ b/themes/matte-black/btop.theme @@ -1,6 +1,6 @@ # ──────────────────────────────────────────────────────────── -# Bashtop theme with Matte Black palette -# by noiseRandom +# Bashtop theme - Omarchy Matte Black +# by tahayvr # https://github.com/tahayvr # ──────────────────────────────────────────────────────────── diff --git a/themes/matte-black/neovim.lua b/themes/matte-black/neovim.lua index 31b9afe..f2d9f43 100644 --- a/themes/matte-black/neovim.lua +++ b/themes/matte-black/neovim.lua @@ -1,30 +1,190 @@ return { - { "rebelot/kanagawa.nvim"}, - { "EdenEast/nightfox.nvim" }, - { - "LazyVim/LazyVim", - opts = { - colorscheme = "carbonfox", - }, - init = function() - -- Custom highlight groups for dashboard colors only - vim.api.nvim_create_autocmd("ColorScheme", { - pattern = "*", - callback = function() - vim.api.nvim_set_hl(0, "SnacksDashboardHeader", { fg = "#8a8a8d", bold = true }) - vim.api.nvim_set_hl(0, "SnacksDashboardIcon", { fg = "#8a8a8d" }) - vim.api.nvim_set_hl(0, "SnacksDashboardDir", { fg = "#8a8a8d" }) - vim.api.nvim_set_hl(0, "SnacksDashboardFile", { fg = "#8a8a8d" }) - vim.api.nvim_set_hl(0, "SnacksDashboardFooter", { fg = "#8a8a8d", italic = true }) - vim.api.nvim_set_hl(0, "SnacksDashboardKey", { fg = "#ffffff", bold = true }) - vim.api.nvim_set_hl(0, "SnacksDashboardDesc", { fg = "#ffffff" }) - vim.api.nvim_set_hl(0, "SnacksDashboardSpecial", { fg = "#ffffff", bold = true }) + "EdenEast/nightfox.nvim", + lazy = false, + priority = 1000, + dependencies = { + "folke/snacks.nvim", + "nvim-tree/nvim-web-devicons", + "nvim-lualine/lualine.nvim", + }, + + config = function() + local nightfox = require('nightfox') + local Shade = require('nightfox.lib.shade') + local c = require('nightfox.lib.color') + + local matte_black_palette = { + -- Base "Matte Black" Palette Overrides + bg0 = "#0D0D0D", bg1 = "#121212", bg2 = "#1E1E1E", bg3 = "#2C2C2C", bg4 = "#333333", + fg0 = "#FFFFFF", fg1 = "#BEBEBE", fg2 = "#BEBEBE", fg3 = "#8A8A8D", + sel0 = "#2C2C2C", + sel1 = c.from_hex("#2C2C2C"):blend(c.from_hex("#F59E0B"), 0.2):to_css(), + comment = "#333333", + red = Shade.new("#D35F5F", c.from_hex("#D35F5F"):lighten(8):to_css(), "#B91C1C"), + orange = Shade.new("#F59E0B", "#FFC107", c.from_hex("#F59E0B"):lighten(-8):to_css()), + yellow = Shade.new("#FFC107", c.from_hex("#FFC107"):lighten(10):to_css(), "#F59E0B"), + white = Shade.new("#EAEAEA", "#FFFFFF", "#BEBEBE"), + black = Shade.new("#333333", "#8A8A8D", "#1E1E1E"), + green = Shade.new("#8A9A7B", "#A5B799", "#6F7C62"), + cyan = Shade.new("#88AABB", "#A2C4D3", "#6E8A99"), + blue = Shade.new("#8A9FBE", "#A4BBDD", "#7084A1"), + magenta = Shade.new("#C1A1C1", "#D9B9D9", "#A989A9"), + pink = Shade.new("#D398A7", "#EBC0CB", "#B97E8D"), + + -- Lualine Palette Extensions + lualine_normal_bg = "#F59E0B", + lualine_insert_bg = "#B91C1C", + lualine_visual_bg = "#C1A1C1", + lualine_command_bg = "#F59E0B", + lualine_inactive_bg = c.from_hex("#121212"):lighten(5):to_css(), + + -- Treesitter Palette Extensions + ts_parameter = "#D398A7", + ts_property = "#EAEAEA", + } + + local final_palettes = { + carbonfox = require('nightfox.lib.collect').deep_extend( + require('nightfox.palette').load('carbonfox'), + matte_black_palette + ) + } + + local specs = { + carbonfox = { + syntax = { + keyword = "red", -- "local", "function", "if" + conditional = "red", + statement = "red", + func = "orange", + string = "orange.dim", + number = "orange", + operator = "yellow", + variable = "white", + ident = "white.dim", + const = "white", + type = "white", + field = "white.dim", + comment = "comment", + }, + diag = { + error = "red", + warn = "red", + info = "cyan", + hint = "magenta", + } + } + } + + local groups = { + all = { + -- Base Groups + Whitespace = { fg = "palette.black.bright" }, + NonText = { fg = "palette.black.bright" }, + IncSearch = { bg = "palette.sel1" }, + + -- Noice Cmdline Overrides + NoiceCmdlinePopupBorder = { fg = "palette.fg3" }, + NoiceCmdlinePopupTitle = { fg = "palette.fg3", style = "bold" }, + NoiceCmdlinePopupBorderSearch = { fg = "palette.fg3" }, + NoiceCmdlinePopupTitleSearch = { fg = "palette.fg3", style = "bold" }, + NoiceCmdLineIcon = { fg = "palette.red" }, + + -- Neo-tree overrides + NeoTreeNormal = { bg = "palette.bg0" }, + NeoTreeNormalNC = { link = "NeoTreeNormal" }, + NeoTreeDirectoryName = { fg = "palette.fg3" }, + NeoTreeDirectoryIcon = { fg = "palette.fg3" }, + NeoTreeRootName = { fg = "palette.orange", style = "bold" }, + NeoTreeGitAdded = { fg = "palette.green" }, + NeoTreeGitModified = { fg = "palette.yellow" }, + NeoTreeGitDeleted = { fg = "palette.red" }, + NeoTreeGitIgnored = { fg = "palette.comment" }, + NeoTreeC = { fg = "palette.orange", bg = "palette.sel0" }, + + -- Dashboard overrides + SnacksDashboardHeader = { fg = "palette.fg3" }, + SnacksDashboardIcon = { fg = "palette.fg1" }, + SnacksDashboardDir = { fg = "palette.orange" }, + SnacksDashboardFile = { fg = "palette.fg3" }, + SnacksDashboardFooter = { fg = "palette.fg3" }, + SnacksDashboardKey = { fg = "palette.orange" }, + SnacksDashboardDesc = { fg = "palette.fg1" }, + SnacksDashboardSpecial = { fg = "palette.fg1" }, + + -- Treesitter overrides + ["@comment"] = { fg = "palette.comment", style = "italic" }, + ["@keyword"] = { fg = "palette.red", style = "bold" }, + ["@keyword.function"] = { fg = "palette.red", style = "bold" }, + ["@keyword.operator"] = { fg = "palette.red", style = "bold" }, + ["@function"] = { fg = "palette.orange", style = "bold" }, + ["@function.builtin"] = { fg = "palette.orange", style = "bold" }, + ["@function.call"] = { fg = "palette.orange" }, + ["@string"] = { fg = "palette.orange" }, + ["@number"] = { fg = "palette.orange" }, + ["@operator"] = { fg = "palette.yellow" }, + ["@variable"] = { fg = "palette.white" }, + ["@constant"] = { fg = "palette.white" }, + ["@type"] = { fg = "palette.white.dim" }, + ["@variable.parameter"] = { fg = "palette.ts_parameter", style = "italic" }, + ["@property"] = { fg = "palette.ts_property" }, + ["@field"] = { fg = "palette.ts_property" }, + } + } + + nightfox.setup({ + options = { + style = "carbonfox", + terminal_colors = true, + dim_inactive = true, + styles = { comments = "italic", functions = "bold", keywords = "bold" }, + modules = { + neotree = true, + treesitter = true, + }, + }, + palettes = final_palettes, + specs = specs, + groups = groups + }) + + vim.cmd("colorscheme carbonfox") + + -- Lualine overrides + local lualine_theme = { + normal = { + a = { fg = matte_black_palette.bg0, bg = matte_black_palette.lualine_normal_bg, gui = "bold" }, + b = { fg = matte_black_palette.fg1, bg = matte_black_palette.lualine_inactive_bg }, + c = { fg = matte_black_palette.fg2, bg = matte_black_palette.lualine_inactive_bg }, + }, + insert = { + a = { fg = matte_black_palette.bg0, bg = matte_black_palette.lualine_insert_bg, gui = "bold" }, + b = { fg = matte_black_palette.fg1, bg = matte_black_palette.lualine_inactive_bg }, + c = { fg = matte_black_palette.fg2, bg = matte_black_palette.lualine_inactive_bg }, + }, + visual = { + a = { fg = matte_black_palette.bg0, bg = matte_black_palette.lualine_visual_bg, gui = "bold" }, + b = { fg = matte_black_palette.fg1, bg = matte_black_palette.lualine_inactive_bg }, + c = { fg = matte_black_palette.fg2, bg = matte_black_palette.lualine_inactive_bg }, + }, + command = { + a = { fg = matte_black_palette.bg0, bg = matte_black_palette.lualine_command_bg, gui = "bold" }, + b = { fg = matte_black_palette.fg1, bg = matte_black_palette.lualine_inactive_bg }, + c = { fg = matte_black_palette.fg2, bg = matte_black_palette.lualine_inactive_bg }, + }, + inactive = { + a = { fg = matte_black_palette.fg3, bg = matte_black_palette.lualine_inactive_bg }, + b = { fg = matte_black_palette.fg3, bg = matte_black_palette.lualine_inactive_bg }, + c = { fg = matte_black_palette.comment, bg = matte_black_palette.lualine_inactive_bg }, + }, + } + + require('lualine').setup({ + options = { + theme = lualine_theme, + }, + }) + + end, - end, - }) - vim.schedule(function() - vim.cmd("doautocmd ColorScheme") - end) - end, - }, } \ No newline at end of file From d435a650cc2275386e657974b187c5679cb0684f Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Mon, 14 Jul 2025 11:04:25 -0700 Subject: [PATCH 25/69] Catch the Typora save window as well --- default/hypr/windows.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/default/hypr/windows.conf b/default/hypr/windows.conf index 5dad14d..6f41b33 100644 --- a/default/hypr/windows.conf +++ b/default/hypr/windows.conf @@ -10,8 +10,8 @@ windowrule = size 800 600, class:^(org.pulseaudio.pavucontrol|blueberry.py|Impal windowrule = center, class:^(org.pulseaudio.pavucontrol|blueberry.py|Impala|org.gnome.NautilusPreviewer)$ # Float and center file pickers -windowrule = float, class:xdg-desktop-portal-gtk, title:^(Open.*Files?|Save.*Files?) -windowrule = center, class:xdg-desktop-portal-gtk, title:^(Open.*Files?|Save.*Files?) +windowrule = float, class:xdg-desktop-portal-gtk, title:^(Open.*Files?|Save.*Files?|Save) +windowrule = center, class:xdg-desktop-portal-gtk, title:^(Open.*Files?|Save.*Files?|Save) # Float Steam, fullscreen RetroArch windowrule = float, class:^(steam)$ From 44d2dc21ab57485789cbe6f4e26b53a92ab6b478 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Mon, 14 Jul 2025 13:50:21 -0700 Subject: [PATCH 26/69] Give a clue that you have to relaunch Hyprland for new envs to get picked up --- config/hypr/hyprland.conf | 1 + config/hypr/monitors.conf | 1 + 2 files changed, 2 insertions(+) diff --git a/config/hypr/hyprland.conf b/config/hypr/hyprland.conf index 37223da..c4bbfb5 100644 --- a/config/hypr/hyprland.conf +++ b/config/hypr/hyprland.conf @@ -44,6 +44,7 @@ bind = SUPER SHIFT, X, exec, $webapp="https://x.com/compose/post" # exec-once = dropbox-cli start # Extra env variables +# Note: You must relaunch Hyprland after changing envs (use Super+Esc, then Relaunch) # env = MY_GLOBAL_ENV,setting # Control your input devices diff --git a/config/hypr/monitors.conf b/config/hypr/monitors.conf index 8325e21..84db2ff 100644 --- a/config/hypr/monitors.conf +++ b/config/hypr/monitors.conf @@ -2,6 +2,7 @@ # Change to 1 if on a 1x display (then change last "auto" to 1 in monitor=) # Change to something like 1.75 for fractional scaling (can work well with 1.66667 monitor scaling) +# Note: You must relaunch Hyprland after changing any env like this (use Super+Esc, then Relaunch) env = GDK_SCALE,2 # Use single default monitor (see all monitors with: hyprctl monitors) From 691a881b6fa4ab9dec0e0983690352fe0cc0af43 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Mon, 14 Jul 2025 16:17:55 -0700 Subject: [PATCH 27/69] Ensure that the Chromium file picker window is also floated and centered --- default/hypr/windows.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/default/hypr/windows.conf b/default/hypr/windows.conf index 6f41b33..068b7c8 100644 --- a/default/hypr/windows.conf +++ b/default/hypr/windows.conf @@ -10,8 +10,8 @@ windowrule = size 800 600, class:^(org.pulseaudio.pavucontrol|blueberry.py|Impal windowrule = center, class:^(org.pulseaudio.pavucontrol|blueberry.py|Impala|org.gnome.NautilusPreviewer)$ # Float and center file pickers -windowrule = float, class:xdg-desktop-portal-gtk, title:^(Open.*Files?|Save.*Files?|Save) -windowrule = center, class:xdg-desktop-portal-gtk, title:^(Open.*Files?|Save.*Files?|Save) +windowrule = float, class:xdg-desktop-portal-gtk, title:^(Open.*Files?|Save.*Files?|All Files|Save) +windowrule = center, class:xdg-desktop-portal-gtk, title:^(Open.*Files?|Save.*Files?|All Files|Save) # Float Steam, fullscreen RetroArch windowrule = float, class:^(steam)$ From 9157a85da2b72ae52a0781da6dff8b2e91043621 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Mon, 14 Jul 2025 16:18:04 -0700 Subject: [PATCH 28/69] Add a default fontconfig --- config/fontconfig/fonts.conf | 51 ++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 config/fontconfig/fonts.conf diff --git a/config/fontconfig/fonts.conf b/config/fontconfig/fonts.conf new file mode 100644 index 0000000..93d28c4 --- /dev/null +++ b/config/fontconfig/fonts.conf @@ -0,0 +1,51 @@ + + + + + + sans-serif + + + Adwaita Sans + + + + + + serif + + + Adwaita Serif + + + + + + monospace + + + Caskaydia Mono Nerd Font + + + + + system-ui + + Adwaita Sans + + + + + -apple-system + + Adwaita Sans + + + + + BlinkMacSystemFont + + Adwaita Sans + + + From 5739fa741ca788ac4ebf9aa40fdd9cca2db1fe64 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Mon, 14 Jul 2025 16:20:54 -0700 Subject: [PATCH 29/69] Migration to create default fontconfig --- migrations/1752535084.sh | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 migrations/1752535084.sh diff --git a/migrations/1752535084.sh b/migrations/1752535084.sh new file mode 100644 index 0000000..5a3b3b3 --- /dev/null +++ b/migrations/1752535084.sh @@ -0,0 +1,7 @@ +echo "Set a default fontconfig" + +if [[ ! -f "$HOME/.config/fontconfig/fonts.conf" ]]; then + mkdir -p ~/.config/fontconfig + cp ~/.local/share/omarchy/config/fontconfig/fonts.conf ~/.config/fontconfig/ + fc-cache -fv +fi From 46010f8e15a9747bca670bbc49cae2f0168ceda9 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Mon, 14 Jul 2025 16:34:06 -0700 Subject: [PATCH 30/69] Correct monospace references --- config/fontconfig/fonts.conf | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/config/fontconfig/fonts.conf b/config/fontconfig/fonts.conf index 93d28c4..78447d5 100644 --- a/config/fontconfig/fonts.conf +++ b/config/fontconfig/fonts.conf @@ -24,7 +24,7 @@ monospace - Caskaydia Mono Nerd Font + CaskaydiaMono Nerd Font @@ -35,6 +35,13 @@ + + ui-monospace + + monospace + + + -apple-system From 244758fabbc3625d3165f6233a72e004f3a3c0cb Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Mon, 14 Jul 2025 16:44:51 -0700 Subject: [PATCH 31/69] Use Liberation instead of Adwaita as default --- config/fontconfig/fonts.conf | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/config/fontconfig/fonts.conf b/config/fontconfig/fonts.conf index 78447d5..85c37b9 100644 --- a/config/fontconfig/fonts.conf +++ b/config/fontconfig/fonts.conf @@ -6,7 +6,7 @@ sans-serif - Adwaita Sans + Liberation Sans @@ -15,7 +15,7 @@ serif - Adwaita Serif + Liberation Serif @@ -31,7 +31,7 @@ system-ui - Adwaita Sans + Liberation Sans @@ -45,14 +45,14 @@ -apple-system - Adwaita Sans + Liberation Sans BlinkMacSystemFont - Adwaita Sans + Liberation Sans From d4910dd85519b74a440c64f744c8e8699c40612c Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Mon, 14 Jul 2025 18:15:48 -0700 Subject: [PATCH 32/69] Use a custom, known good keyserver to prevent install errors stemming from an inaccessible keyserver --- install/1-yay.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/install/1-yay.sh b/install/1-yay.sh index 9913bfa..fbf841f 100644 --- a/install/1-yay.sh +++ b/install/1-yay.sh @@ -9,3 +9,9 @@ if ! command -v yay &>/dev/null; then rm -rf yay-bin cd ~ fi + +# FIXME: Temporary fix for the fact that some locations can't reach the default keyserver +if [[ ! -f "$HOME/.gnupg/gpg.conf" ]]; then + mkdir -p ~/.gnupg + echo "keyserver hkps://pgp.mit.edu" >~/.gnupg/dirmngr.conf +fi From 5672d04cb3565c53195c205f3660cc6560231b86 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Mon, 14 Jul 2025 18:22:28 -0700 Subject: [PATCH 33/69] Set proper permissions --- install/1-yay.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/install/1-yay.sh b/install/1-yay.sh index fbf841f..f0d1dc8 100644 --- a/install/1-yay.sh +++ b/install/1-yay.sh @@ -13,5 +13,8 @@ fi # FIXME: Temporary fix for the fact that some locations can't reach the default keyserver if [[ ! -f "$HOME/.gnupg/gpg.conf" ]]; then mkdir -p ~/.gnupg + chmod 700 ~/.gnupg + echo "keyserver hkps://pgp.mit.edu" >~/.gnupg/dirmngr.conf + chmod 600 ~/.gnupg/dirmngr.conf fi From 8758b5d4dcf56b1f837f9cc603f43ff91544009b Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Mon, 14 Jul 2025 18:37:02 -0700 Subject: [PATCH 34/69] Caused other problems --- install/1-yay.sh | 9 --------- 1 file changed, 9 deletions(-) diff --git a/install/1-yay.sh b/install/1-yay.sh index f0d1dc8..9913bfa 100644 --- a/install/1-yay.sh +++ b/install/1-yay.sh @@ -9,12 +9,3 @@ if ! command -v yay &>/dev/null; then rm -rf yay-bin cd ~ fi - -# FIXME: Temporary fix for the fact that some locations can't reach the default keyserver -if [[ ! -f "$HOME/.gnupg/gpg.conf" ]]; then - mkdir -p ~/.gnupg - chmod 700 ~/.gnupg - - echo "keyserver hkps://pgp.mit.edu" >~/.gnupg/dirmngr.conf - chmod 600 ~/.gnupg/dirmngr.conf -fi From 72e863f6bedab1b06a30f63bf94c46b441439dd7 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Mon, 14 Jul 2025 18:43:21 -0700 Subject: [PATCH 35/69] Split out the packages that need a keyserver and rescue any failure with an explanation --- install/xtras.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/install/xtras.sh b/install/xtras.sh index c4272e8..7f01d8b 100644 --- a/install/xtras.sh +++ b/install/xtras.sh @@ -1,10 +1,11 @@ if [ -z "$OMARCHY_BARE" ]; then yay -S --noconfirm --needed \ - gnome-calculator \ - signal-desktop spotify dropbox-cli zoom \ + gnome-calculator gnome-keyring signal-desktop \ obsidian-bin typora libreoffice obs-studio kdenlive \ - 1password-beta 1password-cli gnome-keyring \ pinta xournalpp localsend-bin + + yay -S --noconfirm --needed spotify dropbox-cli 1password-beta 1password-cli || + echo -e "\e[31mFailed to install Spotify, Dropbox, and/or 1password because of a keyserver problem. Continuing without!\e[0m" fi # Copy over Omarchy applications From ad6c1f0df165a55ad13eae739bf8ca57438f86c4 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Mon, 14 Jul 2025 20:38:09 -0700 Subject: [PATCH 36/69] Errant migration --- migrations/.sh | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 migrations/.sh diff --git a/migrations/.sh b/migrations/.sh deleted file mode 100644 index 5b464c3..0000000 --- a/migrations/.sh +++ /dev/null @@ -1,4 +0,0 @@ -echo "Fix XCompose use in Typora" -if command -v typora &>/dev/null; then - cp ~/.local/share/omarchy/applications/xtras/typora.desktop ~/.local/share/applications/ -fi From 1dd64a814a3b39ea39afcb771cf888eb6223afa1 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Mon, 14 Jul 2025 20:39:08 -0700 Subject: [PATCH 37/69] Add color and pacman animation to pacman installer Closes #174, #129 Co-authored-by: @rockorager --- install/1-yay.sh | 3 +++ migrations/1752543801.sh | 3 +++ 2 files changed, 6 insertions(+) create mode 100644 migrations/1752543801.sh diff --git a/install/1-yay.sh b/install/1-yay.sh index 9913bfa..4a13ecf 100644 --- a/install/1-yay.sh +++ b/install/1-yay.sh @@ -8,4 +8,7 @@ if ! command -v yay &>/dev/null; then cd - rm -rf yay-bin cd ~ + + # Add fun and color to the pacman installer + sed -i '/^\[options\]/a Color\nILoveCandy' /etc/pacman.conf fi diff --git a/migrations/1752543801.sh b/migrations/1752543801.sh new file mode 100644 index 0000000..d1e5bfd --- /dev/null +++ b/migrations/1752543801.sh @@ -0,0 +1,3 @@ +echo "Add color and animation to pacman installs" +grep -q '^Color' /etc/pacman.conf || sudo sed -i '/^\[options\]/a Color' /etc/pacman.conf +grep -q '^ILoveCandy' /etc/pacman.conf || sudo sed -i '/^\[options\]/a ILoveCandy' /etc/pacman.conf From 5501d94896d6360467c04205c73a457998997e10 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Mon, 14 Jul 2025 20:43:26 -0700 Subject: [PATCH 38/69] Not used --- config/wofi/omarchy-power-menu.css | 65 ------------------------------ 1 file changed, 65 deletions(-) delete mode 100644 config/wofi/omarchy-power-menu.css diff --git a/config/wofi/omarchy-power-menu.css b/config/wofi/omarchy-power-menu.css deleted file mode 100644 index e6c9790..0000000 --- a/config/wofi/omarchy-power-menu.css +++ /dev/null @@ -1,65 +0,0 @@ -@define-color selected-text #7dcfff; -@define-color text #cfc9c2; -@define-color base #1a1b26; - -* { - font-family: 'CaskaydiaMono Nerd Font', monospace; - font-size: 18px; -} - -window { - margin: 0px; - padding: 20px; - background-color: @base; - opacity: 0.95; -} - -#inner-box { - margin: 0; - padding: 0; - border: none; - background-color: @base; -} - -#outer-box { - margin: 0; - padding: 20px; - border: none; - background-color: @base; -} - -#scroll { - margin: 0; - padding: 0; - border: none; - background-color: @base; -} - -#input { - display: none; - opacity: 0; - margin-top: -200px; -} - -#text { - margin: 5px; - border: none; - color: @text; -} - -#entry { - background-color: @base; -} - -#entry:selected { - outline: none; - border: none; -} - -#entry:selected #text { - color: @selected-text; -} - -#entry image { - -gtk-icon-transform: scale(0.7); -} \ No newline at end of file From 5a48f120eccad667239269b267d7d6dbc47f06f3 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Mon, 14 Jul 2025 20:53:04 -0700 Subject: [PATCH 39/69] Make wofi stylesheet user editable Closes #167 Co-authored-by: @cannikin --- config/wofi/style.css | 73 ++++++++++++++++++++++++++++++++++++++++ default/wofi/search.css | 1 + install/theme.sh | 1 - migrations/1752551006.sh | 5 +++ 4 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 config/wofi/style.css create mode 100644 migrations/1752551006.sh diff --git a/config/wofi/style.css b/config/wofi/style.css new file mode 100644 index 0000000..97b3775 --- /dev/null +++ b/config/wofi/style.css @@ -0,0 +1,73 @@ +/* Colors are defined by theme files and can be referenced via @base, @text, @selected-text, and @border */ + +* { + font-family: 'CaskaydiaMono Nerd Font', monospace; + font-size: 18px; +} + +window { + margin: 0px; + padding: 20px; + background-color: @base; + opacity: 0.95; +} + +#inner-box { + margin: 0; + padding: 0; + border: none; + background-color: @base; +} + +#outer-box { + margin: 0; + padding: 20px; + border: none; + background-color: @base; + border: 2px solid @border; +} + +#scroll { + margin: 0; + padding: 0; + border: none; + background-color: @base; +} + +#input { + margin: 0; + padding: 10px; + border: none; + background-color: @base; + color: @text; +} + +#input:focus { + outline: none; + box-shadow: none; + border: none; +} + +#text { + margin: 5px; + border: none; + color: @text; +} + +#entry { + background-color: @base; +} + +#entry:selected { + outline: none; + border: none; +} + +#entry:selected #text { + color: @selected-text; +} + +#entry image { + -gtk-icon-transform: scale(0.7); +} + diff --git a/default/wofi/search.css b/default/wofi/search.css index 318c916..c6db56e 100644 --- a/default/wofi/search.css +++ b/default/wofi/search.css @@ -1,4 +1,5 @@ @import ".config/omarchy/current/theme/wofi.css"; +@import ".config/wofi/style.css"; * { font-family: 'CaskaydiaMono Nerd Font', monospace; diff --git a/install/theme.sh b/install/theme.sh index 989ad5c..65184bc 100644 --- a/install/theme.sh +++ b/install/theme.sh @@ -18,7 +18,6 @@ ln -snf ~/.config/omarchy/backgrounds/tokyo-night ~/.config/omarchy/current/back ln -snf ~/.config/omarchy/current/backgrounds/1-Pawel-Czerwinski-Abstract-Purple-Blue.jpg ~/.config/omarchy/current/background # Set specific app links for current theme -ln -snf ~/.config/omarchy/current/theme/wofi.css ~/.config/wofi/style.css ln -snf ~/.config/omarchy/current/theme/neovim.lua ~/.config/nvim/lua/plugins/theme.lua mkdir -p ~/.config/btop/themes ln -snf ~/.config/omarchy/current/theme/btop.theme ~/.config/btop/themes/current.theme diff --git a/migrations/1752551006.sh b/migrations/1752551006.sh new file mode 100644 index 0000000..b573001 --- /dev/null +++ b/migrations/1752551006.sh @@ -0,0 +1,5 @@ +echo "Make wofi stylesheet user editable" +if [[ -L "$HOME/.config/wofi/style.css" ]]; then + rm "$HOME/.config/wofi/style.css" + cp ~/.local/share/omarchy/config/wofi/style.css ~/.config/wofi/ +fi From 46e8fa46ed9649fe387e627cd14d154d14f0d1ae Mon Sep 17 00:00:00 2001 From: Naparajith T L Date: Tue, 15 Jul 2025 09:26:54 +0530 Subject: [PATCH 40/69] Extensible, evenly spaced waybar styling (#156) * Add override to only require one network interface online * refactor: extensible, evenly spaced waybar style.css - Use @define-color directive to define colour variables for each theme (@foreground for text, @background for background-color) - apply the colour variables in the main theme config, making it more extensible - make waybar elements more evenly spaced with consistent margin and padding values - add migration to apply the above changes to existing users * Update style.css better pixel spacing --------- Co-authored-by: Ryan Hughes <1630358+ryanrhughes@users.noreply.github.com> Co-authored-by: David Heinemeier Hansson --- config/waybar/style.css | 17 ++++++++++++----- install/network.sh | 10 ++++++++++ migrations/1752251002.sh | 5 +++++ migrations/1752365998.sh | 7 +++++++ themes/catppuccin/waybar.css | 7 ++----- themes/everforest/waybar.css | 7 ++----- themes/gruvbox/waybar.css | 7 ++----- themes/kanagawa/waybar.css | 7 ++----- themes/matte-black/waybar.css | 6 ++---- themes/nord/waybar.css | 7 ++----- themes/tokyo-night/waybar.css | 7 ++----- 11 files changed, 48 insertions(+), 39 deletions(-) create mode 100644 migrations/1752251002.sh create mode 100644 migrations/1752365998.sh diff --git a/config/waybar/style.css b/config/waybar/style.css index 0a5bc3b..1286bc2 100644 --- a/config/waybar/style.css +++ b/config/waybar/style.css @@ -1,4 +1,7 @@ * { + background-color: @background; + color: @foreground; + border: none; border-radius: 0; min-height: 0; @@ -6,14 +9,18 @@ font-size: 12px; } -#workspaces { - margin-left: 7px; +.modules-left { + margin-left: 8px; +} + +.modules-right { + margin-right: 8px; } #workspaces button { all: initial; - padding: 2px 6px; - margin-right: 3px; + padding: 0 6px; + margin: 0 1.5px; } #custom-dropbox, @@ -26,7 +33,7 @@ #clock, #custom-power-menu { min-width: 12px; - margin-right: 13px; + margin: 0 10px; } #custom-expand-icon { diff --git a/install/network.sh b/install/network.sh index 5f06ce8..66b6c63 100644 --- a/install/network.sh +++ b/install/network.sh @@ -4,3 +4,13 @@ if ! command -v iwd &>/dev/null; then yay -S --noconfirm --needed iwd sudo systemctl enable --now iwd.service fi + +# Fix systemd-networkd-wait-online timeout for multiple interfaces +# Wait for any interface to be online rather than all interfaces +# https://wiki.archlinux.org/title/Systemd-networkd#Multiple_interfaces_that_are_not_connected_all_the_time +sudo mkdir -p /etc/systemd/system/systemd-networkd-wait-online.service.d +sudo tee /etc/systemd/system/systemd-networkd-wait-online.service.d/wait-for-only-one-interface.conf >/dev/null </dev/null < Date: Mon, 14 Jul 2025 21:04:24 -0700 Subject: [PATCH 41/69] Tweaks --- config/waybar/style.css | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/config/waybar/style.css b/config/waybar/style.css index 1286bc2..108d8d3 100644 --- a/config/waybar/style.css +++ b/config/waybar/style.css @@ -1,3 +1,5 @@ +@import "../omarchy/current/theme/waybar.css"; + * { background-color: @background; color: @foreground; @@ -23,7 +25,6 @@ margin: 0 1.5px; } -#custom-dropbox, #tray, #cpu, #battery, @@ -33,7 +34,7 @@ #clock, #custom-power-menu { min-width: 12px; - margin: 0 10px; + margin: 0 7.5px; } #custom-expand-icon { @@ -43,9 +44,3 @@ tooltip { padding: 2px; } - -tooltip label { - padding: 2px; -} - -@import "../omarchy/current/theme/waybar.css"; From 3edc8bb470fff3e796245a6a9df436112ae8622a Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Mon, 14 Jul 2025 21:08:50 -0700 Subject: [PATCH 42/69] Add note about overwritting directly in here --- config/hypr/hyprland.conf | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/config/hypr/hyprland.conf b/config/hypr/hyprland.conf index c4bbfb5..df35a76 100644 --- a/config/hypr/hyprland.conf +++ b/config/hypr/hyprland.conf @@ -1,5 +1,9 @@ # Learn how to configure Hyprland: https://wiki.hyprland.org/Configuring/ +# You're encouraged to tailor your Hyprland config in this file by adding or overwriting any settings. +# But don't change anything that lives in ~/.local/share/omarchy, if you can help it! +# Those files are overwritten when Omarchy is updated. + # Change your personal monitor setup in here to keep the main config portable source = ~/.config/hypr/monitors.conf From 7aae9015a58cc12e74639de0fb032939128d746e Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Mon, 14 Jul 2025 21:10:43 -0700 Subject: [PATCH 43/69] Make known potentially flaky package not halt installation Ref #151 --- install/xtras.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/install/xtras.sh b/install/xtras.sh index 7f01d8b..afd9ada 100644 --- a/install/xtras.sh +++ b/install/xtras.sh @@ -1,9 +1,12 @@ if [ -z "$OMARCHY_BARE" ]; then yay -S --noconfirm --needed \ gnome-calculator gnome-keyring signal-desktop \ - obsidian-bin typora libreoffice obs-studio kdenlive \ + obsidian-bin libreoffice obs-studio kdenlive \ pinta xournalpp localsend-bin + yay -S typora || + echo -e "\e[31mFailed to install Typora. Continuing without!\e[0m" + yay -S --noconfirm --needed spotify dropbox-cli 1password-beta 1password-cli || echo -e "\e[31mFailed to install Spotify, Dropbox, and/or 1password because of a keyserver problem. Continuing without!\e[0m" fi From 45d6aac29c3381e63bfdba5bce2625a573e4fc04 Mon Sep 17 00:00:00 2001 From: Noah Penza <69229034+npenza@users.noreply.github.com> Date: Tue, 15 Jul 2025 14:17:04 +1000 Subject: [PATCH 44/69] Add Theme Menu Switcher (#154) * Add theme menu for quick theme switching * Bind theme menu * Fix current theme being selected * Replace omarchy-theme-next binding with theme menu * Add omarchy-theme-set and refactor theme menu script * Add solid black fallback if background image does not exist in current theme --- bin/omarchy-theme-menu | 55 ++++++++++++++++++++++++++++ bin/omarchy-theme-set | 47 ++++++++++++++++++++++++ default/hypr/bindings/utilities.conf | 2 +- 3 files changed, 103 insertions(+), 1 deletion(-) create mode 100755 bin/omarchy-theme-menu create mode 100755 bin/omarchy-theme-set diff --git a/bin/omarchy-theme-menu b/bin/omarchy-theme-menu new file mode 100755 index 0000000..34a3fd6 --- /dev/null +++ b/bin/omarchy-theme-menu @@ -0,0 +1,55 @@ +#!/bin/bash + +# Theme menu for Omarchy +# Provides an interactive dmenu to switch between available themes + +THEMES_DIR="$HOME/.config/omarchy/themes/" +CURRENT_THEME_DIR="$HOME/.config/omarchy/current/theme" + +# Show theme selection menu and apply changes +show_theme_menu() { + # Get current theme name + if [[ -e "$CURRENT_THEME_DIR" ]]; then + CURRENT_THEME_NAME=$(basename "$(realpath "$CURRENT_THEME_DIR")") + else + CURRENT_THEME_NAME="unknown" + fi + + # Build menu options from available themes + local themes=($(find "$THEMES_DIR" -mindepth 1 -maxdepth 1 -type d -printf "%f\n" | sort)) + + # Remove the current theme from the list before building the menu + local filtered_themes=() + for theme in "${themes[@]}"; do + if [[ "$theme" != "$CURRENT_THEME_NAME" ]]; then + filtered_themes+=("$theme") + fi + done + + # Add current theme to the top of menu + local wofi_input=$'\uf0a9 '"${CURRENT_THEME_NAME}" + for theme in "${filtered_themes[@]}"; do + wofi_input+="\n${theme}" + done + + # Display theme selection menu + local selection=$(echo -e "$wofi_input" | wofi \ + --show dmenu \ + --width 300 \ + --height 225 \ + --style ~/.local/share/omarchy/default/wofi/select.css) + + # Extract theme name from selection (remove glyph and leading spaces) + local selected_theme=$(echo "$selection" | sed 's/^\s*\uf0a9 \?//') + + # Exit if the selected theme is the current theme or empty + if [[ -z "$selected_theme" || "$selected_theme" == "$CURRENT_THEME_NAME" ]]; then + exit 0 + fi + + # Apply the new theme with omarchy-theme-set + "$HOME/.local/share/omarchy/bin/omarchy-theme-set" "$selected_theme" +} + +# Main execution +show_theme_menu \ No newline at end of file diff --git a/bin/omarchy-theme-set b/bin/omarchy-theme-set new file mode 100755 index 0000000..e800f5f --- /dev/null +++ b/bin/omarchy-theme-set @@ -0,0 +1,47 @@ +#!/bin/bash + +# omarchy-theme-set: Set a theme, specified by its name. +# Usage: omarchy-theme-set + +THEMES_DIR="$HOME/.config/omarchy/themes/" +CURRENT_THEME_DIR="$HOME/.config/omarchy/current/theme" + +if [[ -z "$1" ]]; then + echo "Usage: omarchy-theme-set " >&2 + exit 1 +fi + +THEME_NAME="$1" +THEME_PATH="$THEMES_DIR/$THEME_NAME" +BACKGROUND_PATH="$HOME/.config/omarchy/backgrounds/$THEME_NAME" + +# Check if the theme entered exists +if [[ ! -d "$THEME_PATH" ]]; then + echo "Theme '$THEME_NAME' does not exist in $THEMES_DIR" >&2 + exit 2 +fi + +# Update theme symlinks +ln -nsf "$BACKGROUND_PATH" "$HOME/.config/omarchy/current/backgrounds" +ln -nsf "$THEME_PATH" "$CURRENT_THEME_DIR" + +# Trigger alacritty config reload +touch "$HOME/.config/alacritty/alacritty.toml" + +# Restart components to apply new theme +pkill -SIGUSR2 waybar +makoctl reload +hyprctl reload + +# Set new background +first_bg=$(find "$HOME/.config/omarchy/current/backgrounds/" -type f | head -n 1) +if [[ -n "$first_bg" ]]; then + ln -nsf "$first_bg" "$HOME/.config/omarchy/current/background" + pkill -x swaybg + setsid swaybg -i "$HOME/.config/omarchy/current/background" -m fill & +else + # Background does not exist for this theme - fallback to solid black. + rm -f "$HOME/.config/omarchy/current/background" + pkill -x swaybg + setsid swaybg -c '#000000' & +fi \ No newline at end of file diff --git a/default/hypr/bindings/utilities.conf b/default/hypr/bindings/utilities.conf index 0e6b1b7..6448294 100644 --- a/default/hypr/bindings/utilities.conf +++ b/default/hypr/bindings/utilities.conf @@ -5,7 +5,7 @@ bind = SUPER, K, exec, ~/.local/share/omarchy/bin/omarchy-show-keybindings # Aesthetics bind = SUPER SHIFT, SPACE, exec, pkill -SIGUSR1 waybar bind = SUPER CTRL, SPACE, exec, ~/.local/share/omarchy/bin/swaybg-next -bind = SUPER SHIFT CTRL, SPACE, exec, ~/.local/share/omarchy/bin/omarchy-theme-next +bind = SUPER SHIFT CTRL, SPACE, exec, ~/.local/share/omarchy/bin/omarchy-theme-menu # Notifications bind = SUPER, comma, exec, makoctl dismiss From bfc8d733001a5c576260e362614ca50db0a73c71 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Mon, 14 Jul 2025 21:31:58 -0700 Subject: [PATCH 45/69] Tune this up and make it prettier --- bin/omarchy-theme-menu | 73 ++++++++++++++++-------------------------- 1 file changed, 28 insertions(+), 45 deletions(-) diff --git a/bin/omarchy-theme-menu b/bin/omarchy-theme-menu index 34a3fd6..b83be48 100755 --- a/bin/omarchy-theme-menu +++ b/bin/omarchy-theme-menu @@ -1,55 +1,38 @@ #!/bin/bash -# Theme menu for Omarchy -# Provides an interactive dmenu to switch between available themes - THEMES_DIR="$HOME/.config/omarchy/themes/" CURRENT_THEME_DIR="$HOME/.config/omarchy/current/theme" +CURRENT_THEME_NAME=$(basename "$(realpath "$CURRENT_THEME_DIR")") -# Show theme selection menu and apply changes -show_theme_menu() { - # Get current theme name - if [[ -e "$CURRENT_THEME_DIR" ]]; then - CURRENT_THEME_NAME=$(basename "$(realpath "$CURRENT_THEME_DIR")") - else - CURRENT_THEME_NAME="unknown" - fi - - # Build menu options from available themes - local themes=($(find "$THEMES_DIR" -mindepth 1 -maxdepth 1 -type d -printf "%f\n" | sort)) - - # Remove the current theme from the list before building the menu - local filtered_themes=() - for theme in "${themes[@]}"; do - if [[ "$theme" != "$CURRENT_THEME_NAME" ]]; then - filtered_themes+=("$theme") +# Build themes list with pretty display names +mapfile -t themes < <( + find "$THEMES_DIR" -mindepth 1 -maxdepth 1 -type f -o -type l | while read -r path; do + filename=$(basename "$path") + display_name=$(echo "$filename" | sed -E 's/(^|-)([a-z])/\1\u\2/g; s/-/ /g') + + if [[ "$filename" == "$CURRENT_THEME_NAME" ]]; then + echo "$display_name" + else + echo "$display_name" fi - done + done | sort +) - # Add current theme to the top of menu - local wofi_input=$'\uf0a9 '"${CURRENT_THEME_NAME}" - for theme in "${filtered_themes[@]}"; do - wofi_input+="\n${theme}" - done - - # Display theme selection menu - local selection=$(echo -e "$wofi_input" | wofi \ - --show dmenu \ - --width 300 \ - --height 225 \ - --style ~/.local/share/omarchy/default/wofi/select.css) - - # Extract theme name from selection (remove glyph and leading spaces) - local selected_theme=$(echo "$selection" | sed 's/^\s*\uf0a9 \?//') +# Show Wofi menu (with markup support) +selection=$(printf '%s\n' "${themes[@]}" | wofi \ + --show dmenu \ + --allow-markup \ + --width 150 \ + --height 300 \ + -O alphabetical \ + --style ~/.local/share/omarchy/default/wofi/select.css) - # Exit if the selected theme is the current theme or empty - if [[ -z "$selected_theme" || "$selected_theme" == "$CURRENT_THEME_NAME" ]]; then - exit 0 - fi +# Remove any Pango markup before converting back to filename +clean_selection=$(echo "$selection" | sed -E 's/<[^>]+>//g') - # Apply the new theme with omarchy-theme-set - "$HOME/.local/share/omarchy/bin/omarchy-theme-set" "$selected_theme" -} +# Convert to lowercase and dash-separated: "Tokyo Night" -> "tokyo-night" +selected_theme=$(echo "$clean_selection" | tr '[:upper:]' '[:lower:]' | tr ' ' '-') + +# Apply the selected theme +"$HOME/.local/share/omarchy/bin/omarchy-theme-set" "$selected_theme" -# Main execution -show_theme_menu \ No newline at end of file From b3338c84b6cc5624cde7827d38f7dda641cc79b0 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Mon, 14 Jul 2025 21:36:15 -0700 Subject: [PATCH 46/69] Reuse the new omarchy-theme-set in omarchy-theme-next --- bin/omarchy-theme-next | 19 +------------------ bin/omarchy-theme-set | 14 +++++--------- 2 files changed, 6 insertions(+), 27 deletions(-) diff --git a/bin/omarchy-theme-next b/bin/omarchy-theme-next index 8899526..eb97d90 100755 --- a/bin/omarchy-theme-next +++ b/bin/omarchy-theme-next @@ -30,22 +30,5 @@ NEXT_INDEX=$(((INDEX + 1) % TOTAL)) NEW_THEME=${THEMES[$NEXT_INDEX]} NEW_THEME_NAME=$(basename "$NEW_THEME") -# Set current theme -ln -nsf "$HOME/.config/omarchy/backgrounds/$NEW_THEME_NAME" "$HOME/.config/omarchy/current/backgrounds" -ln -nsf "$NEW_THEME" "$HOME/.config/omarchy/current/theme" - -# Touch alacritty config to pickup the changed theme -touch "$HOME/.config/alacritty/alacritty.toml" - -# Restart for new theme -pkill -SIGUSR2 waybar -makoctl reload -hyprctl reload - -# Set new background -ln -nsf $(find "$HOME/.config/omarchy/current/backgrounds/" -type f | head -n 1) "$HOME/.config/omarchy/current/background" -pkill -x swaybg -setsid swaybg -i "$HOME/.config/omarchy/current/background" -m fill & - -# Notify of the new theme +omarchy-theme-set $NEW_THEME_NAME notify-send "Theme changed to $NEW_THEME_NAME" -t 2000 diff --git a/bin/omarchy-theme-set b/bin/omarchy-theme-set index e800f5f..4b741a2 100755 --- a/bin/omarchy-theme-set +++ b/bin/omarchy-theme-set @@ -3,14 +3,14 @@ # omarchy-theme-set: Set a theme, specified by its name. # Usage: omarchy-theme-set -THEMES_DIR="$HOME/.config/omarchy/themes/" -CURRENT_THEME_DIR="$HOME/.config/omarchy/current/theme" - if [[ -z "$1" ]]; then echo "Usage: omarchy-theme-set " >&2 exit 1 fi +THEMES_DIR="$HOME/.config/omarchy/themes/" +CURRENT_THEME_DIR="$HOME/.config/omarchy/current/theme" + THEME_NAME="$1" THEME_PATH="$THEMES_DIR/$THEME_NAME" BACKGROUND_PATH="$HOME/.config/omarchy/backgrounds/$THEME_NAME" @@ -39,9 +39,5 @@ if [[ -n "$first_bg" ]]; then ln -nsf "$first_bg" "$HOME/.config/omarchy/current/background" pkill -x swaybg setsid swaybg -i "$HOME/.config/omarchy/current/background" -m fill & -else - # Background does not exist for this theme - fallback to solid black. - rm -f "$HOME/.config/omarchy/current/background" - pkill -x swaybg - setsid swaybg -c '#000000' & -fi \ No newline at end of file +fi + From ba69caaa6d6ea02c7f5fbc850d391348cef90fc4 Mon Sep 17 00:00:00 2001 From: Noah Penza <69229034+npenza@users.noreply.github.com> Date: Tue, 15 Jul 2025 14:39:07 +1000 Subject: [PATCH 47/69] Omarchy Theme Installer (#150) * Add omarchy theme remove * Add theme installer * Add migration to make theme management scripts executable * Refactor theme installation script to simplify directory structure and remove unnecessary symlinks. The script now directly clones themes into the ~/.config/omarchy/themes directory and updates paths accordingly for backgrounds and fonts. * Update permissions for theme scripts and remove unnecessary migration file * Refactor theme installation script to always use swaybg-next * Remove fonts from omarchy-theme-install * Refactor omarchy-theme-remove by swiitching to theme dir and removing unnecessary symlink checks * Refactor theme installer to use omarchy-theme-set * Fix Omarchy theme remove removing current theme and throwing error * Making theme management scripts quiet --- bin/omarchy-theme-install | 46 +++++++++++++++++++++++++++++++++ bin/omarchy-theme-remove | 53 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 99 insertions(+) create mode 100755 bin/omarchy-theme-install create mode 100755 bin/omarchy-theme-remove diff --git a/bin/omarchy-theme-install b/bin/omarchy-theme-install new file mode 100755 index 0000000..cd84ffc --- /dev/null +++ b/bin/omarchy-theme-install @@ -0,0 +1,46 @@ +#!/bin/bash + +# omarchy-theme-install: Install a new theme from a git repo for Omarchy +# Usage: omarchy-theme-install + +REPO_URL="$1" +THEMES_DIR="$HOME/.config/omarchy/themes" +THEME_NAME=$(basename "$REPO_URL" .git) +THEME_PATH="$THEMES_DIR/$THEME_NAME" +BACKGROUND_DIR="$HOME/.config/omarchy/backgrounds" +CURRENT_DIR="$HOME/.config/omarchy/current" + +set -e + +if [ -z "$1" ]; then + echo "Usage: omarchy-theme-install " + exit 1 +fi + +# Ensure theme directories exist +mkdir -p "$THEMES_DIR" "$BACKGROUND_DIR" "$CURRENT_DIR" + +# Remove existing theme if present +if [ -d "$THEME_PATH" ]; then + rm -rf "$THEME_PATH" +fi + +# Clone the repo directly to ~/.config/omarchy/themes +if ! git clone "$REPO_URL" "$THEME_PATH"; then + echo "Error: Failed to clone theme repo." + exit 1 +fi + +# Copy backgrounds if present +if [ -d "$THEME_PATH/backgrounds" ]; then + DEST_BG="$BACKGROUND_DIR/$THEME_NAME" + rm -rf "$DEST_BG" + mkdir -p "$DEST_BG" + cp -r "$THEME_PATH/backgrounds/." "$DEST_BG/" +fi + +# Apply the new theme with omarchy-theme-set +"$HOME/.local/share/omarchy/bin/omarchy-theme-set" "$THEME_NAME" + +# Notify of the new theme +notify-send "Theme changed to $THEME_NAME" -t 2000 \ No newline at end of file diff --git a/bin/omarchy-theme-remove b/bin/omarchy-theme-remove new file mode 100755 index 0000000..e910746 --- /dev/null +++ b/bin/omarchy-theme-remove @@ -0,0 +1,53 @@ +#!/bin/bash + +# omarchy-theme-remove: Remove a theme from Omarchy by name +# Usage: omarchy-theme-remove + +THEME_NAME="$1" +THEMES_DIR="$HOME/.config/omarchy/themes" +BACKGROUND_DIR="$HOME/.config/omarchy/backgrounds" +CURRENT_DIR="$HOME/.config/omarchy/current" + +THEME_PATH="$THEMES_DIR/$THEME_NAME" +BACKGROUND_PATH="$BACKGROUND_DIR/$THEME_NAME" + +set -e + +if [ -z "$1" ]; then + echo "Usage: omarchy-theme-remove " + exit 1 +fi + +# Count available themes (directories in ~/.config/omarchy/themes) +THEMES=($(find "$THEMES_DIR" -mindepth 1 -maxdepth 1 -type d | sort)) +if [ ${#THEMES[@]} -le 1 ]; then + echo "Error: Cannot remove the last remaining theme. At least one theme must be installed." + exit 1 +fi + +# Check if theme exists before attempting removal +if [ ! -d "$THEME_PATH" ]; then + echo "Error: Theme '$THEME_NAME' not found." + exit 1 +fi + +# Check if the theme to be removed is the current theme +IS_CURRENT=0 +# Use readlink -f to resolve symlinks and get the absolute path +if [ "$(readlink -f "$CURRENT_DIR/theme")" = "$(readlink -f "$THEME_PATH")" ]; then + IS_CURRENT=1 +fi + +# If it is, switch to the next theme before removing +if [ $IS_CURRENT -eq 1 ]; then + "$HOME/.local/share/omarchy/bin/omarchy-theme-next" +fi + +# Now remove the theme directory and backgrounds for THEME_NAME +rm -rf "$THEME_PATH" + +if [ -d "$BACKGROUND_PATH" ]; then + rm -rf "$BACKGROUND_PATH" +fi + +notify-send "Theme '$THEME_NAME' removed." -t 2000 \ No newline at end of file From e674744714b4989504b09d972aa61808045d1bb8 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Mon, 14 Jul 2025 21:47:46 -0700 Subject: [PATCH 48/69] Fix symlink or directory detection --- bin/omarchy-theme-menu | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/omarchy-theme-menu b/bin/omarchy-theme-menu index b83be48..433c954 100755 --- a/bin/omarchy-theme-menu +++ b/bin/omarchy-theme-menu @@ -6,7 +6,7 @@ CURRENT_THEME_NAME=$(basename "$(realpath "$CURRENT_THEME_DIR")") # Build themes list with pretty display names mapfile -t themes < <( - find "$THEMES_DIR" -mindepth 1 -maxdepth 1 -type f -o -type l | while read -r path; do + find "$THEMES_DIR" -mindepth 1 -maxdepth 1 \( -type d -o -type l \) | while read -r path; do filename=$(basename "$path") display_name=$(echo "$filename" | sed -E 's/(^|-)([a-z])/\1\u\2/g; s/-/ /g') From b0d4c2dae4a78856b57d18e199c47868750d188d Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Mon, 14 Jul 2025 22:35:10 -0700 Subject: [PATCH 49/69] Fixup and tuneup --- bin/omarchy-theme-install | 32 ++++++++++++-------------------- bin/omarchy-theme-remove | 32 ++++++-------------------------- 2 files changed, 18 insertions(+), 46 deletions(-) diff --git a/bin/omarchy-theme-install b/bin/omarchy-theme-install index cd84ffc..f7d3008 100755 --- a/bin/omarchy-theme-install +++ b/bin/omarchy-theme-install @@ -1,24 +1,20 @@ #!/bin/bash -# omarchy-theme-install: Install a new theme from a git repo for Omarchy +# omarchy-theme-install: Install a new theme from a git repo for Omarchy # Usage: omarchy-theme-install -REPO_URL="$1" -THEMES_DIR="$HOME/.config/omarchy/themes" -THEME_NAME=$(basename "$REPO_URL" .git) -THEME_PATH="$THEMES_DIR/$THEME_NAME" -BACKGROUND_DIR="$HOME/.config/omarchy/backgrounds" -CURRENT_DIR="$HOME/.config/omarchy/current" - -set -e - if [ -z "$1" ]; then echo "Usage: omarchy-theme-install " exit 1 fi -# Ensure theme directories exist -mkdir -p "$THEMES_DIR" "$BACKGROUND_DIR" "$CURRENT_DIR" +REPO_URL="$1" +THEMES_DIR="$HOME/.config/omarchy/themes" +THEME_NAME=$(basename "$REPO_URL" .git) +THEME_PATH="$THEMES_DIR/$THEME_NAME" +THEME_BACKGROUND_PATH="$THEME_PATH/backgrounds" +BACKGROUNDS_PATH="$HOME/.config/omarchy/backgrounds" +BACKGROUNDS_THEME_PATH="$BACKGROUNDS_PATH/$THEME_NAME" # Remove existing theme if present if [ -d "$THEME_PATH" ]; then @@ -32,15 +28,11 @@ if ! git clone "$REPO_URL" "$THEME_PATH"; then fi # Copy backgrounds if present -if [ -d "$THEME_PATH/backgrounds" ]; then - DEST_BG="$BACKGROUND_DIR/$THEME_NAME" - rm -rf "$DEST_BG" - mkdir -p "$DEST_BG" - cp -r "$THEME_PATH/backgrounds/." "$DEST_BG/" +if [ -d $THEME_BACKGROUND_PATH ]; then + mkdir -p $BACKGROUNDS_THEME_PATH + cp $THEME_BACKGROUND_PATH/* $BACKGROUNDS_THEME_PATH/ fi # Apply the new theme with omarchy-theme-set -"$HOME/.local/share/omarchy/bin/omarchy-theme-set" "$THEME_NAME" +omarchy-theme-set $THEME_NAME -# Notify of the new theme -notify-send "Theme changed to $THEME_NAME" -t 2000 \ No newline at end of file diff --git a/bin/omarchy-theme-remove b/bin/omarchy-theme-remove index e910746..b1fe7a2 100755 --- a/bin/omarchy-theme-remove +++ b/bin/omarchy-theme-remove @@ -3,6 +3,11 @@ # omarchy-theme-remove: Remove a theme from Omarchy by name # Usage: omarchy-theme-remove +if [ -z "$1" ]; then + echo "Usage: omarchy-theme-remove " + exit 1 +fi + THEME_NAME="$1" THEMES_DIR="$HOME/.config/omarchy/themes" BACKGROUND_DIR="$HOME/.config/omarchy/backgrounds" @@ -11,43 +16,18 @@ CURRENT_DIR="$HOME/.config/omarchy/current" THEME_PATH="$THEMES_DIR/$THEME_NAME" BACKGROUND_PATH="$BACKGROUND_DIR/$THEME_NAME" -set -e - -if [ -z "$1" ]; then - echo "Usage: omarchy-theme-remove " - exit 1 -fi - -# Count available themes (directories in ~/.config/omarchy/themes) -THEMES=($(find "$THEMES_DIR" -mindepth 1 -maxdepth 1 -type d | sort)) -if [ ${#THEMES[@]} -le 1 ]; then - echo "Error: Cannot remove the last remaining theme. At least one theme must be installed." - exit 1 -fi - # Check if theme exists before attempting removal if [ ! -d "$THEME_PATH" ]; then echo "Error: Theme '$THEME_NAME' not found." exit 1 fi -# Check if the theme to be removed is the current theme -IS_CURRENT=0 # Use readlink -f to resolve symlinks and get the absolute path if [ "$(readlink -f "$CURRENT_DIR/theme")" = "$(readlink -f "$THEME_PATH")" ]; then - IS_CURRENT=1 -fi - -# If it is, switch to the next theme before removing -if [ $IS_CURRENT -eq 1 ]; then "$HOME/.local/share/omarchy/bin/omarchy-theme-next" fi # Now remove the theme directory and backgrounds for THEME_NAME rm -rf "$THEME_PATH" +rm -rf "$BACKGROUND_PATH" -if [ -d "$BACKGROUND_PATH" ]; then - rm -rf "$BACKGROUND_PATH" -fi - -notify-send "Theme '$THEME_NAME' removed." -t 2000 \ No newline at end of file From e5e981507fd85b8790cd478c38d01d9f7fd21c47 Mon Sep 17 00:00:00 2001 From: Alan Bradburne Date: Wed, 16 Jul 2025 09:00:11 +0900 Subject: [PATCH 50/69] Additional keyservers (#180) * Adds additional keyservers and faster timeout * forgot to restart the dirmngr! * remove openpgp since doesn't work for spotify, dropbox etc --- default/gpg/dirmngr.conf | 7 +++++++ install/4-config.sh | 7 +++++++ migrations/1752535341.sh | 6 ++++++ 3 files changed, 20 insertions(+) create mode 100644 default/gpg/dirmngr.conf create mode 100644 migrations/1752535341.sh diff --git a/default/gpg/dirmngr.conf b/default/gpg/dirmngr.conf new file mode 100644 index 0000000..8d32790 --- /dev/null +++ b/default/gpg/dirmngr.conf @@ -0,0 +1,7 @@ +keyserver hkps://keyserver.ubuntu.com +keyserver hkps://pgp.surfnet.nl +keyserver hkps://keys.mailvelope.com +keyserver hkps://keyring.debian.org +keyserver hkps://pgp.mit.edu + +connect-quick-timeout 4 diff --git a/install/4-config.sh b/install/4-config.sh index 69adf77..bfa6fa4 100644 --- a/install/4-config.sh +++ b/install/4-config.sh @@ -4,6 +4,13 @@ cp -R ~/.local/share/omarchy/config/* ~/.config/ # Ensure application directory exists for update-desktop-database mkdir -p ~/.local/share/applications +# Setup GPG configuration with multiple keyservers for better reliability +sudo mkdir -p /etc/gnupg +sudo cp ~/.local/share/omarchy/default/gpg/dirmngr.conf /etc/gnupg/ +sudo chmod 644 /etc/gnupg/dirmngr.conf +sudo gpgconf --kill dirmngr || true +sudo gpgconf --launch dirmngr || true + # Use default bashrc from Omarchy echo "source ~/.local/share/omarchy/default/bash/rc" >~/.bashrc diff --git a/migrations/1752535341.sh b/migrations/1752535341.sh new file mode 100644 index 0000000..9bf14fe --- /dev/null +++ b/migrations/1752535341.sh @@ -0,0 +1,6 @@ +echo "Setting up GPG configuration with multiple keyservers for better reliability" +sudo mkdir -p /etc/gnupg +sudo cp ~/.local/share/omarchy/default/gpg/dirmngr.conf /etc/gnupg/ +sudo chmod 644 /etc/gnupg/dirmngr.conf +sudo gpgconf --kill dirmngr || true +sudo gpgconf --launch dirmngr || true From 5daa30a6291a0c72121c1a743d6f86fc87d65378 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Tue, 15 Jul 2025 17:17:11 -0700 Subject: [PATCH 51/69] Fix compatibility with Framework 16 sensor Closes #181 Co-authored-by: @anagrius --- bin/omarchy-fingerprint-setup | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/omarchy-fingerprint-setup b/bin/omarchy-fingerprint-setup index f0bd9dd..18545eb 100755 --- a/bin/omarchy-fingerprint-setup +++ b/bin/omarchy-fingerprint-setup @@ -2,7 +2,7 @@ yay -S --noconfirm --needed fprintd usbutils -if ! lsusb | grep -Eiq 'fingerprint|synaptics'; then +if ! lsusb | grep -Eiq 'fingerprint|synaptics|goodix'; then echo -e "\e[31m\nNo fingerprint sensor detected.\e[0m" else # Add fingerprint authentication as an option for sudo From f114e5c4414f3796236ed17b1c6ee7c4869123ab Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Tue, 15 Jul 2025 17:24:06 -0700 Subject: [PATCH 52/69] Hide this too --- applications/hidden/uuctl.desktop | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 applications/hidden/uuctl.desktop diff --git a/applications/hidden/uuctl.desktop b/applications/hidden/uuctl.desktop new file mode 100644 index 0000000..e1e3e17 --- /dev/null +++ b/applications/hidden/uuctl.desktop @@ -0,0 +1,2 @@ +[Desktop Entry] +Hidden=true From a649779d81cefbeb9b223d9fcc7990965d373982 Mon Sep 17 00:00:00 2001 From: Andrej Benz Date: Wed, 16 Jul 2025 02:24:30 +0200 Subject: [PATCH 53/69] envvars: remove xdg-data-dir env for wofi, it's not needed (#184) --- default/hypr/envs.conf | 3 --- 1 file changed, 3 deletions(-) diff --git a/default/hypr/envs.conf b/default/hypr/envs.conf index 34343d8..ddfc8f5 100644 --- a/default/hypr/envs.conf +++ b/default/hypr/envs.conf @@ -15,9 +15,6 @@ xwayland { force_zero_scaling = true } -# Make .desktop files available for wofi -env = XDG_DATA_DIRS,/usr/share:/usr/local/share:~/.local/share - # Use XCompose file env = XCOMPOSEFILE,~/.XCompose From 11406ecc799018fb81c05de9f1a053cb5c5d4b47 Mon Sep 17 00:00:00 2001 From: Noah Penza <69229034+npenza@users.noreply.github.com> Date: Wed, 16 Jul 2025 10:29:00 +1000 Subject: [PATCH 54/69] Add Centralized omarchy CLI with Version Flag and Help Menu (#116) * Add main CLI interface for Omarchy Introduces the omarchy script, providing a command-line interface with options for current version, update, and waybar configuration refresh. Includes help documentation. * Add really cool Omarchy ASCII art to help menu in cli * Refactor Omarchy CLI to include a TUI menu with system, theme, and tools options. * Add .desktop for Omarchy TUI * Make omarchy script executable * Refactor omarchy cli and add new theme tools * Add help menu --- applications/omarchy.desktop | 10 ++ bin/omarchy | 199 +++++++++++++++++++++++++++++++++++ 2 files changed, 209 insertions(+) create mode 100644 applications/omarchy.desktop create mode 100755 bin/omarchy diff --git a/applications/omarchy.desktop b/applications/omarchy.desktop new file mode 100644 index 0000000..0447829 --- /dev/null +++ b/applications/omarchy.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Version=1.0 +Type=Application +Name=Omarchy +Comment=Omarchy TUI +Exec=alacritty --class=Omarchy --title=Omarchy -e bash -c '$HOME/.local/share/omarchy/bin/omarchy' +Icon=Arch +Terminal=false +Categories=System;Utility; +StartupNotify=false \ No newline at end of file diff --git a/bin/omarchy b/bin/omarchy new file mode 100755 index 0000000..b400889 --- /dev/null +++ b/bin/omarchy @@ -0,0 +1,199 @@ +#!/bin/bash + +# omarchy: Main TUI menu for Omarchy tools +# Usage: omarchy + +RED='\033[0;31m' +GREEN='\033[0;32m' +BLUE='\033[0;34m' +NC='\033[0m' +BIN_DIR="$(dirname "$0")" +OMARCHY_ASCII_SHOWN=0 + +show_ascii_art() { + cat <<'EOF' + ▄██████▄ ▄▄▄▄███▄▄▄▄ ▄████████ ▄████████ ▄████████ ▄█ █▄ ▄██ ▄ +███ ███ ▄██▀▀▀███▀▀▀██▄ ███ ███ ███ ███ ███ ███ ███ ███ ███ ██▄ +███ ███ ███ ███ ███ ███ ███ ███ ███ ███ █▀ ███ ███ ███▄▄▄███ +███ ███ ███ ███ ███ ███ ███ ▄███▄▄▄▄██▀ ███ ▄███▄▄▄▄███▄▄ ▀▀▀▀▀▀███ +███ ███ ███ ███ ███ ▀███████████ ▀▀███▀▀▀▀▀ ███ ▀▀███▀▀▀▀███▀ ▄██ ███ +███ ███ ███ ███ ███ ███ ███ ▀███████████ ███ █▄ ███ ███ ███ ███ +███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ + ▀██████▀ ▀█ ███ █▀ ███ █▀ ███ ███ ████████▀ ███ █▀ ▀█████▀ + ███ ███ +EOF +} + +show_help() { + cat < Install a theme from a git repo + theme-remove Remove a theme by name +EOF +} + +show_version() { + BLUE='\033[0;34m' + NC='\033[0m' + ( + cd ~/.local/share/omarchy 2>/dev/null + tag=$(git describe --tags --abbrev=0 2>/dev/null) + echo -e "${BLUE}Omarchy Version:${NC} $tag" + ) +} + +install_theme_prompt() { + local url + url=$(gum input --placeholder="Git repo URL for theme" --header="Enter theme git repo URL:") || theme_menu + if [[ -n "$url" ]]; then + "$BIN_DIR/omarchy-theme-install" "$url" + fi + theme_menu +} + +remove_theme_prompt() { + local theme + theme=$(gum input --placeholder="Theme name" --header="Enter the theme name to remove:") || theme_menu + if [[ -n "$theme" ]]; then + "$BIN_DIR/omarchy-theme-remove" "$theme" + fi + theme_menu +} + +# Menu functions +show_tui_menu() { + local columns choice + columns=$(tput cols 2>/dev/null || echo 80) + + if [[ $OMARCHY_ASCII_SHOWN -eq 0 ]]; then + if [[ $columns -ge 100 ]]; then + echo + show_ascii_art + else + echo "Omarchy" + fi + echo + OMARCHY_ASCII_SHOWN=1 + fi + + local main_menu=("System" "Theme" "Tools" "Exit") + choice=$(printf "%s\n" "${main_menu[@]}" | gum choose --header="Select a category:") || exit 0 + case "$choice" in + System) system_menu ;; + Theme) theme_menu ;; + Tools) tools_menu ;; + Exit) exit 0 ;; + esac +} + +system_menu() { + local menu=("Version" "Update" "Refresh Waybar" "Back") + local commands=( + "show_version" + "$BIN_DIR/omarchy-update" + "$BIN_DIR/omarchy-refresh-waybar" + "show_tui_menu" + ) + local choice + choice=$(printf "%s\n" "${menu[@]}" | gum choose --header="System:") || show_tui_menu + for i in "${!menu[@]}"; do + if [[ "${menu[$i]}" == "$choice" ]]; then + if [[ "$choice" == "Back" ]]; then + show_tui_menu + else + if [[ "${commands[$i]}" == "show_version" ]]; then + show_version + else + eval "${commands[$i]}" + fi + fi + break + fi + done +} + +theme_menu() { + local menu=("Switch Theme" "Install Theme" "Remove Theme" "Back") + local commands=( + "$BIN_DIR/omarchy-theme-menu" + "install_theme_prompt" + "remove_theme_prompt" + "show_tui_menu" + ) + local choice + choice=$(printf "%s\n" "${menu[@]}" | gum choose --header="Theme:") || show_tui_menu + for i in "${!menu[@]}"; do + if [[ "${menu[$i]}" == "$choice" ]]; then + if [[ "$choice" == "Back" ]]; then + show_tui_menu + else + eval "${commands[$i]}" + fi + break + fi + done +} + +tools_menu() { + local menu=("Setup Fingerprint" "Sync Applications" "Back") + local commands=( + "$BIN_DIR/omarchy-fingerprint-setup" + "$BIN_DIR/omarchy-sync-applications" + "show_tui_menu" + ) + local choice + choice=$(printf "%s\n" "${menu[@]}" | gum choose --header="Tools:") || show_tui_menu + for i in "${!menu[@]}"; do + if [[ "${menu[$i]}" == "$choice" ]]; then + if [[ "$choice" == "Back" ]]; then + show_tui_menu + else + eval "${commands[$i]}" + fi + break + fi + done +} + +if [[ $# -eq 0 ]]; then + show_tui_menu + exit 0 +fi + +case "$1" in + -v|--version|version) + show_version + ;; + -h|--help|help) + show_help + ;; + update) + echo -e "${BLUE}🔄 Updating Omarchy...${NC}" + "$BIN_DIR/omarchy-update" + ;; + refresh-waybar) + echo -e "${BLUE}🔄 Refreshing waybar...${NC}" + "$BIN_DIR/omarchy-refresh-waybar" + ;; + theme-install) + "$BIN_DIR/omarchy-theme-install" "${@:2}" + ;; + theme-remove) + "$BIN_DIR/omarchy-theme-remove" "${@:2}" + ;; + *) + echo -e "${RED}Unknown command: $1${NC}" + show_help + exit 1 + ;; +esac \ No newline at end of file From ecf42918fb0ff3a674ada83e53f468d6fa398f2d Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Tue, 15 Jul 2025 17:31:36 -0700 Subject: [PATCH 55/69] Have to sudo the change to pacman.conf --- install/1-yay.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/1-yay.sh b/install/1-yay.sh index 4a13ecf..4941958 100644 --- a/install/1-yay.sh +++ b/install/1-yay.sh @@ -10,5 +10,5 @@ if ! command -v yay &>/dev/null; then cd ~ # Add fun and color to the pacman installer - sed -i '/^\[options\]/a Color\nILoveCandy' /etc/pacman.conf + sudo sed -i '/^\[options\]/a Color\nILoveCandy' /etc/pacman.conf fi From b8d64f1737980b03f2444e34ce21c41d8417d252 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Tue, 15 Jul 2025 17:54:53 -0700 Subject: [PATCH 56/69] Copy over new Omarchy application desktop definition --- migrations/1752625896.sh | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 migrations/1752625896.sh diff --git a/migrations/1752625896.sh b/migrations/1752625896.sh new file mode 100644 index 0000000..fc219bb --- /dev/null +++ b/migrations/1752625896.sh @@ -0,0 +1,2 @@ +echo "Copy desktop file for new Omarchy TUI" +cp ~/.local/share/omarchy/applications/omarchy.desktop ~/.local/share/applications/ From 73d0197b3c4eeaeb6cc7b7ed1066097a29fe3ea6 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Tue, 15 Jul 2025 17:55:03 -0700 Subject: [PATCH 57/69] Treat Omarchy as a settings window --- default/hypr/windows.conf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/default/hypr/windows.conf b/default/hypr/windows.conf index 068b7c8..454d258 100644 --- a/default/hypr/windows.conf +++ b/default/hypr/windows.conf @@ -5,9 +5,9 @@ windowrule = suppressevent maximize, class:.* windowrule = tile, class:^(Chromium)$ # Float and center sound, bluetooth, and wifi settings, as well as nautilus previews -windowrule = float, class:^(org.pulseaudio.pavucontrol|blueberry.py|Impala|org.gnome.NautilusPreviewer)$ -windowrule = size 800 600, class:^(org.pulseaudio.pavucontrol|blueberry.py|Impala|org.gnome.NautilusPreviewer)$ -windowrule = center, class:^(org.pulseaudio.pavucontrol|blueberry.py|Impala|org.gnome.NautilusPreviewer)$ +windowrule = float, class:^(org.pulseaudio.pavucontrol|blueberry.py|Impala|org.gnome.NautilusPreviewer|Omarchy)$ +windowrule = size 800 600, class:^(org.pulseaudio.pavucontrol|blueberry.py|Impala|org.gnome.NautilusPreviewer|Omarchy)$ +windowrule = center, class:^(org.pulseaudio.pavucontrol|blueberry.py|Impala|org.gnome.NautilusPreviewer|Omarchy)$ # Float and center file pickers windowrule = float, class:xdg-desktop-portal-gtk, title:^(Open.*Files?|Save.*Files?|All Files|Save) From ab3904df9a3f357ff8120a41bacadf2c188920c4 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Tue, 15 Jul 2025 19:14:10 -0700 Subject: [PATCH 58/69] Quiet swaybg output --- bin/omarchy-theme-set | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/bin/omarchy-theme-set b/bin/omarchy-theme-set index 4b741a2..46a5c35 100755 --- a/bin/omarchy-theme-set +++ b/bin/omarchy-theme-set @@ -38,6 +38,5 @@ first_bg=$(find "$HOME/.config/omarchy/current/backgrounds/" -type f | head -n 1 if [[ -n "$first_bg" ]]; then ln -nsf "$first_bg" "$HOME/.config/omarchy/current/background" pkill -x swaybg - setsid swaybg -i "$HOME/.config/omarchy/current/background" -m fill & + setsid swaybg -i "$HOME/.config/omarchy/current/background" -m fill >/dev/null & fi - From c99f4c9c023df3d186aacfa70375ea0c1ab678fe Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Tue, 15 Jul 2025 19:14:23 -0700 Subject: [PATCH 59/69] Tweaks and refinements to the Omarchy TUI --- bin/omarchy | 200 ++++++++++++++++++---------------------------------- 1 file changed, 68 insertions(+), 132 deletions(-) diff --git a/bin/omarchy b/bin/omarchy index b400889..3dd7a4c 100755 --- a/bin/omarchy +++ b/bin/omarchy @@ -1,16 +1,9 @@ #!/bin/bash -# omarchy: Main TUI menu for Omarchy tools -# Usage: omarchy - -RED='\033[0;31m' -GREEN='\033[0;32m' -BLUE='\033[0;34m' -NC='\033[0m' -BIN_DIR="$(dirname "$0")" -OMARCHY_ASCII_SHOWN=0 +OMARCHY_VERSION=$(git -C ~/.local/share/omarchy describe --tags --abbrev=0 2>/dev/null) show_ascii_art() { + clear cat <<'EOF' ▄██████▄ ▄▄▄▄███▄▄▄▄ ▄████████ ▄████████ ▄████████ ▄█ █▄ ▄██ ▄ ███ ███ ▄██▀▀▀███▀▀▀██▄ ███ ███ ███ ███ ███ ███ ███ ███ ███ ██▄ @@ -22,100 +15,43 @@ show_ascii_art() { ▀██████▀ ▀█ ███ █▀ ███ █▀ ███ ███ ████████▀ ███ █▀ ▀█████▀ ███ ███ EOF + echo " $OMARCHY_VERSION" } -show_help() { - cat < Install a theme from a git repo - theme-remove Remove a theme by name -EOF -} - -show_version() { - BLUE='\033[0;34m' - NC='\033[0m' - ( - cd ~/.local/share/omarchy 2>/dev/null - tag=$(git describe --tags --abbrev=0 2>/dev/null) - echo -e "${BLUE}Omarchy Version:${NC} $tag" - ) -} - -install_theme_prompt() { - local url - url=$(gum input --placeholder="Git repo URL for theme" --header="Enter theme git repo URL:") || theme_menu - if [[ -n "$url" ]]; then - "$BIN_DIR/omarchy-theme-install" "$url" - fi - theme_menu -} - -remove_theme_prompt() { - local theme - theme=$(gum input --placeholder="Theme name" --header="Enter the theme name to remove:") || theme_menu - if [[ -n "$theme" ]]; then - "$BIN_DIR/omarchy-theme-remove" "$theme" - fi - theme_menu -} - -# Menu functions -show_tui_menu() { - local columns choice - columns=$(tput cols 2>/dev/null || echo 80) - - if [[ $OMARCHY_ASCII_SHOWN -eq 0 ]]; then - if [[ $columns -ge 100 ]]; then - echo - show_ascii_art - else - echo "Omarchy" - fi - echo - OMARCHY_ASCII_SHOWN=1 - fi - - local main_menu=("System" "Theme" "Tools" "Exit") - choice=$(printf "%s\n" "${main_menu[@]}" | gum choose --header="Select a category:") || exit 0 + local options=("Theme" "Setup" "Update" "Manual" "Exit") + choice=$(printf "%s\n" "${options[@]}" | gum choose --header "") || exit 0 case "$choice" in - System) system_menu ;; - Theme) theme_menu ;; - Tools) tools_menu ;; - Exit) exit 0 ;; + Theme) theme_menu ;; + Update) update_menu ;; + Setup) setup_menu ;; + Manual) open_manual ;; + Exit) clear && exit 0 ;; esac } -system_menu() { - local menu=("Version" "Update" "Refresh Waybar" "Back") +update_menu() { + show_ascii_art + local menu=("Omarchy" "Wofi Apps" "Waybar" "Plymouth" "Back") local commands=( - "show_version" - "$BIN_DIR/omarchy-update" - "$BIN_DIR/omarchy-refresh-waybar" - "show_tui_menu" + "omarchy-update" + "omarchy-sync-applications" + "omarchy-refresh-waybar" + "omarchy-refresh-plymouth" + "main_menu" ) local choice - choice=$(printf "%s\n" "${menu[@]}" | gum choose --header="System:") || show_tui_menu + choice=$(printf "%s\n" "${menu[@]}" | gum choose --header="Update") || main_menu for i in "${!menu[@]}"; do if [[ "${menu[$i]}" == "$choice" ]]; then if [[ "$choice" == "Back" ]]; then - show_tui_menu + main_menu else - if [[ "${commands[$i]}" == "show_version" ]]; then - show_version - else - eval "${commands[$i]}" - fi + eval "${commands[$i]}" + ack_command + main_menu fi break fi @@ -123,77 +59,77 @@ system_menu() { } theme_menu() { - local menu=("Switch Theme" "Install Theme" "Remove Theme" "Back") + show_ascii_art + local menu=("Install" "Remove" "Back") local commands=( - "$BIN_DIR/omarchy-theme-menu" "install_theme_prompt" "remove_theme_prompt" - "show_tui_menu" + "main_menu" ) local choice - choice=$(printf "%s\n" "${menu[@]}" | gum choose --header="Theme:") || show_tui_menu + choice=$(printf "%s\n" "${menu[@]}" | gum choose --header="Theme") || main_menu for i in "${!menu[@]}"; do if [[ "${menu[$i]}" == "$choice" ]]; then if [[ "$choice" == "Back" ]]; then - show_tui_menu + main_menu else eval "${commands[$i]}" + ack_command + main_menu fi break fi done } -tools_menu() { - local menu=("Setup Fingerprint" "Sync Applications" "Back") +install_theme_prompt() { + local url + url=$(gum input --placeholder="Git repo URL for theme" --header="") + if [[ -n "$url" ]]; then + omarchy-theme-install "$url" + fi + theme_menu +} + +remove_theme_prompt() { + local theme + theme=$(gum input --placeholder="Theme name" --header="") + if [[ -n "$theme" ]]; then + omarchy-theme-remove "$theme" + fi + theme_menu +} + +setup_menu() { + show_ascii_art + local menu=("Fingerprint sensor" "Back") local commands=( - "$BIN_DIR/omarchy-fingerprint-setup" - "$BIN_DIR/omarchy-sync-applications" - "show_tui_menu" + "omarchy-fingerprint-setup" + "main_menu" ) local choice - choice=$(printf "%s\n" "${menu[@]}" | gum choose --header="Tools:") || show_tui_menu + choice=$(printf "%s\n" "${menu[@]}" | gum choose --header="Setup") || main_menu for i in "${!menu[@]}"; do if [[ "${menu[$i]}" == "$choice" ]]; then if [[ "$choice" == "Back" ]]; then - show_tui_menu + main_menu else eval "${commands[$i]}" + ack_command + main_menu fi break fi done } -if [[ $# -eq 0 ]]; then - show_tui_menu - exit 0 -fi +open_manual() { + xdg-open "https://manuals.omamix.org/2/the-omarchy-manual" +} + +ack_command() { + gum spin --spinner "globe" --title "Done!" -- sleep 1 +} + +main_menu -case "$1" in - -v|--version|version) - show_version - ;; - -h|--help|help) - show_help - ;; - update) - echo -e "${BLUE}🔄 Updating Omarchy...${NC}" - "$BIN_DIR/omarchy-update" - ;; - refresh-waybar) - echo -e "${BLUE}🔄 Refreshing waybar...${NC}" - "$BIN_DIR/omarchy-refresh-waybar" - ;; - theme-install) - "$BIN_DIR/omarchy-theme-install" "${@:2}" - ;; - theme-remove) - "$BIN_DIR/omarchy-theme-remove" "${@:2}" - ;; - *) - echo -e "${RED}Unknown command: $1${NC}" - show_help - exit 1 - ;; -esac \ No newline at end of file From 6de7be7e181ab2e4c046d7627d9b4a1afa466406 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Tue, 15 Jul 2025 19:17:09 -0700 Subject: [PATCH 60/69] Set path for when its run as standalone app --- bin/omarchy | 1 + 1 file changed, 1 insertion(+) diff --git a/bin/omarchy b/bin/omarchy index 3dd7a4c..34fe88e 100755 --- a/bin/omarchy +++ b/bin/omarchy @@ -1,6 +1,7 @@ #!/bin/bash OMARCHY_VERSION=$(git -C ~/.local/share/omarchy describe --tags --abbrev=0 2>/dev/null) +PATH="$PATH:$HOME/.local/share/omarchy/bin" show_ascii_art() { clear From 49b191b2af16bdadcd6cde4eb04cee2d2163e78f Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Tue, 15 Jul 2025 19:17:32 -0700 Subject: [PATCH 61/69] Always lowercase --- bin/omarchy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/omarchy b/bin/omarchy index 34fe88e..24faeef 100755 --- a/bin/omarchy +++ b/bin/omarchy @@ -35,7 +35,7 @@ main_menu() { update_menu() { show_ascii_art - local menu=("Omarchy" "Wofi Apps" "Waybar" "Plymouth" "Back") + local menu=("Omarchy" "Wofi apps" "Waybar" "Plymouth" "Back") local commands=( "omarchy-update" "omarchy-sync-applications" From 2d1e6d0e6940d3b2d80c8bbac1aad9df5094f6e7 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Tue, 15 Jul 2025 19:22:27 -0700 Subject: [PATCH 62/69] Add way to refresh wofi settings --- bin/omarchy-refresh-wofi | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100755 bin/omarchy-refresh-wofi diff --git a/bin/omarchy-refresh-wofi b/bin/omarchy-refresh-wofi new file mode 100755 index 0000000..a4ec6c8 --- /dev/null +++ b/bin/omarchy-refresh-wofi @@ -0,0 +1,7 @@ +#!/bin/bash + +if gum confirm "Refresh Wofi config? This will replace your current Wofi settings with Omarchy defaults."; then + # Overwrite local waybar settings with the latest in Omarchy + cp -f ~/.local/share/omarchy/config/wofi/config ~/.config/wofi/ 2>/dev/null + cp -f ~/.local/share/omarchy/config/wofi/style.css ~/.config/wofi/ 2>/dev/null +fi From f9403977b82226f86c71a1e76c128bbc16ff6490 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Tue, 15 Jul 2025 19:22:40 -0700 Subject: [PATCH 63/69] Homogenize command naming --- bin/{omarchy-sync-applications => omarchy-refresh-applications} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename bin/{omarchy-sync-applications => omarchy-refresh-applications} (100%) diff --git a/bin/omarchy-sync-applications b/bin/omarchy-refresh-applications similarity index 100% rename from bin/omarchy-sync-applications rename to bin/omarchy-refresh-applications From c312cd8b063739f07b945807fe5d5c456901182e Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Tue, 15 Jul 2025 19:22:44 -0700 Subject: [PATCH 64/69] More updates --- bin/omarchy | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/bin/omarchy b/bin/omarchy index 24faeef..ccb8564 100755 --- a/bin/omarchy +++ b/bin/omarchy @@ -35,12 +35,13 @@ main_menu() { update_menu() { show_ascii_art - local menu=("Omarchy" "Wofi apps" "Waybar" "Plymouth" "Back") + local menu=("Omarchy" "Waybar" "Wofi" "Plymouth" "Desktop apps" "Back") local commands=( "omarchy-update" - "omarchy-sync-applications" "omarchy-refresh-waybar" + "omarchy-refresh-wofi" "omarchy-refresh-plymouth" + "omarchy-refresh-applications" "main_menu" ) local choice From 018603be6d0bf51208c808bcd908917b94d2a5de Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Tue, 15 Jul 2025 19:23:27 -0700 Subject: [PATCH 65/69] Make it clear this is just for development of omarchy --- bin/{omarchy-config-link => omarchy-dev-config-link} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename bin/{omarchy-config-link => omarchy-dev-config-link} (100%) diff --git a/bin/omarchy-config-link b/bin/omarchy-dev-config-link similarity index 100% rename from bin/omarchy-config-link rename to bin/omarchy-dev-config-link From d305935382d5dfc6dc3d534b575821c26a106734 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Tue, 15 Jul 2025 19:30:23 -0700 Subject: [PATCH 66/69] Put all omarchy commands under the omarchy- prefix --- ...isplay-brightness => omarchy-apple-display-brightness} | 0 bin/{swaybg-next => omarchy-theme-bg-next} | 0 default/hypr/bindings/utilities.conf | 8 ++++---- 3 files changed, 4 insertions(+), 4 deletions(-) rename bin/{apple-display-brightness => omarchy-apple-display-brightness} (100%) rename bin/{swaybg-next => omarchy-theme-bg-next} (100%) diff --git a/bin/apple-display-brightness b/bin/omarchy-apple-display-brightness similarity index 100% rename from bin/apple-display-brightness rename to bin/omarchy-apple-display-brightness diff --git a/bin/swaybg-next b/bin/omarchy-theme-bg-next similarity index 100% rename from bin/swaybg-next rename to bin/omarchy-theme-bg-next diff --git a/default/hypr/bindings/utilities.conf b/default/hypr/bindings/utilities.conf index 6448294..fe985d4 100644 --- a/default/hypr/bindings/utilities.conf +++ b/default/hypr/bindings/utilities.conf @@ -4,7 +4,7 @@ bind = SUPER, K, exec, ~/.local/share/omarchy/bin/omarchy-show-keybindings # Aesthetics bind = SUPER SHIFT, SPACE, exec, pkill -SIGUSR1 waybar -bind = SUPER CTRL, SPACE, exec, ~/.local/share/omarchy/bin/swaybg-next +bind = SUPER CTRL, SPACE, exec, ~/.local/share/omarchy/bin/omarchy-theme-bg-next bind = SUPER SHIFT CTRL, SPACE, exec, ~/.local/share/omarchy/bin/omarchy-theme-menu # Notifications @@ -19,9 +19,9 @@ bind = SUPER, ESCAPE, exec, ~/.local/share/omarchy/bin/omarchy-power-menu bind = SUPER CTRL, I, exec, ~/.local/share/omarchy/bin/omarchy-toggle-idle # Control Apple Display brightness -bind = CTRL, F1, exec, ~/.local/share/omarchy/bin/apple-display-brightness -5000 -bind = CTRL, F2, exec, ~/.local/share/omarchy/bin/apple-display-brightness +5000 -bind = SHIFT CTRL, F2, exec, ~/.local/share/omarchy/bin/apple-display-brightness +60000 +bind = CTRL, F1, exec, ~/.local/share/omarchy/bin/omarchy-apple-display-brightness -5000 +bind = CTRL, F2, exec, ~/.local/share/omarchy/bin/omarchy-apple-display-brightness +5000 +bind = SHIFT CTRL, F2, exec, ~/.local/share/omarchy/bin/omarchy-apple-display-brightness +60000 # Screenshots bind = , PRINT, exec, hyprshot -m region From e60c37b19450c23f9e0aad2eff5397a246da58ed Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Tue, 15 Jul 2025 19:35:01 -0700 Subject: [PATCH 67/69] Specific Omarchy TUI size --- default/hypr/windows.conf | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/default/hypr/windows.conf b/default/hypr/windows.conf index 454d258..828aff0 100644 --- a/default/hypr/windows.conf +++ b/default/hypr/windows.conf @@ -4,9 +4,10 @@ windowrule = suppressevent maximize, class:.* # Force chromium into a tile to deal with --app bug windowrule = tile, class:^(Chromium)$ -# Float and center sound, bluetooth, and wifi settings, as well as nautilus previews +# Float and center settings and previews windowrule = float, class:^(org.pulseaudio.pavucontrol|blueberry.py|Impala|org.gnome.NautilusPreviewer|Omarchy)$ -windowrule = size 800 600, class:^(org.pulseaudio.pavucontrol|blueberry.py|Impala|org.gnome.NautilusPreviewer|Omarchy)$ +windowrule = size 800 600, class:^(org.pulseaudio.pavucontrol|blueberry.py|Impala|org.gnome.NautilusPreviewer)$ +windowrule = size 645 350, class:Omarchy windowrule = center, class:^(org.pulseaudio.pavucontrol|blueberry.py|Impala|org.gnome.NautilusPreviewer|Omarchy)$ # Float and center file pickers From 3557ce8d3ba76d8d3cd899bf2cb0a1311cdb6f4e Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Tue, 15 Jul 2025 19:35:51 -0700 Subject: [PATCH 68/69] Shorter to fit inside Omarchy TUI width --- bin/omarchy-refresh-waybar | 2 +- bin/omarchy-refresh-wofi | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/omarchy-refresh-waybar b/bin/omarchy-refresh-waybar index 1d63341..8317168 100755 --- a/bin/omarchy-refresh-waybar +++ b/bin/omarchy-refresh-waybar @@ -1,6 +1,6 @@ #!/bin/bash -if gum confirm "Refresh Waybar config? This will replace your current Waybar settings with Omarchy defaults."; then +if gum confirm "Refresh Waybar config? This will replace your current settings with Omarchy defaults."; then # Overwrite local waybar settings with the latest in Omarchy cp -f ~/.local/share/omarchy/config/waybar/config ~/.config/waybar/ 2>/dev/null cp -f ~/.local/share/omarchy/config/waybar/style.css ~/.config/waybar/ 2>/dev/null diff --git a/bin/omarchy-refresh-wofi b/bin/omarchy-refresh-wofi index a4ec6c8..d6d359c 100755 --- a/bin/omarchy-refresh-wofi +++ b/bin/omarchy-refresh-wofi @@ -1,6 +1,6 @@ #!/bin/bash -if gum confirm "Refresh Wofi config? This will replace your current Wofi settings with Omarchy defaults."; then +if gum confirm "Refresh Wofi config? This will replace your current settings with Omarchy defaults."; then # Overwrite local waybar settings with the latest in Omarchy cp -f ~/.local/share/omarchy/config/wofi/config ~/.config/wofi/ 2>/dev/null cp -f ~/.local/share/omarchy/config/wofi/style.css ~/.config/wofi/ 2>/dev/null From 17c01629ec0ce599602e82a895fec6d9afc0cb63 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Tue, 15 Jul 2025 19:48:35 -0700 Subject: [PATCH 69/69] Noconfirm and needed --- install/xtras.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/xtras.sh b/install/xtras.sh index afd9ada..2801d7a 100644 --- a/install/xtras.sh +++ b/install/xtras.sh @@ -4,7 +4,7 @@ if [ -z "$OMARCHY_BARE" ]; then obsidian-bin libreoffice obs-studio kdenlive \ pinta xournalpp localsend-bin - yay -S typora || + yay -S --noconfirm --needed typora || echo -e "\e[31mFailed to install Typora. Continuing without!\e[0m" yay -S --noconfirm --needed spotify dropbox-cli 1password-beta 1password-cli ||