From d7acd251b4685875981276d240660368e8457ec6 Mon Sep 17 00:00:00 2001 From: Breadway Date: Tue, 16 Jun 2026 10:31:18 +0800 Subject: [PATCH] Polish BOS: dark theme, shell QoL, icons, media, clipboard - Global dark theme: gnome-themes-extra (GTK3 Adwaita-dark), qt5ct/qt6ct with Fusion dark skel config, QT_QPA_PLATFORMTHEME=qt5ct env - Icons/cursor: papirus-icon-theme (Papirus-Dark) + bibata-cursor-theme (Bibata-Modern-Ice), set via gsettings autostart + GTK settings.ini + env - gnome-keyring: credential storage for browsers and apps - gvfs + gvfs-mtp: nautilus trash, phone access, network shares - zsh: default user shell (users.conf userShell=/bin/zsh) + skel .zshrc with eza/bat/fzf/zoxide aliases, git prompt, fzf history search - Shell QoL packages: eza, bat, fzf, zoxide - Media: gst-plugins-good/bad/ugly, pavucontrol - cliphist: clipboard history daemon (autostart) + SUPER+SHIFT+V bind - Fonts: noto-fonts-cjk, ttf-jetbrains-mono-nerd --- iso/airootfs/etc/calamares/modules/users.conf | 1 + .../etc/skel/.config/gtk-3.0/settings.ini | 4 ++ .../etc/skel/.config/gtk-4.0/settings.ini | 4 ++ .../etc/skel/.config/hypr/hyprland.lua | 11 +++- .../etc/skel/.config/qt5ct/qt5ct.conf | 25 +++++++ .../etc/skel/.config/qt6ct/qt6ct.conf | 25 +++++++ iso/airootfs/etc/skel/.zshrc | 65 +++++++++++++++++++ iso/packages.x86_64 | 46 ++++++++++++- 8 files changed, 177 insertions(+), 4 deletions(-) create mode 100644 iso/airootfs/etc/skel/.config/qt5ct/qt5ct.conf create mode 100644 iso/airootfs/etc/skel/.config/qt6ct/qt6ct.conf create mode 100644 iso/airootfs/etc/skel/.zshrc diff --git a/iso/airootfs/etc/calamares/modules/users.conf b/iso/airootfs/etc/calamares/modules/users.conf index 8f2d422..566fff2 100644 --- a/iso/airootfs/etc/calamares/modules/users.conf +++ b/iso/airootfs/etc/calamares/modules/users.conf @@ -38,3 +38,4 @@ passwordRequirements: - minlen=6 allowWeakPasswords: false +userShell: /bin/zsh diff --git a/iso/airootfs/etc/skel/.config/gtk-3.0/settings.ini b/iso/airootfs/etc/skel/.config/gtk-3.0/settings.ini index 429393f..b0bff85 100644 --- a/iso/airootfs/etc/skel/.config/gtk-3.0/settings.ini +++ b/iso/airootfs/etc/skel/.config/gtk-3.0/settings.ini @@ -1,3 +1,7 @@ [Settings] gtk-application-prefer-dark-theme=1 gtk-theme-name=Adwaita-dark +gtk-icon-theme-name=Papirus-Dark +gtk-cursor-theme-name=Bibata-Modern-Ice +gtk-cursor-theme-size=24 +gtk-font-name=Noto Sans 11 diff --git a/iso/airootfs/etc/skel/.config/gtk-4.0/settings.ini b/iso/airootfs/etc/skel/.config/gtk-4.0/settings.ini index 429393f..b0bff85 100644 --- a/iso/airootfs/etc/skel/.config/gtk-4.0/settings.ini +++ b/iso/airootfs/etc/skel/.config/gtk-4.0/settings.ini @@ -1,3 +1,7 @@ [Settings] gtk-application-prefer-dark-theme=1 gtk-theme-name=Adwaita-dark +gtk-icon-theme-name=Papirus-Dark +gtk-cursor-theme-name=Bibata-Modern-Ice +gtk-cursor-theme-size=24 +gtk-font-name=Noto Sans 11 diff --git a/iso/airootfs/etc/skel/.config/hypr/hyprland.lua b/iso/airootfs/etc/skel/.config/hypr/hyprland.lua index 36a4657..c1833aa 100644 --- a/iso/airootfs/etc/skel/.config/hypr/hyprland.lua +++ b/iso/airootfs/etc/skel/.config/hypr/hyprland.lua @@ -62,8 +62,10 @@ hl.config({ -- --------------------------------------------------------------------------- hl.env("XCURSOR_SIZE", "24") hl.env("HYPRCURSOR_SIZE", "24") +hl.env("XCURSOR_THEME", "Bibata-Modern-Ice") hl.env("MOZ_ENABLE_WAYLAND", "1") hl.env("QT_QPA_PLATFORM", "wayland;xcb") +hl.env("QT_QPA_PLATFORMTHEME", "qt5ct") hl.env("QT_WAYLAND_DISABLE_WINDOWDECORATION", "1") hl.env("SDL_VIDEODRIVER", "wayland") hl.env("ELECTRON_OZONE_PLATFORM_HINT", "auto") @@ -86,6 +88,7 @@ hl.bind(mod .. " + M", hl.dsp.exec_cmd("breadman")) hl.bind(mod .. " + L", hl.dsp.exec_cmd("loginctl lock-session")) hl.bind(mod .. " + F", hl.dsp.window.fullscreen({ action = "toggle" })) hl.bind(mod .. " + V", hl.dsp.window.float({ action = "toggle" })) +hl.bind(mod .. " + SHIFT + V", hl.dsp.exec_cmd([[bash -c 'cliphist list | fzf --reverse --prompt="Clipboard > " | cliphist decode | wl-copy']])) hl.bind(mod .. " + T", hl.dsp.layout("togglesplit")) hl.bind(mod .. " + Tab", hl.dsp.focus({ urgent_or_last = true })) hl.bind(mod .. " + N", hl.dsp.exit()) @@ -149,10 +152,14 @@ hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("playerctl play-pause"), -- --------------------------------------------------------------------------- hl.on("hyprland.start", function() local startup = { - -- Prefer dark for GTK4/libadwaita apps (GTK3 uses settings.ini); without - -- this nautilus/breadbox render in light mode. + -- Global dark theme: GTK4/libadwaita + GTK3 theme + icon + cursor. "gsettings set org.gnome.desktop.interface color-scheme prefer-dark", "gsettings set org.gnome.desktop.interface gtk-theme Adwaita-dark", + "gsettings set org.gnome.desktop.interface icon-theme Papirus-Dark", + "gsettings set org.gnome.desktop.interface cursor-theme Bibata-Modern-Ice", + "gsettings set org.gnome.desktop.interface cursor-size 24", + -- Clipboard history daemon (feeds SUPER+V history picker via wl-paste). + "wl-paste --type text --watch cliphist store", "/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1", "awww-daemon", -- set the default wallpaper once the daemon is up (retry until ready) diff --git a/iso/airootfs/etc/skel/.config/qt5ct/qt5ct.conf b/iso/airootfs/etc/skel/.config/qt5ct/qt5ct.conf new file mode 100644 index 0000000..003be3a --- /dev/null +++ b/iso/airootfs/etc/skel/.config/qt5ct/qt5ct.conf @@ -0,0 +1,25 @@ +[Appearance] +style=Fusion +color_scheme_path=/usr/share/qt5ct/colors/darker.conf +custom_palette=true +standard_dialogs=default +icon_theme=Papirus-Dark + +[Fonts] +fixed=@Variant(\0\0\0@\0\0\0\x12JetBrains Mono\0\0\0\0\0\0\0\0\0\0\0\0\0\xa0\0\x64\xff\xff\xff\xff) +general=@Variant(\0\0\0@\0\0\0\x16Noto Sans\0\0\0\0\0\0\0\0\0\0\0\0\x11\0\x64\xff\xff\xff\xff) + +[Interface] +activate_item_on_single_click=1 +buttonbox_layout=0 +cursor_flash_time=1000 +dialog_buttons_have_icons=1 +double_click_interval=400 +gui_effects=@Invalid() +keyboard_scheme=2 +menus_have_icons=true +show_shortcuts_in_context_menus=true +stylesheets=@Invalid() +toolbutton_style=4 +underline_shortcut=1 +wheel_scroll_lines=3 diff --git a/iso/airootfs/etc/skel/.config/qt6ct/qt6ct.conf b/iso/airootfs/etc/skel/.config/qt6ct/qt6ct.conf new file mode 100644 index 0000000..650258d --- /dev/null +++ b/iso/airootfs/etc/skel/.config/qt6ct/qt6ct.conf @@ -0,0 +1,25 @@ +[Appearance] +style=Fusion +color_scheme_path=/usr/share/qt6ct/colors/darker.conf +custom_palette=true +standard_dialogs=default +icon_theme=Papirus-Dark + +[Fonts] +fixed=@Variant(\0\0\0@\0\0\0\x12JetBrains Mono\0\0\0\0\0\0\0\0\0\0\0\0\0\xa0\0\x64\xff\xff\xff\xff) +general=@Variant(\0\0\0@\0\0\0\x16Noto Sans\0\0\0\0\0\0\0\0\0\0\0\0\x11\0\x64\xff\xff\xff\xff) + +[Interface] +activate_item_on_single_click=1 +buttonbox_layout=0 +cursor_flash_time=1000 +dialog_buttons_have_icons=1 +double_click_interval=400 +gui_effects=@Invalid() +keyboard_scheme=2 +menus_have_icons=true +show_shortcuts_in_context_menus=true +stylesheets=@Invalid() +toolbutton_style=4 +underline_shortcut=1 +wheel_scroll_lines=3 diff --git a/iso/airootfs/etc/skel/.zshrc b/iso/airootfs/etc/skel/.zshrc new file mode 100644 index 0000000..7396a53 --- /dev/null +++ b/iso/airootfs/etc/skel/.zshrc @@ -0,0 +1,65 @@ +# BOS default zsh config — quality-of-life defaults, easy to extend. + +# History +HISTFILE=~/.zsh_history +HISTSIZE=10000 +SAVEHIST=10000 +setopt HIST_IGNORE_DUPS HIST_IGNORE_SPACE SHARE_HISTORY + +# Completion +autoload -Uz compinit && compinit +zstyle ':completion:*' menu select +zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}' + +# Key bindings (emacs style + common extras) +bindkey -e +bindkey '^[[A' history-search-backward +bindkey '^[[B' history-search-forward + +# fzf — fuzzy history search on Ctrl+R, fuzzy file find on Ctrl+T +if command -v fzf &>/dev/null; then + source /usr/share/fzf/key-bindings.zsh 2>/dev/null || true + source /usr/share/fzf/completion.zsh 2>/dev/null || true + export FZF_DEFAULT_OPTS='--height 40% --layout=reverse --border' +fi + +# zoxide — smarter cd (type z instead of cd) +if command -v zoxide &>/dev/null; then + eval "$(zoxide init zsh)" +fi + +# Modern replacements with fallbacks +if command -v eza &>/dev/null; then + alias ls='eza --icons --group-directories-first' + alias ll='eza -la --icons --group-directories-first --git' + alias lt='eza --tree --icons --level=2' +else + alias ls='ls --color=auto' + alias ll='ls -la' +fi + +if command -v bat &>/dev/null; then + alias cat='bat --style=plain --paging=never' +fi + +# General aliases +alias clr='clear' +alias ..='cd ..' +alias ...='cd ../..' +alias mkdir='mkdir -p' +alias cp='cp -i' +alias mv='mv -i' +alias df='df -h' +alias free='free -h' +alias grep='grep --color=auto' +alias ip='ip --color=auto' + +# bakery / bread +alias update='bakery update' + +# Prompt — simple and fast (no starship dep) +autoload -Uz vcs_info +precmd() { vcs_info } +zstyle ':vcs_info:git:*' formats ' (%b)' +setopt PROMPT_SUBST +PROMPT='%F{cyan}%~%f%F{yellow}${vcs_info_msg_0_}%f %(?.%F{green}.%F{red})❯%f ' diff --git a/iso/packages.x86_64 b/iso/packages.x86_64 index 637ca06..20aa6a0 100644 --- a/iso/packages.x86_64 +++ b/iso/packages.x86_64 @@ -82,6 +82,12 @@ gtk4 gtk4-layer-shell librsvg libpulse +# GTK3 dark theme (Adwaita-dark); without this package the gtk-theme-name in +# skel settings.ini silently falls back to the light theme for GTK3 apps. +gnome-themes-extra +# Credential/keyring storage — browsers, SSH agents, and most apps persist +# passwords here; without it every session loses saved logins. +gnome-keyring # Display (wlroots is bundled with Hyprland; don't list separately) wayland @@ -89,14 +95,21 @@ wayland-protocols # Fonts noto-fonts +noto-fonts-cjk noto-fonts-emoji ttf-jetbrains-mono +# Nerd font variant — icons in terminal tools (eza --icons, fastfetch, yazi) +ttf-jetbrains-mono-nerd # Terminal kitty # File manager nautilus +# gvfs: virtual filesystem layer for nautilus (trash, network places, removable +# media). gvfs-mtp adds Android/MTP device support (phones, tablets via USB). +gvfs +gvfs-mtp # Web browser (served from the [Breadway] repo; AUR zen-browser-bin republished # there so the ISO build can pull it via pacman). mailcap satisfies zen's # mime-types dependency explicitly. @@ -129,12 +142,22 @@ slurp # Clipboard (Wayland copy/paste; also clipboard screenshots) and media keys. wl-clipboard playerctl +# Clipboard history daemon (stores wl-clipboard events; breadbox bind replays them). +cliphist # Wallpaper daemon + pywal (drives the bread* colour palette from the wallpaper). awww python-pywal # Boot splash (BOS logo + spinner instead of kernel text). plymouth +# Media codecs — GStreamer plugins for video thumbnails in nautilus, browser +# media, and general playback. bad/ugly add patent-encumbered formats (H.264 etc). +gst-plugins-good +gst-plugins-bad +gst-plugins-ugly +# GUI audio mixer — useful when output device needs manual switching. +pavucontrol + # Utilities sudo git @@ -149,12 +172,17 @@ man-pages less # Base CLI tools every install should have. +# Shell +zsh # Editors nano micro vim -# Shell UX -bash-completion +# Shell QoL — modern replacements shipped with skel aliases set up +eza +bat +fzf +zoxide # System / hardware inspection htop usbutils @@ -175,5 +203,19 @@ openssh # Mirror management (refresh /etc/pacman.d/mirrorlist for the user's location) reflector +# Icon and cursor themes +# Papirus-Dark: cohesive icon set used as the BOS default (set via gsettings in +# hyprland.lua autostart and in skel gtk-3.0/settings.ini). +papirus-icon-theme +# Bibata-Modern-Ice: clean dark cursor theme set via XCURSOR_THEME env in +# hyprland.lua and in skel gtk-3.0/settings.ini. +bibata-cursor-theme + +# Qt dark theme — makes Qt5/Qt6 apps (VLC, pavucontrol, etc.) respect the dark +# palette. qt5ct/qt6ct are configured via skel to use Fusion style in dark mode; +# QT_QPA_PLATFORMTHEME=qt5ct is set in hyprland.lua env. +qt5ct +qt6ct + # Dev tools (for bos-settings standalone install) rustup