diff options
| author | David Sadler <david@flashacademy.com> | 2026-07-07 09:15:46 +0100 |
|---|---|---|
| committer | David Sadler <david@flashacademy.com> | 2026-07-07 09:15:46 +0100 |
| commit | 626c119a60701e2908e5795b3941078ebb8dba6b (patch) | |
| tree | ad8b6577953f50ad958051ef1d2493e8785ad4cb | |
| parent | 4c8d52122d962a0194737450e825471f27c93451 (diff) | |
| parent | fc2b007057dc763de14f9cd7860360bc5c9b646e (diff) | |
Merge branch 'main' into WSL
| -rw-r--r-- | bash/.bash_aliases | 2 | ||||
| -rwxr-xr-x | bin/.bin/add-bookmark.sh | 36 | ||||
| -rwxr-xr-x | bin/.bin/bluetooth.sh | 140 | ||||
| -rwxr-xr-x | bin/.bin/new-episode | 35 | ||||
| -rwxr-xr-x | bin/.bin/open-bookmark.sh | 23 | ||||
| -rwxr-xr-x | bin/.bin/power.sh | 22 | ||||
| -rw-r--r-- | bookmarks.txt | 7 | ||||
| -rw-r--r-- | dunst/.config/dunst/dunstrc | 56 | ||||
| -rw-r--r-- | git/.config/git/gitignore | 1 | ||||
| -rw-r--r-- | gtk-3.0/.config/gtk-3.0/settings.ini | 16 | ||||
| -rwxr-xr-x | install.sh | 4 | ||||
| -rw-r--r-- | nvim/.config/nvim/lsp/bash_language_server.lua | 5 | ||||
| -rw-r--r-- | nvim/.config/nvim/lsp/vtsls.lua | 39 | ||||
| -rw-r--r-- | nvim/.config/nvim/lua/config/lsp.lua | 2 | ||||
| -rw-r--r-- | nvim/.config/nvim/lua/plugins/conform.lua | 15 | ||||
| -rw-r--r-- | nvim/.config/nvim/lua/plugins/nvim-lint.lua | 2 | ||||
| -rw-r--r-- | nvim/.config/nvim/lua/plugins/nvim-treesitter.lua | 3 | ||||
| -rw-r--r-- | oxwm/.config/oxwm/config.lua | 28 | ||||
| -rw-r--r-- | rofi/.config/rofi/config.rasi | 3 | ||||
| -rw-r--r-- | rofi/.config/rofi/themes/nord.rasi | 75 |
20 files changed, 473 insertions, 41 deletions
diff --git a/bash/.bash_aliases b/bash/.bash_aliases index 427b880..a443389 100644 --- a/bash/.bash_aliases +++ b/bash/.bash_aliases @@ -68,5 +68,5 @@ se() { mkdir -p "$(dirname "$SECRET_PATH")" fi - nix shell nixpkgs#sops -c sops "$SECRET_PATH" + sops "$SECRET_PATH" } diff --git a/bin/.bin/add-bookmark.sh b/bin/.bin/add-bookmark.sh new file mode 100755 index 0000000..9a8ab6b --- /dev/null +++ b/bin/.bin/add-bookmark.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env bash +set -euo pipefail + +BOOKMARKS_FILE="$DOTFILES_REPO/bookmarks.txt" + +mkdir -p "$(dirname "$BOOKMARKS_FILE")" +touch "$BOOKMARKS_FILE" + +xdotool key --delay 50 ctrl+l ctrl+c Escape + +sleep 0.15 + +URL=$(xclip -selection clipboard -o) + +if [[ "$URL" =~ ^https?:// ]]; then + NAME=$(zenity --entry \ + --title="Add Bookmark" \ + --text="Enter a name for this bookmark:" \ + --entry-text="" 2>/dev/null) + + if [ -z "$NAME" ]; then + notify-send "Bookmark Cancelled" "No name was provided." + exit 0 + fi + + CLEAN_NAME=$(echo "$NAME" | tr '|' '-') + + if ! grep -q "|$URL$" "$BOOKMARKS_FILE"; then + echo "$CLEAN_NAME|$URL" >>"$BOOKMARKS_FILE" + notify-send "Bookmark Saved" "$CLEAN_NAME\n$URL" + else + notify-send "Bookmark" "This exact URL already exists!" + fi +else + notify-send "Bookmark Error" "Clipboard did not contain a valid URL." +fi diff --git a/bin/.bin/bluetooth.sh b/bin/.bin/bluetooth.sh new file mode 100755 index 0000000..5ae5281 --- /dev/null +++ b/bin/.bin/bluetooth.sh @@ -0,0 +1,140 @@ +#!/usr/bin/env bash +set -uo pipefail # Keep -e off so our self-healing logic can handle error codes safely + +# Define the Rofi menu layout. +declare -a order=( + "⚡ Power On Bluetooth" + "🛑 Power Off Bluetooth" + "🔌 Disconnect All Devices" + "---" + "Speaker" + "Earphones" + "Earphones Left" + "Living Room" +) + +# Map profiles to hardware MAC addresses. +declare -A devices +devices[Speaker]="A0:E9:DB:0E:43:79" +devices[Earphones]="98:52:3D:F2:6E:3E" +devices["Earphones Left"]="98:52:3D:F2:36:78" +devices["Living Room"]="42:46:9F:D0:2C:53" + +# Prompt User via Rofi. +MENU_OPTIONS=$(printf "%s\n" "${order[@]}") +SELECTION=$(echo "$MENU_OPTIONS" | rofi -dmenu -p "Bluetooth Menu:") + +# Exit gracefully if the user hits Escape. +if [ -z "$SELECTION" ] || [ "$SELECTION" = "---" ]; then + exit 0 +fi + +if [ "$SELECTION" = "⚡ Power On Bluetooth" ]; then + notify-send "BT" "Powering adapter on..." + bluetoothctl power on + exit 0 +fi + +if [ "$SELECTION" = "🛑 Power Off Bluetooth" ]; then + notify-send "BT" "Powering adapter off..." + bluetoothctl power off + exit 0 +fi + +if [ "$SELECTION" = "🔌 Disconnect All Devices" ]; then + notify-send "BT" "Clearing all active connections..." + for name in "${!devices[@]}"; do + bluetoothctl disconnect "${devices[$name]}" >/dev/null 2>&1 || true + done + notify-send "BT" "All devices disconnected." + exit 0 +fi + +if [ -z "${devices[$SELECTION]:-}" ]; then + notify-send "ERROR" "Invalid choice: $SELECTION" + exit 1 +fi + +TARGET_MAC="${devices[$SELECTION]}" + +# Ensure controller is actually powered up before trying to connect. +if ! bluetoothctl show | grep -q "Powered: yes"; then + notify-send "BT" "Waking up Bluetooth adapter..." + bluetoothctl power on + sleep 2 +fi + +# Force controller runtime options to accept incoming passthroughs. +bluetoothctl pairable on >/dev/null 2>&1 || true +bluetoothctl discoverable on >/dev/null 2>&1 || true + +# Disconnect existing targets to free up the system audio pipelines. +for name in "${!devices[@]}"; do + bluetoothctl disconnect "${devices[$name]}" >/dev/null 2>&1 || true +done + +# Query the machine's local hardware database cache. +DEVICE_CHECK=$(bluetoothctl info "$TARGET_MAC" 2>&1 || true) + +if echo "$DEVICE_CHECK" | grep -q "not available"; then + notify-send "BT: Provisioning" "Device missing from system cache. Probing airwaves..." + + # Run a targeted background scan pass to register device metadata. + bluetoothctl --timeout 5 scan on >/dev/null 2>&1 & + SCAN_PID=$! + sleep 4 + kill "$SCAN_PID" 2>/dev/null || true + wait "$SCAN_PID" 2>/dev/null || true + sleep 1 + + notify-send "BT: Provisioning" "Exchanging encryption keys..." + bluetoothctl pair "$TARGET_MAC" + bluetoothctl trust "$TARGET_MAC" +fi + +# Attempt targeted connection sequence. +notify-send "BT Switch" "Routing audio to $SELECTION..." +CONNECT_OUT=$(bluetoothctl connect "$TARGET_MAC" 2>&1 || true) +echo "$CONNECT_OUT" + +if echo "$CONNECT_OUT" | grep -q "Connection successful"; then + bluetoothctl trust "$TARGET_MAC" >/dev/null 2>&1 || true + + # WirePlumber Sinks Syncing Engine. + CLEAN_MAC="${TARGET_MAC//:/_}" + SINK_NAME=$(wpctl status | grep -o "bluez_output\.[^\ ]*${CLEAN_MAC}[^\ ]*" | head -n 1 || true) + + if [ ! -z "$SINK_NAME" ]; then + wpctl set-default "$SINK_NAME" + # Set a safe volumne just in case we connect to earphones. + wpctl set-volume "$SINK_NAME" 0.10 + fi + + notify-send "BT Switch" "$SELECTION connected successfully!" + +# Handle key synchronization issues seamlessly.... +elif echo "$CONNECT_OUT" | grep -q "br-connection-key-missing"; then + notify-send "BT Error" "Key mismatch! Purging and re-pairing..." + + bluetoothctl remove "$TARGET_MAC" >/dev/null 2>&1 || true + sleep 1 + + bluetoothctl --timeout 5 scan on >/dev/null 2>&1 & + SCAN_PID=$! + sleep 4 + kill "$SCAN_PID" 2>/dev/null || true + wait "$SCAN_PID" 2>/dev/null || true + sleep 1 + + notify-send "BT Recovery" "Put device in pairing mode!" + bluetoothctl pair "$TARGET_MAC" + bluetoothctl trust "$TARGET_MAC" + + if bluetoothctl connect "$TARGET_MAC"; then + notify-send "BT Switch" "$SELECTION repaired and connected!" + else + notify-send "BT ERROR" "Repair fallback routing failed." + fi +else + notify-send "BT ERROR" "Failed to link with $SELECTION. Check pairing state or other devices." +fi diff --git a/bin/.bin/new-episode b/bin/.bin/new-episode deleted file mode 100755 index c8a2305..0000000 --- a/bin/.bin/new-episode +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash - -if [ -z "$1" ]; then - echo "Usage: new-episode <number> <name>" - exit 1 -fi - -EP_NUM=$(printf "%03d" "$1") - -# Capture the Name (Shift the first arg so we can join the rest). -shift -RAW_NAME="${*:-untitled}" - -# Create the Title (Capitalize first letter of every word). -# Using a simple sed regex to capitalize words. -EP_TITLE=$(echo "$RAW_NAME" | sed 's/\b./\U&/g') - -# Create the Filename Slug (Lower case and replace spaces with hyphens) -# tr '[:upper:]' '[:lower:]' handles the casing -# tr ' ' '-' handles the spaces -SLUG=$(echo "$RAW_NAME" | tr '[:upper:]' '[:lower:]' | tr ' ' '-') -FILENAME="episode-${EP_NUM}-${SLUG}.php" - -# Generate the file -cat <<EOF > "$FILENAME" -<?php - -declare(strict_types=1); - -/** - * Episode ${EP_NUM}: ${EP_TITLE} - * The Coding Brummie Fundamental PHP Series - */ - -EOF diff --git a/bin/.bin/open-bookmark.sh b/bin/.bin/open-bookmark.sh new file mode 100755 index 0000000..67e724b --- /dev/null +++ b/bin/.bin/open-bookmark.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash +set -euo pipefail + +BOOKMARKS_FILE="$DOTFILES_REPO/bookmarks.txt" + +if [ ! -f "$BOOKMARKS_FILE" ] || [ ! -s "$BOOKMARKS_FILE" ]; then + notify-send "Bookmarks" "Your bookmarks file is empty or missing." + exit 1 +fi + +SELECTION=$(cut -d'|' -f1 "$BOOKMARKS_FILE" | rofi -dmenu -p "Go To:") + +if [ -z "$SELECTION" ]; then + exit 0 +fi + +URL=$(grep "^$SELECTION|" "$BOOKMARKS_FILE" | head -n 1 | cut -d'|' -f2) + +if [ -n "$URL" ]; then + firefox "$URL" & +else + notify-send "Error" "Could not resolve the URL for: $SELECTION" +fi diff --git a/bin/.bin/power.sh b/bin/.bin/power.sh new file mode 100755 index 0000000..e17bae3 --- /dev/null +++ b/bin/.bin/power.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash +set -euo pipefail + +declare -A actions +actions[Reboot]="systemctl reboot" +actions[Shutdown]="systemctl poweroff" + +SELECTION=$(printf "Reboot\nShutdown" | rofi -dmenu -p "") + +if [ -z "$SELECTION" ]; then + exit 0 +fi + +if [ -z "${actions[$SELECTION]:-}" ]; then + notify-send "ERROR" "Invalid choice: $SELECTION" + exit 1 +fi + +notify-send "System" "Initiating $SELECTION..." +sleep 0.5 + +${actions[$SELECTION]} diff --git a/bookmarks.txt b/bookmarks.txt new file mode 100644 index 0000000..ae9e13a --- /dev/null +++ b/bookmarks.txt @@ -0,0 +1,7 @@ +gemini|https://gemini.google.com/app +davidtsadler.com|https://davidtsadler.com/ +jellyfin|http://192.168.1.11:8096/web +nix package|https://search.nixos.org/packages +vasm|http://sun.hasenbraten.de/vasm/ +vlink|http://sun.hasenbraten.de/vlink/index.php?view=main +motion canvas|https://motion-canvas.io/ diff --git a/dunst/.config/dunst/dunstrc b/dunst/.config/dunst/dunstrc new file mode 100644 index 0000000..786d035 --- /dev/null +++ b/dunst/.config/dunst/dunstrc @@ -0,0 +1,56 @@ +[global] + ### Display Settings ### + monitor = 0 + follow = mouse + width = 300 + height = 150 + origin = top-right + offset = 10x50 + scale = 0 + notification_limit = 5 + + ### Progress Bar ### + progress_bar = true + progress_bar_height = 10 + progress_bar_frame_width = 1 + progress_bar_min_width = 150 + progress_bar_max_width = 300 + + ### Styling ### + frame_width = 2 + separator_height = 2 + padding = 8 + horizontal_padding = 8 + text_icon_padding = 0 + + # Official Nord Accent Colors + frame_color = "#88c0d0" # Nord8 (Ice Blue Frame) + separator_color = "#4c566a" # Nord3 + + ### Text Properties ### + font = JetBrains Mono 10 + line_height = 0 + format = "<b>%s</b>\n%b" + alignment = left + show_age_threshold = 60 + ellipsize = middle + ignore_newline = no + stack_duplicates = true + hide_duplicate_count = false + +[urgency_low] + # Nord Night backgrounds with bright snow text + background = "#2e3440" # Nord0 + foreground = "#d8dee9" # Nord4 + timeout = 4 + +[urgency_normal] + background = "#3b4252" # Nord1 + foreground = "#eceff4" # Nord6 + timeout = 6 + +[urgency_critical] + background = "#bf616a" # Nord11 (Aurora Red for warnings) + foreground = "#eceff4" # Nord6 + frame_color = "#bf616a" + timeout = 0 diff --git a/git/.config/git/gitignore b/git/.config/git/gitignore index d992b6f..51f1a72 100644 --- a/git/.config/git/gitignore +++ b/git/.config/git/gitignore @@ -1 +1,2 @@ Session.vim +result diff --git a/gtk-3.0/.config/gtk-3.0/settings.ini b/gtk-3.0/.config/gtk-3.0/settings.ini new file mode 100644 index 0000000..5b4a49a --- /dev/null +++ b/gtk-3.0/.config/gtk-3.0/settings.ini @@ -0,0 +1,16 @@ +[Settings] +gtk-theme-name = Nordic +gtk-icon-theme-name = Nordzy +gtk-font-name = JetBrains Mono 11 +gtk-cursor-theme-name = Adwaita +gtk-cursor-theme-size = 24 +gtk-toolbar-style = GTK_TOOLBAR_BOTH_TEXT +gtk-toolbar-icon-size = GTK_ICON_SIZE_LARGE_TOOLBAR +gtk-button-images = 1 +gtk-menu-images = 1 +gtk-enable-event-sounds = 0 +gtk-enable-input-feedback = 0 +gtk-xft-antialias = 1 +gtk-xft-hinting = 1 +gtk-xft-hintstyle = hintslight +gtk-xft-rgba = rgb @@ -6,10 +6,14 @@ dotfiles=( alacritty bash bat + bin + dunst git + gtk-3.0 lazygit nvim oxwm + rofi ssh starship tmux diff --git a/nvim/.config/nvim/lsp/bash_language_server.lua b/nvim/.config/nvim/lsp/bash_language_server.lua new file mode 100644 index 0000000..d7c9ef1 --- /dev/null +++ b/nvim/.config/nvim/lsp/bash_language_server.lua @@ -0,0 +1,5 @@ +---@type vim.lsp.Config +return { + cmd = { "bash-language-server", "start" }, + filetypes = { "bash", "sh" }, +} diff --git a/nvim/.config/nvim/lsp/vtsls.lua b/nvim/.config/nvim/lsp/vtsls.lua new file mode 100644 index 0000000..544f942 --- /dev/null +++ b/nvim/.config/nvim/lsp/vtsls.lua @@ -0,0 +1,39 @@ +-- https://raw.githubusercontent.com/neovim/nvim-lspconfig/refs/heads/master/lsp/vtsls.lua +---@type vim.lsp.Config +return { + cmd = { 'vtsls', '--stdio' }, + init_options = { + hostInfo = 'neovim', + }, + filetypes = { + 'javascript', + 'javascriptreact', + 'typescript', + 'typescriptreact', + }, + root_dir = function(bufnr, on_dir) + -- The project root is where the LSP can be started from + -- As stated in the documentation above, this LSP supports monorepos and simple projects. + -- We select then from the project root, which is identified by the presence of a package + -- manager lock file. + local root_markers = { 'package-lock.json', 'yarn.lock', 'pnpm-lock.yaml', 'bun.lockb', 'bun.lock' } + -- Give the root markers equal priority by wrapping them in a table + root_markers = vim.fn.has('nvim-0.11.3') == 1 and { root_markers, { '.git' } } + or vim.list_extend(root_markers, { '.git' }) + -- exclude deno + local deno_root = vim.fs.root(bufnr, { 'deno.json', 'deno.jsonc' }) + local deno_lock_root = vim.fs.root(bufnr, { 'deno.lock' }) + local project_root = vim.fs.root(bufnr, root_markers) + if deno_lock_root and (not project_root or #deno_lock_root > #project_root) then + -- deno lock is closer than package manager lock, abort + return + end + if deno_root and (not project_root or #deno_root >= #project_root) then + -- deno config is closer than or equal to package manager lock, abort + return + end + -- project is standard TS, not deno + -- We fallback to the current working directory if no project root is found + on_dir(project_root or vim.fn.getcwd()) + end, +} diff --git a/nvim/.config/nvim/lua/config/lsp.lua b/nvim/.config/nvim/lua/config/lsp.lua index be37e27..2ddeb6a 100644 --- a/nvim/.config/nvim/lua/config/lsp.lua +++ b/nvim/.config/nvim/lua/config/lsp.lua @@ -1,8 +1,10 @@ vim.lsp.enable({ + "bash_language_server", "intelephense", "lua_ls", "marksman", "nixd", + "vtsls", }) vim.diagnostic.config({ diff --git a/nvim/.config/nvim/lua/plugins/conform.lua b/nvim/.config/nvim/lua/plugins/conform.lua index 31d0302..94bdb06 100644 --- a/nvim/.config/nvim/lua/plugins/conform.lua +++ b/nvim/.config/nvim/lua/plugins/conform.lua @@ -6,10 +6,25 @@ require("conform").setup({ markdown = { "prettier" }, nix = { "nixfmt" }, php = { "php_cs_fixer" }, + bash = { "shfmt" }, + sh = { "shfmt" }, + javascript = { "biome", "prettier", stop_after_first = true }, + typescript = { "biome", "prettier", stop_after_first = true }, + javascriptreact = { "biome", "prettier", stop_after_first = true }, + typescriptreact = { "biome", "prettier", stop_after_first = true }, }, formatters = { php_cs_fixer = { command = "php-cs-fixer", }, + -- Biome is great because it doesn't require a node_modules folder to work. + biome = { + command = "biome", + args = { "format", "--stdin-file-path", "$FILENAME" }, + }, + -- Force shfmt to always use the bash parser variant. + shfmt = { + prepend_args = { "-ln", "bash" }, + }, }, }) diff --git a/nvim/.config/nvim/lua/plugins/nvim-lint.lua b/nvim/.config/nvim/lua/plugins/nvim-lint.lua index 7129dab..9df79bf 100644 --- a/nvim/.config/nvim/lua/plugins/nvim-lint.lua +++ b/nvim/.config/nvim/lua/plugins/nvim-lint.lua @@ -5,4 +5,6 @@ require("lint").linters_by_ft = { markdown = { "markdownlint-cli2" }, nix = { "statix" }, php = { "phpcs" }, + bash = { "shellcheck" }, + sh = { "shellcheck" }, } diff --git a/nvim/.config/nvim/lua/plugins/nvim-treesitter.lua b/nvim/.config/nvim/lua/plugins/nvim-treesitter.lua index acb3fbd..e646c1b 100644 --- a/nvim/.config/nvim/lua/plugins/nvim-treesitter.lua +++ b/nvim/.config/nvim/lua/plugins/nvim-treesitter.lua @@ -7,10 +7,13 @@ require("nvim-treesitter").install({ "gitattributes", "gitcommit", "gitignore", + "javascript", "json", "lua", "markdown", "markdown_inline", "nix", "php", + "tsx", + "typescript", }) diff --git a/oxwm/.config/oxwm/config.lua b/oxwm/.config/oxwm/config.lua index d899890..eda0688 100644 --- a/oxwm/.config/oxwm/config.lua +++ b/oxwm/.config/oxwm/config.lua @@ -138,7 +138,10 @@ oxwm.gaps.set_outer(0, 0) -- Examples (uncomment to use): -- oxwm.rule.add({ instance = "gimp", floating = true }) oxwm.rule.add({ class = "firefox", title = "Library", floating = true }) +oxwm.rule.add({ class = "firefox", role = "GtkFileChooserDialog", floating = true }) oxwm.rule.add({ class = "firefox", tag = 2 }) +oxwm.rule.add({ class = "zenity", floating = true }) +oxwm.rule.add({ class = "amiberry", tag = 3 }) -- oxwm.rule.add({ instance = "mpv", floating = true }) -- To find window properties, use xprop and click on the window @@ -177,8 +180,8 @@ oxwm.bar.set_scheme_selected(colors.cyan, colors.bg, colors.purple) -- Basic window management oxwm.key.bind({ modkey }, "Return", oxwm.spawn_terminal()) --- Launch Dmenu -oxwm.key.bind({ modkey }, "D", oxwm.spawn({ "sh", "-c", "dmenu_run -l 10" })) +-- Launch Rofi +oxwm.key.bind({ modkey }, "D", oxwm.spawn({ "sh", "-c", "rofi -show run" })) -- Copy screenshot to clipboard -- oxwm.key.bind({ modkey }, "S", oxwm.spawn({ "sh", "-c", "maim -s | xclip -selection clipboard -t image/png" })) oxwm.key.bind({ modkey }, "Q", oxwm.client.kill()) @@ -274,9 +277,24 @@ oxwm.key.bind({ modkey, "Control", "Shift" }, "9", oxwm.tag.toggletag(8)) -- Format: {{modifiers}, key1}, {{modifiers}, key2}, ... -- Example: Press Mod4+Space, then release and press T to spawn a terminal without auto starting anything. oxwm.key.chord({ + { { modkey }, "b" }, + { {}, "a" } +}, oxwm.spawn({ "add-bookmark.sh" })) + +oxwm.key.chord({ + { { modkey }, "b" }, + { {}, "o" } +}, oxwm.spawn({ "open-bookmark.sh" })) + +oxwm.key.chord({ + { { modkey }, "Space" }, + { {}, "p" } +}, oxwm.spawn({ "power.sh" })) + +oxwm.key.chord({ { { modkey }, "Space" }, - { {}, "T" } -}, oxwm.spawn({ "alacritty", "-e", "bash" })) + { {}, "b" } +}, oxwm.spawn({ "bluetooth.sh" })) ------------------------------------------------------------------------------- -- Autostart @@ -286,7 +304,7 @@ oxwm.key.chord({ -- Keycode 108 was found using the exv command and pressing the AltGr key in the popup window. oxwm.autostart("xmodmap -e 'keycode 108 = Super_R' -e 'add mod4 = Super_R'") +oxwm.autostart("dunst") -- oxwm.autostart("picom") -- oxwm.autostart("feh --bg-scale ~/wallpaper.jpg") --- oxwm.autostart("dunst") -- oxwm.autostart("nm-applet") diff --git a/rofi/.config/rofi/config.rasi b/rofi/.config/rofi/config.rasi new file mode 100644 index 0000000..5d67754 --- /dev/null +++ b/rofi/.config/rofi/config.rasi @@ -0,0 +1,3 @@ +configuration { +} +@theme "~/.config/rofi/themes/nord.rasi" diff --git a/rofi/.config/rofi/themes/nord.rasi b/rofi/.config/rofi/themes/nord.rasi new file mode 100644 index 0000000..53161ad --- /dev/null +++ b/rofi/.config/rofi/themes/nord.rasi @@ -0,0 +1,75 @@ +* { + /* Nord Color Palette Blueprint */ + nord0: #2e3440; /* Polar Night (Base Background) */ + nord1: #3b4252; /* Polar Night (Elevated Background) */ + nord2: #434c5e; /* Polar Night (Selection Element) */ + nord3: #4c566a; /* Polar Night (Comments/Muted Text) */ + nord4: #d8dee9; /* Snow Storm (Primary Text) */ + nord5: #e5e9f0; /* Snow Storm (Bright Text) */ + nord6: #eceff4; /* Snow Storm (Blinding Text) */ + nord7: #8fbcbb; /* Frost (Teal Accent) */ + nord8: #88c0d0; /* Frost (Ice Blue Highlight) */ + nord9: #81a1c1; /* Frost (Flat Blue) */ + nord10: #5e81ac; /* Frost (Deep Blue) */ + + background-color: transparent; + text-color: @nord4; + accent-color: @nord8; + + font: "JetBrains Mono 12"; +} + +window { + background-color: @nord0; + border-color: @accent-color; + border: 2px; + width: 550px; + location: center; + anchor: center; + padding: 14px; +} + +inputbar { + spacing: 12px; + padding: 0px 0px 10px 0px; + border: 0px 0px 1px 0px; + border-color: @nord3; + children: [ prompt, entry ]; +} + +prompt { + text-color: @accent-color; + font: "JetBrains Mono Bold 12"; +} + +entry { + text-color: @nord5; + placeholder: "Search..."; + placeholder-color: @nord3; +} + +listview { + lines: 12; + columns: 1; + fixed-height: false; + spacing: 4px; + padding: 8px 0px 0px 0px; +} + +element { + padding: 6px 10px; + border-radius: 4px; +} + +element normal text { + text-color: @nord4; +} + +element selected { + background-color: @nord2; /* Highlight bar color */ +} + +element selected text { + text-color: @nord6; /* Text inside the highlight bar */ + font: "JetBrains Mono Bold 12"; +} |
