diff --git a/.gitignore b/.gitignore index 9785ad4..3c113a7 100644 --- a/.gitignore +++ b/.gitignore @@ -2,10 +2,11 @@ hypr/.config/hypr/env hypr/.config/hypr/env.conf hypr/.config/hypr/env.sh hypr/.config/hypr/monitor_setup.lua -hypr/.config/hypr/hyprpaper.conf +# Noctalia template output (shell-owned, regenerated on palette change) +hypr/.config/hypr/noctalia.lua +hypr/.config/kitty/themes/noctalia.conf *~lock.*# lazy-lock.json fish_variables term/.config/opencode/cli.json term/.config/opencode/service.json -hypr/.config/waypaper/config.ini diff --git a/README.md b/README.md index 4d19471..b01b001 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Personal configuration files for an Arch Linux workstation (Hyprland + Neovim + |-----------|----------| | `basic/` | Base system packages + the **central theme** (`basic/.config/themes` → `~/.config/themes`: Catppuccin Mocha palette, `current` symlink, `switch-theme.sh`/`sync-theme.sh`). All other packages reference it instead of copying colors. | | `term/` | Fish + kitty + starship + nvim + tmux + yazi + fastfetch + opencode terminal environment | -| `hypr/` | Hyprland compositor config, kitty theme, waypaper/hyprpaper wallpapers | +| `hypr/` | Hyprland compositor config + Noctalia shell config (Catppuccin Mocha) | | `kreation/`| VST plugin (`MT-PowerDrumKit.vst3`) | | `local_ai/`| Local AI / MCP tooling config | | `_install_skripte/` | Miscellaneous install helper scripts | diff --git a/basic/.config/themes/scripts/switch-theme.sh b/basic/.config/themes/scripts/switch-theme.sh index fbe41e8..1142458 100755 --- a/basic/.config/themes/scripts/switch-theme.sh +++ b/basic/.config/themes/scripts/switch-theme.sh @@ -53,10 +53,6 @@ main() { if command -v tmux >/dev/null 2>&1 && [[ -n "${TMUX:-}" ]]; then tmux source-file "$HOME/.config/tmux/tmux.conf" >/dev/null 2>&1 || true fi - if pgrep -x waybar >/dev/null 2>&1; then - pkill -x waybar >/dev/null 2>&1 || true - (waybar >/dev/null 2>&1 &) || true - fi echo "note: restart Neovim (or :colorscheme \$THEME_NVIM_COLORSCHEME) and open a new shell to pick up theme.env.sh." } diff --git a/basic/.config/themes/scripts/sync-theme.sh b/basic/.config/themes/scripts/sync-theme.sh index 0e84cc6..9c93c3a 100755 --- a/basic/.config/themes/scripts/sync-theme.sh +++ b/basic/.config/themes/scripts/sync-theme.sh @@ -6,9 +6,9 @@ # - term/.config/tmux/plugins/ (vendored upstream, stow-ignored) # - term/.config/yazi/theme.toml (declared mirror: yazi has no include) # - term/.config/starship.toml (declared mirror: starship has no include) -# - hypr/.config/rofi/themes/ltmnight.rasi (declared mirror: rasi has no -# alpha() function, so the two translucency values are #RRGGBBAA hex; -# everything else maps onto the central theme via @import) +# - hypr/.config/hypr/noctalia.lua + hypr/.config/kitty/themes/noctalia.conf +# (Noctalia template output: shell-owned, gitignored, regenerated from +# the active palette on every theme change) # - test/ + docs (may quote values in prose) # # Run with: bash basic/.config/themes/scripts/sync-theme.sh @@ -27,7 +27,7 @@ matches="$(grep -rniE --include='*.conf' --include='*.css' --include='*.rasi' \ --exclude-dir='.git' --exclude-dir='plugins' --exclude-dir='test' \ -E "$SENTINELS" . 2>/dev/null | grep -vE '^./basic/.config/themes' \ | grep -vE 'term/.config/(yazi/theme.toml|starship.toml)' \ - | grep -vE 'hypr/.config/rofi/themes/ltmnight.rasi' || true)" + | grep -vE 'hypr/.config/(hypr/noctalia.lua|kitty/themes/noctalia.conf)' || true)" if [[ -n "$matches" ]]; then echo "FAIL: hardcoded theme colors outside basic/.config/themes (and declared mirrors):" diff --git a/basic/.config/themes/themes/catppuccin-mocha/rofi.rasi b/basic/.config/themes/themes/catppuccin-mocha/rofi.rasi deleted file mode 100644 index dd65e9d..0000000 --- a/basic/.config/themes/themes/catppuccin-mocha/rofi.rasi +++ /dev/null @@ -1,33 +0,0 @@ -/* Central theme: catppuccin-mocha (Catppuccin Mocha), rofi palette. - * Part of basic/.config/themes. Managed file: refresh via - * basic/scripts/fetch-ports.sh - * (upstream: catppuccin/rofi themes/catppuccin-mocha.rasi). */ -* { - rosewater: #f5e0dc; - flamingo: #f2cdcd; - pink: #f5c2e7; - mauve: #cba6f7; - red: #f38ba8; - maroon: #eba0ac; - peach: #fab387; - yellow: #f9e2af; - green: #a6e3a1; - teal: #94e2d5; - sky: #89dceb; - sapphire: #74c7ec; - blue: #89b4fa; - lavender: #b4befe; - text: #cdd6f4; - subtext1: #bac2de; - subtext0: #a6adc8; - overlay2: #9399b2; - overlay1: #7f849c; - overlay0: #6c7086; - surface2: #585b70; - surface1: #45475a; - surface0: #313244; - base: #1e1e2e; - mantle: #181825; - crust: #11111b; -} - diff --git a/basic/.config/themes/themes/catppuccin-mocha/theme.css b/basic/.config/themes/themes/catppuccin-mocha/theme.css index aa354f5..e6a23c7 100644 --- a/basic/.config/themes/themes/catppuccin-mocha/theme.css +++ b/basic/.config/themes/themes/catppuccin-mocha/theme.css @@ -1,7 +1,8 @@ /* Central theme: catppuccin-mocha (Catppuccin Mocha). - * Part of basic/.config/themes. Managed file: refresh via - * basic/scripts/fetch-ports.sh (upstream: catppuccin/waybar themes/mocha.css), - * then re-apply the role aliases below. Consumers must use this file via + * Part of basic/.config/themes. Managed file: edit the palette here. + * (theme.css was originally ported from catppuccin/waybar themes/mocha.css; + * the waybar port is gone, so this file is hand-maintained now.) + * Consumers must use this file via * ~/.config/themes/current/theme.css, never a private copy. * Role aliases (stable interface, theme-agnostic) follow the palette. */ @define-color rosewater #f5e0dc; @@ -33,7 +34,7 @@ /* ---- Stable role interface (theme-agnostic; consumers use THESE) ---- * NOTE: values are literal hex, NOT @references to the palette above. - * Some parsers (wofi/waybar Gtk.CssProvider paths) silently drop + * Some Gtk.CssProvider-based parsers silently drop * @define-color lines that reference another @color, which made every * background transparent. Keep each role in sync with its palette twin * (mapping below); scripts/sync-theme.sh verifies this mechanically. */ diff --git a/basic/.config/themes/themes/catppuccin-mocha/theme.lua b/basic/.config/themes/themes/catppuccin-mocha/theme.lua index 408b3ab..b0d45e1 100644 --- a/basic/.config/themes/themes/catppuccin-mocha/theme.lua +++ b/basic/.config/themes/themes/catppuccin-mocha/theme.lua @@ -1,6 +1,6 @@ -- Central theme interface: catppuccin-mocha (Catppuccin Mocha). -- Part of basic/.config/themes. Managed file: edit the palette here. --- Consumers (hyprland.lua, hyprlock helpers) load this via +-- Consumers (hyprland.lua) load this via -- dofile(os.getenv("HOME") .. "/.config/themes/current/theme.lua") -- and must use the generic roles (bg/fg/accent/...) so a future -- non-Catppuccin theme only adds a new directory. Full palette is diff --git a/basic/scripts/fetch-ports.sh b/basic/scripts/fetch-ports.sh index f4012e9..d697f09 100755 --- a/basic/scripts/fetch-ports.sh +++ b/basic/scripts/fetch-ports.sh @@ -18,15 +18,9 @@ DEST="$SCRIPT_DIR/../.config/themes/themes/catppuccin-mocha" # Pinned upstream revisions (bump deliberately, then run this script). KITTY_PIN="main" -WAYBAR_PIN="main" -ROFI_PIN="main" curl -fsSL "https://raw.githubusercontent.com/catppuccin/kitty/${KITTY_PIN}/themes/mocha.conf" \ -o "$DEST/kitty.conf" -curl -fsSL "https://raw.githubusercontent.com/catppuccin/waybar/${WAYBAR_PIN}/themes/mocha.css" \ - -o "$DEST/theme.css" -curl -fsSL "https://raw.githubusercontent.com/catppuccin/rofi/${ROFI_PIN}/themes/catppuccin-mocha.rasi" \ - -o "$DEST/rofi.rasi" echo "ports refreshed into $DEST" echo "reminder: re-apply file headers + theme.css role aliases, then run scripts/sync-theme.sh" diff --git a/hypr/.config/hypr/hypridle.conf b/hypr/.config/hypr/hypridle.conf deleted file mode 100755 index 76a7e4f..0000000 --- a/hypr/.config/hypr/hypridle.conf +++ /dev/null @@ -1,34 +0,0 @@ -general { - lock_cmd = pidof hyprlock || hyprlock # avoid starting multiple hyprlock instances. - before_sleep_cmd = loginctl lock-session # lock before suspend. - after_sleep_cmd = hyprctl dispatch dpms on # to avoid having to press a key twice to turn on the display. -} - -listener { - timeout = 300 # 5.0min. - on-timeout = brightnessctl -s set 10 # set monitor backlight to minimum, avoid 0 on OLED monitor. - on-resume = brightnessctl -r # monitor backlight restore. -} - -# turn off keyboard backlight, comment out this section if you dont have a keyboard backlight. -listener { - timeout = 300 # 5.0min. - on-timeout = brightnessctl -sd rgb:kbd_backlight set 0 # turn off keyboard backlight. - on-resume = brightnessctl -rd rgb:kbd_backlight # turn on keyboard backlight. -} - -listener { - timeout = 900 # 15min - on-timeout = loginctl lock-session # lock screen when timeout has passed -} - -listener { - timeout = 1800 # 30min - on-timeout = hyprctl dispatch dpms off # screen off when timeout has passed - on-resume = hyprctl dispatch dpms on && brightnessctl -r # screen on when activity is detected after timeout has fired. -} - -listener { - timeout = 2700 # 45min - on-timeout = systemctl suspend # suspend pc -} diff --git a/hypr/.config/hypr/hyprland.lua b/hypr/.config/hypr/hyprland.lua index fe197a7..6fe65aa 100644 --- a/hypr/.config/hypr/hyprland.lua +++ b/hypr/.config/hypr/hyprland.lua @@ -9,7 +9,7 @@ local var_color_decoration_shadow = theme.shadow local var_mainMod = "SUPER" local var_terminal = "kitty" local var_fileManager = "dolphin" -local var_menu = "wofi --show drun" +local var_menu = "noctalia msg panel-toggle launcher" local var_screenshot_folder = "~/Bilder/Screenshots/" require("env") @@ -33,15 +33,10 @@ hl.config({ -- ################## hl.on("hyprland.start", function() - hl.exec_cmd("waybar &") + hl.exec_cmd("noctalia &") end) hl.on("hyprland.start", function() - hl.exec_cmd("hyprpaper &") - hl.exec_cmd("sleep 1; waypaper --restore &") - hl.exec_cmd("swaync &") - hl.exec_cmd("hypridle &") - hl.exec_cmd("nextcloud &") hl.exec_cmd("sh ~/.config/hypr/scripts/portal-host-override.sh") hl.exec_cmd("sh ~/.config/hypr/scripts/ensure-mime-defaults.sh") end) @@ -376,38 +371,32 @@ hl.device({ -- Example binds, see https://wiki.hypr.land/Configuring/Binds/ for more hl.bind(var_mainMod .. " + RETURN", hl.dsp.exec_cmd(var_terminal), { description = "Open terminal (kitty)" }) hl.bind(var_mainMod .. " + Q", hl.dsp.window.close(), { description = "Close focused window" }) -hl.bind(var_mainMod .. " + ESCAPE", hl.dsp.exec_cmd("hyprshutdown"), { description = "Shutdown Hyprland" }) +-- Session menu (noctalia owns the session panel) +hl.bind(var_mainMod .. " + ESCAPE", hl.dsp.exec_cmd("noctalia msg panel-toggle session"), { description = "Session menu (logout/reboot/shutdown)" }) hl.bind( var_mainMod .. " + SHIFT + ESCAPE", - hl.dsp.exec_cmd("command -v hyprshutdown >/dev/null 2>&1 && hyprshutdown || hyprctl dispatch exit"), + hl.dsp.exec_cmd("command -v noctalia >/dev/null 2>&1 && noctalia msg session logout || hyprctl dispatch exit"), { description = "Exit Hyprland" } ) hl.bind( var_mainMod .. " + CTRL + ESCAPE", - hl.dsp.exec_cmd("hyprshutdown -t 'Shutting down...' --post-cmd 'shutdown -P 0'"), + hl.dsp.exec_cmd("noctalia msg session shutdown"), { description = "Power off the system" } ) hl.bind( var_mainMod .. " + ALT + ESCAPE", - hl.dsp.exec_cmd("hyprshutdown -t 'Restarting...' --post-cmd 'reboot'"), + hl.dsp.exec_cmd("noctalia msg session reboot"), { description = "Reboot the system" } ) hl.bind(var_mainMod .. " + E", hl.dsp.exec_cmd(var_fileManager), { description = "Open file manager (dolphin)" }) hl.bind(var_mainMod .. " + V", hl.dsp.window.float({ action = "toggle" }), { description = "Toggle floating window" }) -hl.bind(var_mainMod .. " + SPACE", hl.dsp.exec_cmd(var_menu), { description = "Open app launcher (wofi)" }) -hl.bind( - var_mainMod .. " + SHIFT + SPACE", - hl.dsp.exec_cmd("nwg-drawer"), - { description = "Open app drawer (nwg-drawer)" } -) +hl.bind(var_mainMod .. " + SPACE", hl.dsp.exec_cmd(var_menu), { description = "Open app launcher (noctalia)" }) hl.bind(var_mainMod .. " + P", hl.dsp.window.pseudo(), { description = "Toggle pseudo-tiling" }) hl.bind(var_mainMod .. " + SHIFT + J", hl.dsp.layout("togglesplit"), { description = "Toggle split layout" }) hl.bind(var_mainMod .. " + I", hl.dsp.exec_cmd("firefox &"), { description = "Open Firefox" }) -hl.bind( - var_mainMod .. " + n", - hl.dsp.exec_cmd("~/.local/bin/hyprltm-net"), - { description = "Network manager (hyprltm)" } -) +hl.bind(var_mainMod .. " + n", hl.dsp.exec_cmd("nm-connection-editor"), { description = "Network manager" }) +hl.bind(var_mainMod .. " + comma", hl.dsp.exec_cmd("noctalia msg settings-toggle"), { description = "Noctalia settings" }) +hl.bind(var_mainMod .. " + S", hl.dsp.exec_cmd("noctalia msg panel-toggle control-center"), { description = "Control center (noctalia)" }) -- Move focus with mainMod or Vim-style hl.bind(var_mainMod .. " + CTRL + h", hl.dsp.focus({ direction = "left" }), { description = "Focus window left" }) @@ -611,9 +600,9 @@ hl.bind("SHIFT + PRINT", hl.dsp.exec_cmd("hyprshot -m active --output-folder " . description = "Screenshot active monitor", }) --- Screenlock -hl.bind("CTRL + ALT + L", hl.dsp.exec_cmd("hyprlock"), { locked = true, description = "Lock screen" }) -hl.bind(var_mainMod .. " + L", hl.dsp.exec_cmd("hyprlock"), { locked = true, description = "Lock screen" }) +-- Screenlock (noctalia owns the lock screen) +hl.bind("CTRL + ALT + L", hl.dsp.exec_cmd("noctalia msg session lock"), { locked = true, description = "Lock screen" }) +hl.bind(var_mainMod .. " + L", hl.dsp.exec_cmd("noctalia msg session lock"), { locked = true, description = "Lock screen" }) -- Keybind overview popup hl.bind( @@ -622,7 +611,7 @@ hl.bind( { description = "Show keybind overview" } ) -hl.bind(var_mainMod .. " + W", hl.dsp.exec_cmd("waypaper"), { description = "Wallpaper select" }) +hl.bind(var_mainMod .. " + W", hl.dsp.exec_cmd("noctalia msg panel-toggle wallpaper"), { description = "Wallpaper select (noctalia)" }) -- ############################# -- ## WINDOWS AND WORKSPACES ### @@ -676,12 +665,12 @@ hl.window_rule({ float = true, }) hl.window_rule({ - name = "waypaper-float", + name = "keybinds-float", match = { - class = ".*[Ww]aypaper.*", + class = "keybinds", }, float = true, - size = "1280 800", + size = "900 700", center = true, dim_around = true, }) @@ -692,31 +681,25 @@ hl.window_rule({ }, opacity = "0.80 0.70", }) +-- Noctalia shell surfaces: blur bars/panels/dock/notifications and let +-- Noctalia run its own animations (no Hyprland layer animation on top). hl.layer_rule({ + name = "noctalia", match = { - namespace = "waybar", + namespace = "^noctalia-(bar-.+|notification|dock|panel|attached-panel|osd|window-switcher)$", }, + no_anim = true, + ignore_alpha = 0.5, blur = true, -}) -hl.layer_rule({ - match = { - namespace = "waybar", - }, blur_popups = true, }) --- Central theme: blur behind the wofi popups (SUPER+SPACE drun, SUPER+K --- keybind help), whose window itself is translucent (@bg_translucent). -hl.layer_rule({ +hl.window_rule({ + name = "noctalia-settings", match = { - namespace = "wofi", + class = "dev.noctalia.Noctalia", }, - blur = true, -}) -hl.layer_rule({ - match = { - namespace = "wofi", - }, - blur_popups = true, + float = true, + size = "1080 920", }) hl.window_rule({ name = "no-rounding-fullscreen", @@ -753,3 +736,6 @@ hl.window_rule({ -- HyprMod managed settings require("hyprland-gui") + +-- For Noctalia Color templates +require("noctalia").apply_theme() diff --git a/hypr/.config/hypr/hyprlock.conf b/hypr/.config/hypr/hyprlock.conf deleted file mode 100755 index 43e598b..0000000 --- a/hypr/.config/hypr/hyprlock.conf +++ /dev/null @@ -1,114 +0,0 @@ -# sample hyprlock.conf -# for more configuration options, refer https://wiki.hyprland.org/Hypr-Ecosystem/hyprlock -# -# rendered text in all widgets supports pango markup (e.g. or tags) -# ref. https://wiki.hyprland.org/Hypr-Ecosystem/hyprlock/#general-remarks -# -# shortcuts to clear password buffer: ESC, Ctrl+U, Ctrl+Backspace -# -# you can get started by copying this config to ~/.config/hypr/hyprlock.conf -# - -# Central theme: palette variables ($sapphire, $text, ...) come from -# basic/.config/themes via ~/.config/themes/current/hypr.conf. -# Edit colors there, never hardcoded values here. -source = ~/.config/themes/current/hypr.conf - -$font = Monospace - -general { - hide_cursor = false -} - -# uncomment to enable fingerprint authentication -# auth { -# fingerprint { -# enabled = true -# ready_message = Scan fingerprint to unlock -# present_message = Scanning... -# retry_delay = 250 # in milliseconds -# } -# } - -animations { - enabled = true - bezier = linear, 1, 1, 0, 0 - animation = fadeIn, 1, 5, linear - animation = fadeOut, 1, 5, linear - animation = inputFieldDots, 1, 2, linear -} - -background { - monitor = - path = screenshot - blur_passes = 3 -} - -input-field { - monitor = - size = 20%, 5% - outline_thickness = 3 - inner_color = rgba(0, 0, 0, 0.0) # no fill - - outer_color = $sapphire $lavender 45deg - check_color = $sapphire $peach 120deg - fail_color = $maroon $red 40deg - - font_color = $subtext0 - fade_on_empty = false - rounding = 15 - - font_family = $font - placeholder_text = Input password... - fail_text = $PAMFAIL - - # uncomment to use a letter instead of a dot to indicate the typed password - # dots_text_format = * - # dots_size = 0.4 - dots_spacing = 0.3 - - # uncomment to use an input indicator that does not show the password length (similar to swaylock's input indicator) - # hide_input = true - - position = 0, -20 - halign = center - valign = center -} - -# TIME -label { - monitor = - text = $TIME # ref. https://wiki.hyprland.org/Hypr-Ecosystem/hyprlock/#variable-substitution - color = $text - font_size = 90 - font_family = $font - - position = -30, 0 - halign = right - valign = top -} - -# DATE -label { - monitor = - text = cmd[update:60000] date +"%A, %d %B %Y" # update every 60 seconds - color = $subtext0 - font_size = 25 - font_family = $font - - position = -30, -150 - halign = right - valign = top -} - -label { - monitor = - text = $LAYOUT[en,ru] - color = $subtext0 - font_size = 24 - onclick = hyprctl switchxkblayout all next - - position = 250, -20 - halign = center - valign = center -} diff --git a/hypr/.config/hypr/scripts/show-keybinds.sh b/hypr/.config/hypr/scripts/show-keybinds.sh index 8991250..ce1cf2e 100755 --- a/hypr/.config/hypr/scripts/show-keybinds.sh +++ b/hypr/.config/hypr/scripts/show-keybinds.sh @@ -1,10 +1,10 @@ #!/usr/bin/env bash # show-keybinds.sh — floating keybind overview popup. # -# Reads the live keybind list from `hyprctl binds -j` and shows it in a wofi -# popup (single column, sorted A-Z, fuzzy-searchable, closes on Esc). -# Pressing Enter on a row executes that keybind's action via the compositor's -# Lua state (hl.dispatch on the bind's stored dispatcher). +# Reads the live keybind list from `hyprctl binds -j` and shows it in a +# floating kitty window (single column, sorted A-Z, searchable via less). +# Display-only: wofi/rofi are gone (the Noctalia launcher has no stdin-list +# mode), so picking a row to execute is not wired up. # # Note: this config uses the Lua API (hl.bind), so `hyprctl binds -j` reports # key + modmask + an opaque Lua registry reference instead of a readable @@ -13,7 +13,7 @@ # you change a bind. # # Usage: show-keybinds.sh [--print] -# --print print the formatted list to stdout instead of opening wofi +# --print print the formatted list to stdout instead of opening kitty # (handy for debugging / testing the formatting pipeline) set -euo pipefail @@ -22,9 +22,6 @@ set -euo pipefail # display order. See https://wiki.hypr.land/Configuring/Binds/ readonly MOD_ORDER=(64 SUPER 8 ALT 4 CTRL 1 SHIFT 2 CAPS 16 MOD2 32 MOD3 128 MOD5) -# chord -> Lua registry ref of the dispatcher to run on selection -declare -A dispatch_for - if ! hyprctl binds -j >/dev/null 2>&1; then echo "hyprctl binds failed - are you inside a Hyprland session?" >&2 exit 1 @@ -38,8 +35,6 @@ rows=() # like the (usually empty) submap. \x1f is not whitespace, so every field # keeps its position. while IFS=$'\x1f' read -r modmask key description submap arg; do - raw_key="$key" - # Humanize mouse-button binds. case "$key" in mouse:272) key="LMB" ;; @@ -68,18 +63,6 @@ while IFS=$'\x1f' read -r modmask key description submap arg; do else rows+=("$(printf '%-26s %s' "$chord" "(no description)")") fi - - # Remember how to run this row. Mouse drag/resize need a real pointer - # gesture, so they stay display-only. First occurrence of a chord wins - # (media keys are often bound twice with different flags). - case "$raw_key" in - mouse:272 | mouse:273) ;; - *) - if [[ -n "$arg" && -z "${dispatch_for[$chord]+x}" ]]; then - dispatch_for[$chord]="$arg" - fi - ;; - esac done < <(hyprctl binds -j | jq -r '.[] | [(.modmask | tostring), .key, .description, .submap, .arg] | join("\u001f")') if (( ${#rows[@]} == 0 )); then @@ -96,28 +79,16 @@ if [[ "${1:-}" == "--print" ]]; then exit 0 fi -if ! command -v wofi >/dev/null 2>&1; then - printf '%s\n' "${rows[@]}" +# Floating display via kitty (class `keybinds` has a float rule in +# hyprland.lua). Rows go through a temp file rather than a stdin pipe so the +# popup does not depend on kitty forwarding stdin to its child; the previous +# run's file is cleaned up on the next invocation. q closes the window. +rm -f /tmp/keybinds.??????.txt 2>/dev/null || true +if command -v kitty >/dev/null 2>&1; then + tmp="$(mktemp /tmp/keybinds.XXXXXX.txt)" + printf '%s\n' "${rows[@]}" > "$tmp" + kitty --class keybinds --title Keybinds less -S "$tmp" exit 0 fi -sel="" -if ! sel=$(printf '%s\n' "${rows[@]}" | wofi \ - --dmenu \ - --prompt "Keybinds" \ - --location center \ - --width 860 \ - --lines 22 \ - --cache-file /dev/null \ - --insensitive \ - --no-custom-entry \ - --hide-scroll); then - exit 0 # popup dismissed (Esc) - not an error -fi - -# Re-derive the chord from the selected row (everything before the first -# double space) and run its stored dispatcher in the compositor's Lua state. -sel_chord="${sel%% *}" -if [[ -n "${dispatch_for[$sel_chord]+x}" ]]; then - hyprctl eval "hl.dispatch(debug.getregistry()[${dispatch_for[$sel_chord]}])" >/dev/null 2>&1 || true -fi \ No newline at end of file +printf '%s\n' "${rows[@]}" \ No newline at end of file diff --git a/hypr/.config/kitty/kitty.conf b/hypr/.config/kitty/kitty.conf index 61ad021..d196cc6 100644 --- a/hypr/.config/kitty/kitty.conf +++ b/hypr/.config/kitty/kitty.conf @@ -14,3 +14,4 @@ italic_font auto bold_italic_font auto font_size 10.0 +include themes/noctalia.conf diff --git a/hypr/.config/noctalia/config.toml b/hypr/.config/noctalia/config.toml new file mode 100644 index 0000000..be7b9bd --- /dev/null +++ b/hypr/.config/noctalia/config.toml @@ -0,0 +1,50 @@ +# Noctalia shell config (hypr/.config/noctalia/config.toml → ~/.config/noctalia/config.toml). +# +# Fresh start: Catppuccin Mocha palette + Noctalia-owned app theming. +# Bar/launcher/control-center/dock run on built-in defaults — explore and +# tune via the Settings UI. GUI edits land in +# ~/.local/state/noctalia/settings.toml and win over this file. +# Validate with: noctalia config validate + +[theme] +mode = "dark" +shell_mode = "follow" +source = "custom" +custom_palette = "Catppuccin-Mocha" + +[theme.templates] +enable_builtin_templates = true +# IDs from `noctalia theme --list-templates`. The `hyprland` template is +# intentionally off: basic/.config/themes owns Hyprland border colors. +builtin_ids = ["kitty", "gtk3", "gtk4", "qt", "kcolorscheme", "starship"] +enable_community_templates = true +community_ids = ["neovim"] + +# Idle behaviors (replaces hypr/.config/hypr/hypridle.conf, same timings: +# dim + kbd off at 5min, lock at 15min, monitors off at 30min, suspend at 45min). +[idle] +behavior_order = ["backlight-dim", "kbd-off", "lock", "screen-off", "suspend"] + +[idle.behavior.backlight-dim] +timeout = 300 +action = "command" +command = "brightnessctl -s set 10" +resume_command = "brightnessctl -r" + +[idle.behavior.kbd-off] +timeout = 300 +action = "command" +command = "brightnessctl -sd rgb:kbd_backlight set 0" +resume_command = "brightnessctl -rd rgb:kbd_backlight" + +[idle.behavior.lock] +timeout = 900 +action = "lock" + +[idle.behavior.screen-off] +timeout = 1800 +action = "screen_off" + +[idle.behavior.suspend] +timeout = 2700 +action = "lock_and_suspend" diff --git a/hypr/.config/noctalia/palettes/Catppuccin-Mocha.json b/hypr/.config/noctalia/palettes/Catppuccin-Mocha.json new file mode 100644 index 0000000..52abada --- /dev/null +++ b/hypr/.config/noctalia/palettes/Catppuccin-Mocha.json @@ -0,0 +1,48 @@ +{ + "dark": { + "mPrimary": "#74c7ec", + "mOnPrimary": "#11111b", + "mSecondary": "#b4befe", + "mOnSecondary": "#11111b", + "mTertiary": "#cba6f7", + "mOnTertiary": "#11111b", + "mError": "#f38ba8", + "mOnError": "#11111b", + "mSurface": "#1e1e2e", + "mOnSurface": "#cdd6f4", + "mSurfaceVariant": "#313244", + "mOnSurfaceVariant": "#a6adc8", + "mOutline": "#45475a", + "mShadow": "#11111b", + "mHover": "#45475a", + "mOnHover": "#cdd6f4", + "terminal": { + "background": "#1e1e2e", + "foreground": "#cdd6f4", + "cursor": "#f5e0dc", + "cursorText": "#1e1e2e", + "selectionBg": "#585b70", + "selectionFg": "#cdd6f4", + "normal": { + "black": "#45475a", + "red": "#f38ba8", + "green": "#a6e3a1", + "yellow": "#f9e2af", + "blue": "#89b4fa", + "magenta": "#cba6f7", + "cyan": "#94e2d5", + "white": "#bac2de" + }, + "bright": { + "black": "#585b70", + "red": "#f38ba8", + "green": "#a6e3a1", + "yellow": "#f9e2af", + "blue": "#89b4fa", + "magenta": "#cba6f7", + "cyan": "#94e2d5", + "white": "#a6adc8" + } + } + } +} diff --git a/hypr/.config/rofi/themes/hyprltm-net.rasi b/hypr/.config/rofi/themes/hyprltm-net.rasi deleted file mode 100644 index 274802a..0000000 --- a/hypr/.config/rofi/themes/hyprltm-net.rasi +++ /dev/null @@ -1,157 +0,0 @@ -// Managed by dotfiles: hypr/.config/rofi/themes/hyprltm-net.rasi -// (stowed to ~/.config/rofi/themes/hyprltm-net.rasi). -// Third-party layout from hyprltm-net 0.5.0 (Djalel Oukid), kept structurally -// identical: all colors resolve through @theme "ltmnight" (ltmnight.rasi), -// which maps onto the central theme (basic/.config/themes). -// Do not add hex colors here — the palette lives in ltmnight.rasi. -// __ __ __ ________ ___ _ __ __ -// / / / /_ ______ _____/ / /_ __/ |/ / / | / /___/ /_ -// / /_/ / / / / __ \/ ___/ / / / / /|_/ /_____ / |/ / _ / __/ -// / __ / /_/ / /_/ / / / /___ / / / / / /_____ / /| / __/ /_ -// /_/ /_/\__, / .___/_/ /_____//_/ /_/ /_/ /_/ |_/\___/\__/ -// /____/_/ - -// Copyright © 2025-2026 Djalel Oukid (sniper1720) - -@theme "ltmnight" - -window { - background-color: @background; - border: 2px; - border-color: @primary-fixed; - padding: 0; - border-radius: 10px; - width: 50%; - location: 0; - x-offset: 0; - y-offset: 0; - transparency: "real"; -} - -mainbox { - enabled: true; - spacing: 0em; - padding: 10px; - orientation: vertical; - children: [ inputbar, message, listview ]; - background-color: transparent; -} - -inputbar { - enabled: true; - spacing: 0.5em; - padding: 8px 15px; - margin: 0 0 10px 0; - background-color: @selection; - border: 0px 0px 2px 0px; - border-color: @primary-fixed; - border-radius: 8px; -} - -prompt { - enabled: true; - expand: false; - text-color: @prompt; - padding: 0px 5px; - background-color: transparent; - str: ""; -} - -entry { - enabled: true; - background-color: transparent; - text-color: @on-primary-fixed; - caret-color: @ltmnight8; - placeholder: ""; - placeholder-color: @placeholder; - expand: true; -} - -listview { - background-color: transparent; - border: 0; - padding: 5px; - cycle: true; - layout: vertical; - spacing: 2px; - scrollbar: false; - columns: 1; - dynamic: true; - fixed-height:false; -} - -element { - enabled: true; - padding: 5px 10px; - margin: 2px 0; - background-color: transparent; - text-color: @foreground; - border: 0; - border-radius: 5px; - orientation: horizontal; - children: [ element-text ]; - vertical-align: 0.5; -} - -element-icon { - background-color: transparent; - size: 0px; - margin: 0px; - enabled: false; -} - -element-text { - background-color: transparent; - text-color: inherit; - highlight-color: @ltmnight6; - expand: true; - vertical-align: 0.5; - format: "{text}"; -} - -element selected { - background-color: @selection; - text-color: @on-selection; - border-radius: 5px; -} - -element urgent { - background-color: @error; - text-color: @on-error; -} - -element active { - background-color: @primary; - text-color: @on-primary; -} - -scrollbar { - handle-color: @ltmnight8; - background-color: @primary-fixed; - width: 4px; - padding: 0; - border-radius: 0px; -} - -case-indicator { - enabled: false; -} - -message { - enabled: true; - margin: 10px 0px 10px 0px; - padding: 10px; - border: 1px; - border-radius: 8px; - border-color: @message-border; - background-color: @message-background; - children: [ textbox ]; -} - - textbox { - background-color: @message-background; - text-color: @message-text; - vertical-align: 0.5; - horizontal-align: 0.0; - highlight: none; - } \ No newline at end of file diff --git a/hypr/.config/rofi/themes/ltmnight.rasi b/hypr/.config/rofi/themes/ltmnight.rasi deleted file mode 100644 index 279cea1..0000000 --- a/hypr/.config/rofi/themes/ltmnight.rasi +++ /dev/null @@ -1,67 +0,0 @@ -// ltmnight Palette for Rofi — now mapped onto the CENTRAL theme -// (basic/.config/themes → ~/.config/themes/current/rofi.rasi, Catppuccin Mocha). -// Tracked in dotfiles: hypr/.config/rofi/themes/ltmnight.rasi -// (stowed to ~/.config/rofi/themes/ltmnight.rasi). -// -// Only the palette values changed to Mocha; every variable NAME below is -// unchanged, so hyprltm-net.rasi (@theme "ltmnight") and hyprltm-net's -// core.sh -theme-str overrides (@on-primary-fixed, @error-message, ...) -// keep working untouched. The two translucency values use #RRGGBBAA hex -// because rasi has no alpha() function — keep them in sync with @base / -// @surface0 from the central theme if you ever switch flavors. - -@import "$HOME/.config/themes/current/rofi.rasi" - -* { - ltmnight0: @base; /* Background */ - ltmnight1: @surface0; /* Current Line / Secondary Background */ - ltmnight2: @text; /* Foreground Text */ - ltmnight3: @overlay1; /* Comment / Faded Foreground */ - ltmnight4: @red; /* Red / Errors */ - ltmnight5: @peach; /* Orange / Warnings */ - ltmnight6: @yellow; /* Yellow / Warnings */ - ltmnight7: @green; /* Green / Success */ - ltmnight8: @sapphire; /* Cyan / Info */ - ltmnight9: @mauve; /* Purple / Accents */ - ltmnight10: @pink; /* Pink / Accents */ - ltmnight11: @overlay0; /* Gray / Placeholders */ - - - - // Rofi Color Mappings to ltmnight Palette - background: #1e1e2ee6; /* @base at 90% */ - foreground: @ltmnight2; - - primary: @ltmnight9; - accent: @ltmnight10; - on-primary: @ltmnight2; - - primary-fixed: @ltmnight1; - on-primary-fixed: @ltmnight2; - - selection: #31324480; /* @surface0 at 50% */ - on-selection: @ltmnight2; - - error: @ltmnight4; - on-error: @ltmnight2; - - surface: #1e1e2ee6; /* @base at 90% */ - on-surface: @ltmnight2; - - outline: @ltmnight3; - shadow: rgba(0, 0, 0, 0.5); - - highlight: @ltmnight6; - - prompt: @ltmnight11; - placeholder: @ltmnight11; - - message-background: transparent; - message-border: @ltmnight8; - message-text: @ltmnight8; - - error-message: @ltmnight4; - warning-message: @ltmnight5; - success-message: @ltmnight7; - info-message: @ltmnight8; -} diff --git a/hypr/.config/waybar/config.jsonc b/hypr/.config/waybar/config.jsonc deleted file mode 100755 index ef126e3..0000000 --- a/hypr/.config/waybar/config.jsonc +++ /dev/null @@ -1,230 +0,0 @@ -// -*- mode: jsonc -*- -{ - "custom/gpu": { - "format": "{text}", - "tooltip": false, - "exec": "~/.config/waybar/scripts/gpu-info.sh", - "exec-interval": 1, - "return-type": "json" - }, - // "layer": "top", // Waybar at top layer - "position": "bottom", // Waybar position (top|bottom|left|right) - "height": 30, // Waybar height (to be removed for auto height) - // "width": 800, // Waybar width - "spacing": 4, // Gaps between modules (4px) - // Choose the order of the modules - "modules-left": [ - "hyprland/workspaces" - //"hyprland/mode", - //"hyprland/scratchpad", - //"custom/media" - ], - "modules-center": [ - "hyprland/window" - ], - "modules-right": [ - "mpd", - "idle_inhibitor", - "pulseaudio", - //"network", - //"power-profiles-daemon", - "cpu", - "memory", - "temperature", - "backlight", - "keyboard-state", - //"hyprland/language", - "battery", - //"battery#bat2", - "custom/gpu", - "clock", - "tray", - "custom/power" - ], - // Modules configuration - "hyprland/workspaces": { - "disable-scroll": true, - "all-outputs": true, - "warp-on-scroll": true, - "format": "{name}: {icon}", - "format-icons": { - // "1": "", - // "2": "", - // "3": "", - // "4": "", - // "5": "", - // "urgent": "", - "active": "", - "default": "" - } - }, - "keyboard-state": { - "numlock": true, - "capslock": true, - "format": "{name} {icon}", - "format-icons": { - "locked": "", - "unlocked": "" - } - }, - "hyprland/mode": { - "format": "{}" - }, - "hyprland/scratchpad": { - "format": "{icon} {count}", - "show-empty": false, - "format-icons": ["", ""], - "tooltip": true, - "tooltip-format": "{app}: {title}" - }, - "mpd": { - "format": "{stateIcon} {consumeIcon}{randomIcon}{repeatIcon}{singleIcon}{artist} - {album} - {title} ({elapsedTime:%M:%S}/{totalTime:%M:%S}) ⸨{songPosition}|{queueLength}⸩ {volume}% ", - "format-disconnected": "Disconnected ", - "format-stopped": "{consumeIcon}{randomIcon}{repeatIcon}{singleIcon}Stopped ", - "unknown-tag": "N/A", - "interval": 5, - "consume-icons": { - "on": " " - }, - "random-icons": { - "off": " ", - "on": " " - }, - "repeat-icons": { - "on": " " - }, - "single-icons": { - "on": "1 " - }, - "state-icons": { - "paused": "", - "playing": "" - }, - "tooltip-format": "MPD (connected)", - "tooltip-format-disconnected": "MPD (disconnected)" - }, - "idle_inhibitor": { - "format": "{icon}", - "format-icons": { - "activated": "", - "deactivated": "" - } - }, - "tray": { - // "icon-size": 21, - "spacing": 10//, - // "icons": { - // "blueman": "bluetooth", - // "TelegramDesktop": "$HOME/.local/share/icons/hicolor/16x16/apps/telegram.png" - // } - }, - "clock": { - "format": "{:%Y-%m-%d %H:%M}", - "tooltip-format": "{:%Y %B}\n{calendar}", - "on-click": "~/.config/waybar/scripts/copy-date.sh" - //"format-alt": "{:%Y-%m-%d}" - }, - "cpu": { - "interval": 1, - "format": "cpu:{usage:02}%@{avg_frequency:4.2f}MHz", - "tooltip": false - }, - "memory": { - "interval": 1, - "format": "mem:{:02}%" - }, - "temperature": { - // "thermal-zone": 2, - // "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input", - "critical-threshold": 80, - // "format-critical": "{temperatureC}°C {icon}", - "format": "{temperatureC}°C {icon}", - "format-icons": ["", "", ""] - }, - "backlight": { - // "device": "acpi_video1", - "format": "{percent}% {icon}", - "format-icons": ["", "", "", "", "", "", "", "", ""] - }, - "battery": { - "states": { - // "good": 95, - "warning": 30, - "critical": 15 - }, - "format": "{capacity}% {icon}", - "format-full": "{capacity}% {icon}", - "format-charging": "{capacity}% ", - "format-plugged": "{capacity}% ", - "format-alt": "{time} {icon}", - // "format-good": "", // An empty format will hide the module - // "format-full": "", - "format-icons": ["", "", "", "", ""] - }, - "battery#bat2": { - "bat": "BAT2" - }, - "power-profiles-daemon": { - "format": "{icon}", - "tooltip-format": "Power profile: {profile}\nDriver: {driver}", - "tooltip": true, - "format-icons": { - "default": "", - "performance": "", - "balanced": "", - "power-saver": "" - } - }, - "network": { - // "interface": "wlp2*", // (Optional) To force the use of this interface - "format-wifi": "{essid} ({signalStrength}%) ", - "format-ethernet": "{ipaddr}/{cidr} ", - "tooltip-format": "{ifname} via {gwaddr} ", - "format-linked": "{ifname} (No IP) ", - "format-disconnected": "Disconnected ⚠", - "format-alt": "{ifname}: {ipaddr}/{cidr}" - }, - "pulseaudio": { - // "scroll-step": 1, // %, can be a float - "format": "{volume}% {icon} {format_source}", - "format-bluetooth": "{volume}% {icon} {format_source}", - "format-bluetooth-muted": " {icon} {format_source}", - "format-muted": " {format_source}", - "format-source": "{volume}% ", - "format-source-muted": "", - "format-icons": { - "headphone": "", - "hands-free": "", - "headset": "", - "phone": "", - "portable": "", - "car": "", - "default": ["", "", ""] - }, - "on-click": "pavucontrol" - }, - "custom/media": { - "format": "{icon} {text}", - "return-type": "json", - "max-length": 40, - "format-icons": { - "spotify": "", - "default": "🎜" - }, - "escape": true, - "exec": "$HOME/.config/waybar/mediaplayer.py 2> /dev/null" // Script in resources folder - // "exec": "$HOME/.config/waybar/mediaplayer.py --player spotify 2> /dev/null" // Filter player based on name - }, - "custom/power": { - "format" : "⏻ ", - "tooltip": false, - "menu": "on-click", - "menu-file": "$HOME/.config/waybar/power_menu.xml", // Menu file in resources folder - "menu-actions": { - "shutdown": "shutdown", - "reboot": "reboot", - "suspend": "systemctl suspend", - "hibernate": "systemctl hibernate" - } - } -} diff --git a/hypr/.config/waybar/mocha.css b/hypr/.config/waybar/mocha.css deleted file mode 120000 index c1eb9f6..0000000 --- a/hypr/.config/waybar/mocha.css +++ /dev/null @@ -1 +0,0 @@ -../../../basic/.config/themes/themes/catppuccin-mocha/theme.css \ No newline at end of file diff --git a/hypr/.config/waybar/scripts/copy-date.sh b/hypr/.config/waybar/scripts/copy-date.sh deleted file mode 100755 index 95c75e0..0000000 --- a/hypr/.config/waybar/scripts/copy-date.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env bash -DATE=$(date +"%Y-%m-%d_%H%M") -echo -n "$DATE" | wl-copy -notify-send "Date copied" "$DATE" diff --git a/hypr/.config/waybar/scripts/gpu-info.sh b/hypr/.config/waybar/scripts/gpu-info.sh deleted file mode 100755 index 2d0a0ae..0000000 --- a/hypr/.config/waybar/scripts/gpu-info.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash -# GPU monitoring for waybar (AMD radeontop + sysfs temp) - -GPU_DATA=$(timeout 1 radeontop -d - -l 1 2>/dev/null | tail -1) - -if [ -z "$GPU_DATA" ]; then - echo "{\"text\": \"gpu:--\", \"tooltip\": \"Reading...\"}" - exit 0 -fi - -GPU=$(echo "$GPU_DATA" | grep -oP 'gpu \K[0-9.]+' | head -1) -GPU_INT=${GPU%.*} - -VRAM=$(echo "$GPU_DATA" | grep -oP 'vram [\d.]+% \K[\d.]+' | head -1) -VRAM_INT=${VRAM%.*} - -SCLK=$(echo "$GPU_DATA" | grep -oP 'sclk [\d.]+% \K[\d.]+' | head -1) -MCLK=$(echo "$GPU_DATA" | grep -oP 'mclk [\d.]+% \K[\d.]+' | head -1) - -TEMP=$(( $(cat /sys/class/hwmon/hwmon2/temp1_input) / 1000 )) -POWER=$(( $(cat /sys/class/hwmon/hwmon2/power1_average) / 1000 )) - -echo "{\"text\": \"gpu:${GPU_INT}% ${VRAM_INT}MB ${TEMP}C\", \"tooltip\": \"GPU: ${GPU}%\\nVRAM: ${VRAM}MB\\nTemp: ${TEMP}C\\nPower: ${POWER}W\\nSCLK: ${SCLK}GHz\\nMCLK: ${MCLK}GHz\"}" diff --git a/hypr/.config/waybar/style.css b/hypr/.config/waybar/style.css deleted file mode 100755 index 9073688..0000000 --- a/hypr/.config/waybar/style.css +++ /dev/null @@ -1,233 +0,0 @@ -/* Central theme: roles + palette imported from basic/.config/themes - * (mocha.css is a symlink into the current theme's theme.css). - * This file must use @role/@palette names only — never hardcoded colors — - * so a future theme only swaps the central files. */ -@import url("mocha.css"); - -* { - font-family: "JetBrainsMono Nerd Font", FontAwesome, sans-serif; - font-size: 13px; -} - -/* ---------- Waybar Container ---------- */ -window#waybar { - background-color: @bg_dim; - color: @fg; - border-bottom: 1px solid @border; - box-shadow: 0 10px 30px rgba(0,0,0,0.30); - - transition-property: background-color, opacity; - transition-duration: .5s; -} - -window#waybar.hidden { - opacity: 0.35; -} - -/* ---------- Buttons / Workspaces ---------- */ -button { - box-shadow: inset 0 -2px transparent; - border: none; - border-radius: 0; -} - -button:hover { - background: inherit; - box-shadow: inset 0 -2px @accent; -} - -#workspaces button { - padding: 0 8px; - margin: 4px 3px; - background-color: @surface; - color: @fg_dim; - border: 1px solid @border; - border-radius: 10px; -} - -#workspaces button:hover { - background: @border; - color: @fg; -} - -#workspaces button.focused, -#workspaces button.active { - background-color: @accent; - color: @bg_deep; - border: 1px solid @accent; - box-shadow: inset 0 -2px @accent2; -} - -#workspaces button.urgent { - background-color: @urgent; - border-color: @urgent; - color: @bg_deep; -} - -#window, -#workspaces { - margin: 0 4px; -} - -.modules-left > widget:first-child > #workspaces { - margin-left: 0; -} - -.modules-right > widget:last-child > #workspaces { - margin-right: 0; -} - -/* ---------- Common “Chip” module style ---------- */ -#clock, -#battery, -#cpu, -#memory, -#disk, -#temperature, -#backlight, -#network, -#pulseaudio, -#wireplumber, -#custom-media, -#custom-gpu, -#tray, -#mode, -#idle_inhibitor, -#scratchpad, -#power-profiles-daemon, -#mpd, -#language, -#keyboard-state, -#privacy, -#privacy-item { - padding: 0 10px; - color: @fg; - background-color: @surface; - border: 1px solid @border; - border-radius: 10px; - margin: 4px 4px; -} - -#pulseaudio:hover, -#wireplumber:hover, -#network:hover, -#clock:hover { - background-color: @border; -} - -#clock { - border-color: @accent; -} - -/* Battery */ -#battery.charging, -#battery.plugged { - background-color: @ok; - border-color: @ok; - color: @bg_deep; -} - -@keyframes blink { - to { - background-color: @urgent; - border-color: @urgent; - } -} - -#battery.critical:not(.charging) { - background-color: @urgent; - border-color: @urgent; - color: @bg_deep; - animation-name: blink; - animation-duration: 0.6s; - animation-timing-function: steps(10); - animation-iteration-count: infinite; - animation-direction: alternate; -} - -/* Network */ -#network.disconnected { - background-color: @urgent; - border-color: @urgent; - color: @bg_deep; -} - -/* Audio */ -#pulseaudio:hover { - background-color: @border; -} - -#pulseaudio.muted { - background-color: @surface; - border-color: @border; - color: @fg_muted; -} - -#wireplumber.muted { - background-color: @urgent; - border-color: @urgent; - color: @bg_deep; -} - -/* Temperature */ -#temperature.critical { - background-color: @urgent; - border-color: @urgent; - color: @bg_deep; -} - -/* Tray */ -#tray > .passive { - -gtk-icon-effect: dim; -} - -#tray > .needs-attention { - -gtk-icon-effect: highlight; - background-color: @urgent; - border-radius: 10px; -} - -/* Idle inhibitor */ -#idle_inhibitor.activated { - background-color: @accent; - border-color: @accent; - color: @bg_deep; -} - -/* Scratchpad */ -#scratchpad { - background: @surface; -} - -#scratchpad.empty { - background-color: transparent; - border-color: transparent; -} - -/* Privacy */ -#privacy { - padding: 0; - background-color: transparent; - border-color: transparent; -} - -#privacy-item { - padding: 0 6px; - color: @fg; -} - -#privacy-item.screenshare { - background-color: @warn; - border-color: @warn; - color: @bg_deep; -} -#privacy-item.audio-in { - background-color: @ok; - border-color: @ok; - color: @bg_deep; -} -#privacy-item.audio-out { - background-color: @accent; - border-color: @accent; - color: @bg_deep; -} diff --git a/hypr/.config/waypaper/style.css b/hypr/.config/waypaper/style.css deleted file mode 100644 index 14b64f0..0000000 --- a/hypr/.config/waypaper/style.css +++ /dev/null @@ -1,28 +0,0 @@ -/* Central theme: roles imported from basic/.config/themes. - * NOTE: waypaper loads this file via Gtk.CssProvider.load_from_data, so a - * relative @import would resolve against the process working directory and - * NOT against this file's location. The import MUST stay an absolute path. - * This file must use @role names only — never hardcoded colors. - * Makes the currently selected wallpaper unmissable: thick accent border - * (same role as the Hyprland active border) + tinted fill + outer glow. - * Selector `.highlighted-button` is the official waypaper hook - * (see waypaper docs: "Custom styles and colors"). */ -@import url("$HOME/.config/themes/current/theme.css"); - -.highlighted-button { - background-image: none; - box-shadow: none; - background-color: alpha(@accent, 0.25); - border: 3px solid @accent; - border-radius: 8px; - box-shadow: 0 0 0 2px alpha(@accent, 0.6), 0 0 14px alpha(@accent, 0.9); -} - -.highlighted-button > image, -.highlighted-button:hover > image { - -gtk-icon-effect: highlight; -} - -button:hover { - border-color: @accent; -} diff --git a/hypr/.config/wofi/mocha.css b/hypr/.config/wofi/mocha.css deleted file mode 120000 index c1eb9f6..0000000 --- a/hypr/.config/wofi/mocha.css +++ /dev/null @@ -1 +0,0 @@ -../../../basic/.config/themes/themes/catppuccin-mocha/theme.css \ No newline at end of file diff --git a/hypr/.config/wofi/style.css b/hypr/.config/wofi/style.css deleted file mode 100644 index fe9a469..0000000 --- a/hypr/.config/wofi/style.css +++ /dev/null @@ -1,69 +0,0 @@ -/* Central theme: roles + palette imported from basic/.config/themes - * (mocha.css is a symlink into the current theme's theme.css, so this - * resolves identically in the repo and once stowed — unlike a - * ../themes/... relative hop, which differs between the two). - * This file styles every wofi popup: SUPER+SPACE app launcher (drun) and - * SUPER+K keybind help (dmenu). Use @role/@palette names only. */ -@import url("mocha.css"); - -window { - margin: 0px; - background-color: @bg_translucent; - border: 2px solid @accent; - border-radius: 12px; -} - -#input { - margin: 8px; - padding: 6px 10px; - background-color: @surface; - color: @fg; - border: 1px solid @border; - border-radius: 8px; -} - -#input:focus { - border-color: @accent; -} - -#inner-box { - margin: 8px; - background-color: transparent; -} - -#outer-box { - margin: 0px; - padding: 4px; - background-color: transparent; -} - -#scroll { - margin: 0px; - background-color: transparent; -} - -#entry { - padding: 6px 10px; - margin: 2px 0px; - background-color: transparent; - color: @fg; - border-radius: 8px; -} - -#entry:selected { - background-color: @accent; -} - -#entry:selected #text { - color: @bg_deep; -} - -#text { - margin: 2px 6px; - color: @fg; -} - -#img { - margin-right: 8px; - background-color: transparent; -} diff --git a/hypr/scripts/packages.txt b/hypr/scripts/packages.txt index ebf4f00..36c8351 100644 --- a/hypr/scripts/packages.txt +++ b/hypr/scripts/packages.txt @@ -1,8 +1,10 @@ # --------------------------------------------------------------------------- # Hyprland compositor package list for hypr/setup.sh # -# Wayland compositor, its ecosystem tools (lockscreen, idle, wallpaper, -# notification center, screenshot, launcher) and supporting utilities. +# Wayland compositor, screenshot tool and supporting utilities. The desktop +# shell (bar, launcher, notifications, lock screen, wallpaper, idle, session +# menu) is Noctalia (`sudo pacman -S noctalia`), not a set of standalone +# ecosystem tools. # `hyprltm` (network manager) is installed via a post-install hook in # setup.sh since it is not available as a standard pacman/aur package. # @@ -13,22 +15,10 @@ @pacman hyprland -hyprlauncher xdg-desktop-portal-hyprland hyprpolkitagent pantheon-shortcut-overlay -waybar -hyprpaper wev -hyprlock -hypridle -nwg-drawer wl-clipboard -swaync hyprshot -rofi -hyprshutdown -wofi - -@aur -waypaper +brightnessctl diff --git a/term/.config/yazi/theme.toml b/term/.config/yazi/theme.toml index fccbc4b..4840eb6 100644 --- a/term/.config/yazi/theme.toml +++ b/term/.config/yazi/theme.toml @@ -157,7 +157,6 @@ files = [ { name = "dockerfile", text = "󰡨", fg = "#89b4fa" }, { name = ".git-blame-ignore-revs", text = "", fg = "#fab387" }, { name = ".nvmrc", text = "", fg = "#a6e3a1" }, - { name = "hyprpaper.conf", text = "", fg = "#74c7ec" }, { name = ".prettierignore", text = "", fg = "#89b4fa" }, { name = "rakefile", text = "", fg = "#313244" }, { name = "code_of_conduct", text = "", fg = "#f38ba8" }, @@ -284,9 +283,7 @@ files = [ { name = "commitlint.config.js", text = "󰜘", fg = "#94e2d5" }, { name = ".gitmodules", text = "", fg = "#fab387" }, { name = "gradle-wrapper.properties", text = "", fg = "#585b70" }, - { name = "hypridle.conf", text = "", fg = "#74c7ec" }, { name = "vercel.json", text = "▲", fg = "#f5e0dc" }, - { name = "hyprlock.conf", text = "", fg = "#74c7ec" }, { name = "go.sum", text = "", fg = "#74c7ec" }, { name = "kdenlive-layoutsrc", text = "", fg = "#89b4fa" }, { name = "gruntfile.babel.js", text = "", fg = "#fab387" }, diff --git a/test/verify_packages.sh b/test/verify_packages.sh index d3fdadf..c4403a5 100755 --- a/test/verify_packages.sh +++ b/test/verify_packages.sh @@ -56,15 +56,9 @@ declare -A BINS=( [locate]="locate --version" # Hyprland compositor & ecosystem [hyprland]="hyprctl version" - [waybar]="waybar --version" - [hyprlock]="hyprlock --version" - [hypridle]="hypridle --version" - [hyprpaper]="hyprpaper -v" - [rofi]="rofi -v" - [swaync]="swaync --version" - [nwg-drawer]="nwg-drawer --version" [wl-clipboard]="wl-copy --version" [hyprshot]="hyprshot --version" + [brightnessctl]="brightnessctl --version" [wpaperd]="wpaperd --version" )