Basic rice set up. Still need to add a way to reiably update the package lists and i need a launcher.

This commit is contained in:
Jurn Wubben 2025-10-28 17:49:16 +01:00
commit 3e89f350a6
107 changed files with 7553 additions and 0 deletions

28
.chezmoidata.jsonc Normal file
View file

@ -0,0 +1,28 @@
{
"colors": {
"base00": "303446",
"base01": "292c3c",
"base02": "414559",
"base03": "51576d",
"base04": "626880",
"base05": "c6d0f5",
"base06": "f2d5cf",
"base07": "babbf1",
"base08": "e78284",
"base09": "ef9f76",
"base0A": "e5c890",
"base0B": "a6d189",
"base0C": "81c8be",
"base0D": "8caaee",
"base0E": "ca9ee6",
"base0F": "eebebe",
"base10": "292c3c",
"base11": "232634",
"base12": "ea999c",
"base13": "f2d5cf",
"base14": "a6d189",
"base15": "99d1db",
"base16": "85c1dc",
"base17": "f4b8e4"
}
}

12
.chezmoiexternal.toml Normal file
View file

@ -0,0 +1,12 @@
[".mozilla/firefox/JSW.default-release/chrome/firefox-gnome-theme"]
type = "archive"
url = "https://github.com/rafaelmardojai/firefox-gnome-theme/archive/refs/heads/master.zip"
refreshPeriod = "168h"
[".local/share/icons/"] # Doesn't really require updating
type = "archive"
url = "https://github.com/ful1e5/Bibata_Cursor/releases/download/v2.0.7/Bibata-Modern-Ice.tar.xz"
[".local/share/themes/"] # Manually update
type = "archive"
url = "https://github.com/lassekongo83/adw-gtk3/releases/download/v6.4/adw-gtk3v6.4.tar.xz"

BIN
Pictures/profile.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 681 B

BIN
Pictures/wallpaper.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 MiB

19
dot_gtkrc-2.0 Normal file
View file

@ -0,0 +1,19 @@
# DO NOT EDIT! This file will be overwritten by nwg-look.
# Any customization should be done in ~/.gtkrc-2.0.mine instead.
include "/home/jsw/.gtkrc-2.0.mine"
gtk-theme-name="adw-gtk3"
gtk-icon-theme-name="Adwaita"
gtk-font-name="Adwaita Sans 11"
gtk-cursor-theme-name="Bibata-Modern-Ice"
gtk-cursor-theme-size=24
gtk-toolbar-style=GTK_TOOLBAR_ICONS
gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR
gtk-button-images=0
gtk-menu-images=0
gtk-enable-event-sounds=1
gtk-enable-input-feedback-sounds=0
gtk-xft-antialias=1
gtk-xft-hinting=1
gtk-xft-hintstyle="hintslight"
gtk-xft-rgba="rgb"

View file

@ -0,0 +1,88 @@
@define-color accent_color #{{.colors.base0D}};
@define-color accent_bg_color #{{.colors.base0D}};
@define-color accent_fg_color #{{.colors.base00}};
@define-color destructive_color #{{.colors.base08}};
@define-color destructive_bg_color #{{.colors.base08}};
@define-color destructive_fg_color #{{.colors.base00}};
@define-color success_color #{{.colors.base0B}};
@define-color success_bg_color #{{.colors.base0B}};
@define-color success_fg_color #{{.colors.base00}};
@define-color warning_color #{{.colors.base0E}};
@define-color warning_bg_color #{{.colors.base0E}};
@define-color warning_fg_color #{{.colors.base00}};
@define-color error_color #{{.colors.base08}};
@define-color error_bg_color #{{.colors.base08}};
@define-color error_fg_color #{{.colors.base00}};
@define-color window_bg_color #{{.colors.base00}};
@define-color window_fg_color #{{.colors.base05}};
@define-color view_bg_color #{{.colors.base00}};
@define-color view_fg_color #{{.colors.base05}};
@define-color headerbar_bg_color #{{.colors.base01}};
@define-color headerbar_fg_color #{{.colors.base05}};
{{/*@define-color headerbar_border_color rgba({{substr 0 2 .colors.base01}}, {{substr 2 4 .colors.base01}}, {{substr 4 6 .colors.base01}}, 0.7);*/}}
@define-color headerbar_backdrop_color @window_bg_color;
@define-color headerbar_shade_color rgba(0, 0, 0, 0.07);
@define-color headerbar_darker_shade_color rgba(0, 0, 0, 0.07);
@define-color sidebar_bg_color #{{.colors.base01}};
@define-color sidebar_fg_color #{{.colors.base05}};
@define-color sidebar_backdrop_color @window_bg_color;
@define-color sidebar_shade_color rgba(0, 0, 0, 0.07);
@define-color secondary_sidebar_bg_color @sidebar_bg_color;
@define-color secondary_sidebar_fg_color @sidebar_fg_color;
@define-color secondary_sidebar_backdrop_color @sidebar_backdrop_color;
@define-color secondary_sidebar_shade_color @sidebar_shade_color;
@define-color card_bg_color #{{.colors.base01}};
@define-color card_fg_color #{{.colors.base05}};
@define-color card_shade_color rgba(0, 0, 0, 0.07);
@define-color dialog_bg_color #{{.colors.base01}};
@define-color dialog_fg_color #{{.colors.base05}};
@define-color popover_bg_color #{{.colors.base01}};
@define-color popover_fg_color #{{.colors.base05}};
@define-color popover_shade_color rgba(0, 0, 0, 0.07);
@define-color shade_color rgba(0, 0, 0, 0.07);
@define-color scrollbar_outline_color #{{.colors.base02}};
@define-color blue_1 #{{.colors.base0D}};
@define-color blue_2 #{{.colors.base0D}};
@define-color blue_3 #{{.colors.base0D}};
@define-color blue_4 #{{.colors.base0D}};
@define-color blue_5 #{{.colors.base0D}};
@define-color green_1 #{{.colors.base0B}};
@define-color green_2 #{{.colors.base0B}};
@define-color green_3 #{{.colors.base0B}};
@define-color green_4 #{{.colors.base0B}};
@define-color green_5 #{{.colors.base0B}};
@define-color yellow_1 #{{.colors.base0A}};
@define-color yellow_2 #{{.colors.base0A}};
@define-color yellow_3 #{{.colors.base0A}};
@define-color yellow_4 #{{.colors.base0A}};
@define-color yellow_5 #{{.colors.base0A}};
@define-color orange_1 #{{.colors.base09}};
@define-color orange_2 #{{.colors.base09}};
@define-color orange_3 #{{.colors.base09}};
@define-color orange_4 #{{.colors.base09}};
@define-color orange_5 #{{.colors.base09}};
@define-color red_1 #{{.colors.base08}};
@define-color red_2 #{{.colors.base08}};
@define-color red_3 #{{.colors.base08}};
@define-color red_4 #{{.colors.base08}};
@define-color red_5 #{{.colors.base08}};
@define-color purple_1 #{{.colors.base0E}};
@define-color purple_2 #{{.colors.base0E}};
@define-color purple_3 #{{.colors.base0E}};
@define-color purple_4 #{{.colors.base0E}};
@define-color purple_5 #{{.colors.base0E}};
@define-color brown_1 #{{.colors.base0F}};
@define-color brown_2 #{{.colors.base0F}};
@define-color brown_3 #{{.colors.base0F}};
@define-color brown_4 #{{.colors.base0F}};
@define-color brown_5 #{{.colors.base0F}};
@define-color light_1 #{{.colors.base05}};
@define-color light_2 #{{.colors.base05}};
@define-color light_3 #{{.colors.base05}};
@define-color light_4 #{{.colors.base05}};
@define-color light_5 #{{.colors.base05}};
@define-color dark_1 #{{.colors.base05}};
@define-color dark_2 #{{.colors.base05}};
@define-color dark_3 #{{.colors.base05}};
@define-color dark_4 #{{.colors.base05}};
@define-color dark_5 #{{.colors.base05}};

View file

@ -0,0 +1,17 @@
[Settings]
gtk-theme-name=adw-gtk3-dark
gtk-icon-theme-name=Adwaita
gtk-font-name=Adwaita Sans 11
gtk-cursor-theme-name=Bibata-Modern-Ice
gtk-cursor-theme-size=24
gtk-toolbar-style=GTK_TOOLBAR_ICONS
gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR
gtk-button-images=0
gtk-menu-images=0
gtk-enable-event-sounds=1
gtk-enable-input-feedback-sounds=0
gtk-xft-antialias=1
gtk-xft-hinting=1
gtk-xft-hintstyle=hintslight
gtk-xft-rgba=rgb
gtk-application-prefer-dark-theme=0

View file

@ -0,0 +1,7 @@
[Settings]
gtk-theme-name=adw-gtk3
gtk-icon-theme-name=Adwaita
gtk-font-name=Adwaita Sans 11
gtk-cursor-theme-name=Bibata-Modern-Ice
gtk-cursor-theme-size=24
gtk-application-prefer-dark-theme=1

View file

@ -0,0 +1 @@
/home/jsw/.config/gtk-3.0/gtk.css

View file

@ -0,0 +1,17 @@
first_name_only = false
show_receipts = true
notifications = true
bell = true
colored_messages = false
default_keybindings = true
[user]
display_name = "jsw"
[keybindings.normal]
alt-enter = ""
ctrl-p = "toggle_multiline"
ctrl-j= "select_message next entry"
ctrl-k = "select_message previous entry"
ctrl-shift-j= "select_channel next"
ctrl-shift-k = "select_channel previous"

View file

@ -0,0 +1,17 @@
theme = "default-jsw"
[editor]
line-number = "relative"
default-yank-register = "+"
bufferline = "multiple"
[editor.cursor-shape]
insert = "bar"
normal = "block"
select = "underline"
[keys.normal]
"C-/" = "toggle_comments"
### THEMING

View file

@ -0,0 +1,97 @@
"attribute" = "base09"
"comment" = { fg = "base03", modifiers = ["italic"] }
"constant" = "base09"
"constant.character.escape" = "base0C"
"constant.numeric" = "base09"
"constructor" = "base0D"
"debug" = "base03"
"diagnostic" = { modifiers = ["underlined"] }
"diff.delta" = "base09"
"diff.minus" = "base08"
"diff.plus" = "base0B"
"error" = "base08"
"function" = "base0D"
"hint" = "base03"
"info" = "base0D"
"keyword" = "base0E"
"label" = "base0E"
"namespace" = "base0E"
"operator" = "base05"
"special" = "base0D"
"string" = "base0B"
"tag" = "base08"
"type" = "base0A"
"variable" = "base08"
"variable.other.member" = "base0D"
"warning" = "base09"
"markup.bold" = { fg = "base0A", modifiers = ["bold"] }
"markup.heading.1" = { fg = "base0D", modifiers = ["bold"] }
"markup.heading.2" = { fg = "base08", modifiers = ["bold"] }
"markup.heading.3" = { fg = "base09", modifiers = ["bold"] }
"markup.heading.4" = { fg = "base0A", modifiers = ["bold"] }
"markup.heading.5" = { fg = "base0B", modifiers = ["bold"] }
"markup.heading.6" = { fg = "base0C", modifiers = ["bold"] }
"markup.italic" = { fg = "base0E", modifiers = ["italic"] }
"markup.link.text" = "base08"
"markup.link.url" = { fg = "base09", modifiers = ["underlined"] }
"markup.list" = "base08"
"markup.quote" = "base0C"
"markup.raw" = "base0B"
"markup.strikethrough" = { modifiers = ["crossed_out"] }
"diagnostic.hint" = { underline = { style = "curl" } }
"diagnostic.info" = { underline = { style = "curl" } }
"diagnostic.warning" = { underline = { style = "curl" } }
"diagnostic.error" = { underline = { style = "curl" } }
"ui.background" = { bg = "base00" }
"ui.bufferline.active" = { fg = "base00", bg = "base03", modifiers = ["bold"] }
"ui.bufferline" = { fg = "base04", bg = "base00" }
"ui.cursor" = { fg = "base06", modifiers = ["reversed"] }
"ui.cursor.primary" = { fg = "base05", modifiers = ["reversed"] }
"ui.cursorline.primary" = { fg = "base05", bg = "base01" }
"ui.cursor.match" = { fg = "base05", bg = "base02", modifiers = ["bold"] }
"ui.cursor.select" = { fg = "base05", modifiers = ["reversed"] }
"ui.gutter" = { bg = "base00" }
"ui.help" = { fg = "base06", bg = "base01" }
"ui.linenr" = { fg = "base03", bg = "base00" }
"ui.linenr.selected" = { fg = "base04", bg = "base01", modifiers = ["bold"] }
"ui.menu" = { fg = "base05", bg = "base01" }
"ui.menu.scroll" = { fg = "base03", bg = "base01" }
"ui.menu.selected" = { fg = "base01", bg = "base04" }
"ui.popup" = { bg = "base01" }
"ui.selection" = { bg = "base02" }
"ui.selection.primary" = { bg = "base02" }
"ui.statusline" = { fg = "base04", bg = "base01" }
"ui.statusline.inactive" = { bg = "base01", fg = "base03" }
"ui.statusline.insert" = { fg = "base00", bg = "base0B" }
"ui.statusline.normal" = { fg = "base00", bg = "base03" }
"ui.statusline.select" = { fg = "base00", bg = "base0F" }
"ui.text" = "base05"
"ui.text.directory" = "base0D"
"ui.text.focus" = "base05"
"ui.virtual.indent-guide" = { fg = "base03" }
"ui.virtual.inlay-hint" = { fg = "base03" }
"ui.virtual.ruler" = { bg = "base01" }
"ui.virtual.jump-label" = { fg = "base0A", modifiers = ["bold"] }
"ui.virtual.whitespace" = { fg = "base03" }
"ui.window" = { bg = "base01" }
[palette]
base00 = "#{{.colors.base00}}" # Default Background
base01 = "#{{.colors.base01}}" # Lighter Background (Used for status bars, line number and folding marks)
base02 = "#{{.colors.base02}}" # Selection Background
base03 = "#{{.colors.base03}}" # Comments, Invisibles, Line Highlighting
base04 = "#{{.colors.base04}}" # Dark Foreground (Used for status bars)
base05 = "#{{.colors.base05}}" # Default Foreground, Caret, Delimiters, Operators
base06 = "#{{.colors.base06}}" # Light Foreground (Not often used)
base07 = "#{{.colors.base07}}" # Light Background (Not often used)
base08 = "#{{.colors.base08}}" # Variables, XML Tags, Markup Link Text, Markup Lists, Diff Deleted
base09 = "#{{.colors.base09}}" # Integers, Boolean, Constants, XML Attributes, Markup Link Url
base0A = "#{{.colors.base0A}}" # Classes, Markup Bold, Search Text Background
base0B = "#{{.colors.base0B}}" # Strings, Inherited Class, Markup Code, Diff Inserted
base0C = "#{{.colors.base0C}}" # Support, Regular Expressions, Escape Characters, Markup Quotes
base0D = "#{{.colors.base0D}}" # Functions, Methods, Attribute IDs, Headings
base0E = "#{{.colors.base0E}}" # Keywords, Storage, Selector, Markup Italic, Diff Changed
base0F = "#{{.colors.base0F}}" # Deprecated, Opening/Closing Embedded Language Tags, e.g. <?php ?>

View file

@ -0,0 +1,15 @@
source = ~/.config/hypr/land/defaults.conf
source = ~/.config/hypr/land/env.conf
source = ~/.config/hypr/land/lookandfeel.conf
source = ~/.config/hypr/land/input.conf
source = ~/.config/hypr/land/binds.conf
source = ~/.config/hypr/land/rules.conf
monitor=,preferred,auto,auto
# Must be last in case they don't exist and shit'll error.
source = ~/.config/hypr/land/startup.conf
source = ~/.config/hypr/land/monitors.conf # nwg-display support
source = ~/.config/hypr/land/workspaces.conf

View file

@ -0,0 +1,90 @@
# App launching
bind = $mod, Return, exec, $terminal
bind = $mod SHIFT, Return, exec, $browser
bind = $mod, a, exec, $audio
bind = $mod, n, exec, $networking
bind = $mod, b, exec, $bluetooth
bind = $mod, p, exec, $display
bind = $mod, d, exec, $menu
bind = $mod, escape, exec, $lock
bind = CTRL, Print, exec, ~/.config/hypr/scripts/recording.sh
bind = , Print, exec, mkdir -p ~/Pictures/Screenshots && grim -t ppm -o "$(hyprctl activeworkspace -j | jq -r '.monitor')" - | satty -f - -o ~/Pictures/Screenshots/satty-$(date '+%Y%m%d-%H:%M:%S').png
bind = $mod, Q, killactive
bind = $mod, F, fullscreen
bind = $mod SHIFT, E, exit
bind = $mod, Space, togglefloating
# App moving
bind = $mod, h, movefocus, l
bind = $mod, l, movefocus, r
bind = $mod, k, movefocus, u
bind = $mod, j, movefocus, d
bind = $mod SHIFT, h, movewindow, l
bind = $mod SHIFT, l, movewindow, r
bind = $mod SHIFT, k, movewindow, u
bind = $mod SHIFT, j, movewindow, d
# App resizing
bind = $mod, R, submap, resize
submap = resize
binde = , h, resizeactive, -10 0
binde = , l, resizeactive, 10 0
binde = , k, resizeactive, 0, -10
binde = , j, resizeactive, 0, 10
bind = $mod, R, submap, reset
bind = , Return, submap, reset
bind = , escape, submap, reset
submap = reset
# Workspaces
bind = $mod, 1, workspace, 1
bind = $mod, 2, workspace, 2
bind = $mod, 3, workspace, 3
bind = $mod, 4, workspace, 4
bind = $mod, 5, workspace, 5
bind = $mod, 6, workspace, 6
bind = $mod, 7, workspace, 7
bind = $mod, 8, workspace, 8
bind = $mod, 9, workspace, 9
bind = $mod, 0, workspace, 10
bind = $mod SHIFT, 1, movetoworkspace, 1
bind = $mod SHIFT, 2, movetoworkspace, 2
bind = $mod SHIFT, 3, movetoworkspace, 3
bind = $mod SHIFT, 4, movetoworkspace, 4
bind = $mod SHIFT, 5, movetoworkspace, 5
bind = $mod SHIFT, 6, movetoworkspace, 6
bind = $mod SHIFT, 7, movetoworkspace, 7
bind = $mod SHIFT, 8, movetoworkspace, 8
bind = $mod SHIFT, 9, movetoworkspace, 9
bind = $mod SHIFT, 0, movetoworkspace, 10
## TODO: changeme scratchpad
bind = $mod, S, togglespecialworkspace, magic
bind = $mod SHIFT, S, movetoworkspace, special:magic
# Mouse bindings
bind = $mod, mouse_down, workspace, e+1
bind = $mod, mouse_up, workspace, e-1
bindm = $mod, mouse:272, movewindow
bindm = $mod, mouse:273, resizewindow
# Laptop multimedia keys for volume and LCD brightness
bind = ,XF86AudioMedia, exec, ~/.config/hypr/scripts/switch_powerprofiles.sh toggle
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%-
# Playback
bindl = , XF86AudioNext, exec, playerctl next
bindl = , XF86AudioPause, exec, playerctl play-pause
bindl = , XF86AudioPlay, exec, playerctl play-pause
bindl = , XF86AudioPrev, exec, playerctl previous

View file

@ -0,0 +1,16 @@
# Normal variables
$mod = alt
# Essential variables
$terminal = /usr/bin/kitty
$editor = /usr/bin/helix #THIS ONE MUST BE FULL PATH
$lock = /usr/bin/hyprlock -c ~/.config/hypr/lock/lock.conf
# Setting applications
$audio = $terminal /usr/bin/pulsemixer
$networking = $terminal /usr/bin/nmtui
$bluetooth = $terminal /usr/bin/bluetui
$display = /usr/bin/nwg-displays -w ~/.config/hypr/land/workspaces.conf -m ~/.config/hypr/land/monitors.conf
# Other applications
$browser = /usr/bin/firefox

View file

@ -0,0 +1,6 @@
env = XCURSOR_SIZE,24
env = HYPRCURSOR_SIZE,24
env = TERMINAL,$terminal
env = EDITOR,$editor

View file

@ -0,0 +1,18 @@
input {
repeat_rate = 60
repeat_delay = 200
kb_layout = us
kb_variant =
kb_model =
kb_options = compose:ralt
kb_rules =
follow_mouse = 1
sensitivity = 0
touchpad {
natural_scroll = false
}
}
gesture = 3, horizontal, workspace

View file

@ -0,0 +1,66 @@
general {
gaps_in = 3
gaps_out = 5
border_size = 1
col.active_border = rgb({{ .colors.base0E }})
col.inactive_border = rgb({{ .colors.base02 }})
resize_on_border = false
allow_tearing = false
layout = dwindle
}
decoration {
rounding = 5
rounding_power = 3
active_opacity = 0.95
inactive_opacity = 0.87
shadow {
enabled = true
range = 4
render_power = 3
color = rgb({{ .colors.base01 }})
}
blur {
enabled = true
size = 10
passes = 2
}
}
animations {
enabled = yes
bezier = expressiv2FastSpatial, 0.42, 1.67, 0.21, 0.90
bezier = expressiveSlowSpatial, 0.39, 1.29, 0.35, 0.98
bezier = expressiveDefaultSpatial, 0.38, 1.21, 0.22, 1.00
bezier = emphasizedDecel, 0.05, 0.7, 0.1, 1
bezier = emphasizedAccel, 0.3, 0, 0.8, 0.15
bezier = standardDecel, 0, 0, 0, 1
bezier = menu_decel, 0.1, 1, 0, 1
bezier = menu_accel, 0.52, 0.03, 0.72, 0.08
animation = windowsIn, 1, 3, emphasizedDecel, popin 80%
animation = windowsOut, 1, 2, emphasizedDecel, popin 90%
animation = windowsMove, 1, 3, emphasizedDecel, slide
animation = border, 1, 10, emphasizedDecel
animation = layersIn, 1, 2.7, emphasizedDecel, popin 93%
animation = layersOut, 1, 2.4, menu_accel, popin 94%
animation = fadeLayersIn, 1, 0.5, menu_decel
animation = fadeLayersOut, 1, 2.7, menu_accel
animation = workspaces, 1, 7, menu_decel, slide
animation = specialWorkspaceIn, 1, 2.8, emphasizedDecel, slidevert
animation = specialWorkspaceOut, 1, 1.2, emphasizedAccel, slidevert
}
dwindle {
pseudotile = true
preserve_split = true
}
misc {
force_default_wallpaper = -1
disable_hyprland_logo = false
}

View file

@ -0,0 +1,3 @@
# Generated by nwg-displays on 2025-10-18 at 21:02:54. Do not edit manually.
monitor=eDP-1,2880x1920@120.0,0x0,1.6

View file

@ -0,0 +1,2 @@
windowrule = suppressevent maximize, class:.*
windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0

View file

@ -0,0 +1,5 @@
exec-once = swaybg -i ~/Pictures/wallpaper.png
exec-once = waybar
exec-once = ~/.config/hypr/scripts/switch_powerprofiles.sh sync
exec-once = /usr/bin/hyprlock -c ~/.config/hypr/lock/login.conf
exec-once = mako

View file

@ -0,0 +1,57 @@
image {
halign=center
path=/home/jsw/Pictures/profile.png
position=0, 50
valign=center
}
input-field {
size=200,50
check_color=rgb(e5c890)
fail_color=rgb(e78284)
dots_center=true
dots_size=0.200000
dots_spacing=0.350000
fade_on_empty=false
font_color=rgb(c6d0f5)
halign=center
hide_input=false
inner_color=rgb(303446)
outer_color=rgb(292c3c)
outline_thickness=2
placeholder_text=<i>Input Password...</i>
position=0, -100
rounding=-1
valign=center
fail_text=<i>$FAIL <b>($ATTEMPTS)</b></i>
}
label {
font_family=JetBrains Mono
font_size=95
halign=center
position=0, 300
text=$TIME
valign=center
color_idle=rgba(c6d0f5, 0.75)
color_verify=rgba(51576d, 0.75)
color_fail=rgba(e78284, 0.75)
color_capslock=rgba(a6d189, 0.75)
}
label {
color=rgba(f2d5cf, 0.75)
font_family=JetBrains Mono
font_size=22
halign=center
position=0, 200
text=cmd[update:1000] echo $(date +"%A, %B %d")
valign=center
}
auth {
fingerprint {
enabled = true
retry_delay = 50
}
}

View file

@ -0,0 +1,7 @@
source = ~/.config/hypr/lock/common.conf
background {
blur_passes=2
blur_size=10
path=screenshot
}

View file

@ -0,0 +1,7 @@
source = ~/.config/hypr/lock/common.conf
background {
blur_passes=2
blur_size=10
path=~/Pictures/wallpaper.png
}

View file

@ -0,0 +1,14 @@
#!/bin/env bash
pgrep -x "wf-recorder" && pkill -INT -x wf-recorder && notify-send -h string:wf-recorder:record -t 1000 "Finished Recording" && exit 0
for i in $(seq 1 3); do
notify-send -h string:wf-recorder:record -t 1000 "Recording in:" "<span color='#90a4f4' font='26px'><i><b>$((4 - $i))</b></i></span>"
sleep 1
done
dateTime=$(date +%m-%d-%Y-%H:%M:%S)
dir="$HOME/Videos/ScreenRecordings"
mkdir -p "$dir"
wf-recorder -f "$dir/$dateTime.mp4"

View file

@ -0,0 +1,50 @@
#!/usr/bin/env bash
function sync() {
if [ "$(powerprofilesctl get)" = "power-saver" ]; then
hyprctl --batch "\
keyword animations:enabled 0;\
keyword decoration:shadow:enabled 0;\
keyword decoration:blur:enabled 0;\
keyword decoration:active_opacity 1;\
keyword decoration:inactive_opacity 1;\
keyword general:gaps_in 0;\
keyword general:gaps_out 0;\
keyword general:border_size 1;\
keyword decoration:rounding 0"
hyprctl keyword monitor eDP-1,2880x1920@60,0x0,1.5,vrr,1 #NOTE: use templating if you own multiple laptops
else
hyprctl reload
fi
hyprctl hyprpaper reload ,~/Pictures/wallpaper.png
}
function toggle() {
if [ "$(powerprofilesctl get)" = "power-saver" ]; then
powerprofilesctl set performance
else
powerprofilesctl set power-saver
fi
sync
}
if [ "$#" -ne 1 ]; then
echo "Usage: $0 {toggle|sync}"
exit 1
fi
case "$1" in
toggle)
toggle
;;
sync)
sync
;;
*)
echo "Invalid option: $1"
echo "Usage: $0 {toggle|sync}"
exit 1
;;
esac

View file

@ -0,0 +1,58 @@
# vim:ft=kitty
# The basic colors
background #{{.colors.base00}}
foreground #{{.colors.base05}}
selection_background #{{.colors.base05}}
selection_foreground #{{.colors.base00}}
# Cursor colors
cursor #{{.colors.base05}}
cursor_text_color #{{.colors.base00}}
# URL underline color when hovering with mouse
url_color #{{.colors.base04}}
# Kitty window border colors
active_border_color #{{.colors.base03}}
inactive_border_color #{{.colors.base01}}
# OS Window titlebar colors
wayland_titlebar_color #{{.colors.base00}}
macos_titlebar_color #{{.colors.base00}}
# Tab bar colors
active_tab_background #{{.colors.base00}}
active_tab_foreground #{{.colors.base05}}
inactive_tab_background #{{.colors.base01}}
inactive_tab_foreground #{{.colors.base04}}
tab_bar_background #{{.colors.base01}}
# The 16 terminal colors
# normal
color0 #{{.colors.base00}}
color1 #{{.colors.base08}}
color2 #{{.colors.base0B}}
color3 #{{.colors.base0A}}
color4 #{{.colors.base0D}}
color5 #{{.colors.base0E}}
color6 #{{.colors.base0C}}
color7 #{{.colors.base05}}
# bright
color8 #{{.colors.base02}}
color9 #{{.colors.base12}}
color10 #{{.colors.base14}}
color11 #{{.colors.base13}}
color12 #{{.colors.base16}}
color13 #{{.colors.base17}}
color14 #{{.colors.base15}}
color15 #{{.colors.base07}}
# extended .colors.base16 colors
color16 #{{.colors.base09}}
color17 #{{.colors.base0F}}
color18 #{{.colors.base01}}
color19 #{{.colors.base02}}
color20 #{{.colors.base04}}
color21 #{{.colors.base06}}

View file

@ -0,0 +1,14 @@
background-color=#{{.colors.base00}}
text-color=#{{.colors.base05}}
border-color=#{{.colors.base0D}}
default-timeout=3000
[urgency=low]
background-color=#{{.colors.base00}}
text-color=#{{.colors.base0A}}
border-color=#{{.colors.base0D}}
[urgency=high]
background-color=#{{.colors.base00}}
text-color=#{{.colors.base08}}
border-color=#{{.colors.base0D}}

View file

@ -0,0 +1,4 @@
ookla-speedtest-bin
python-ble-serial
yay-bin
yay-bin-debug

View file

@ -0,0 +1,71 @@
7zip
adw-gtk-theme
amd-ucode
aria2
atuin
base
bluetui
bluez
chezmoi
debugedit
efibootmgr
fakeroot
firefox
fish
fprintd
fwupd
fwupd-efi
git
greetd
gurk
helix
htop
hyprland
hyprlock
hyprshot
jq
kitty
libvdpau-va-gl
linux-firmware
linux-zen
make
mako
man-db
man-pages
mpv
ncspot
networkmanager
noto-fonts
noto-fonts-emoji
nwg-displays
nwg-look
openssh
pipewire
pkgconf
polkit-gnome
power-profiles-daemon
pulsemixer
rclone
reflector
rsync
rtkit
rust
rust-analyzer
satty
sudo
swaybg
tmux
ttf-jetbrains-mono-nerd
udisks2
vulkan-radeon
waybar
waypipe
wev
wf-recorder
which
wireless_tools
wireplumber
wl-clipboard
xdg-desktop-portal-hyprland
xdg-user-dirs
yazi

View file

@ -0,0 +1,89 @@
set -gx ATUIN_SESSION (atuin uuid)
set --erase ATUIN_HISTORY_ID
function _atuin_preexec --on-event fish_preexec
if not test -n "$fish_private_mode"
set -g ATUIN_HISTORY_ID (atuin history start -- "$argv[1]")
end
end
function _atuin_postexec --on-event fish_postexec
set -l s $status
if test -n "$ATUIN_HISTORY_ID"
ATUIN_LOG=error atuin history end --exit $s -- $ATUIN_HISTORY_ID &>/dev/null &
disown
end
set --erase ATUIN_HISTORY_ID
end
function _atuin_search
set -l keymap_mode
switch $fish_key_bindings
case fish_vi_key_bindings
switch $fish_bind_mode
case default
set keymap_mode vim-normal
case insert
set keymap_mode vim-insert
end
case '*'
set keymap_mode emacs
end
# In fish 3.4 and above we can use `"$(some command)"` to keep multiple lines separate;
# but to support fish 3.3 we need to use `(some command | string collect)`.
# https://fishshell.com/docs/current/relnotes.html#id24 (fish 3.4 "Notable improvements and fixes")
set -l ATUIN_H (ATUIN_SHELL=fish ATUIN_LOG=error ATUIN_QUERY=(commandline -b) atuin search --keymap-mode=$keymap_mode $argv -i 3>&1 1>&2 2>&3 | string collect)
if test -n "$ATUIN_H"
if string match --quiet '__atuin_accept__:*' "$ATUIN_H"
set -l ATUIN_HIST (string replace "__atuin_accept__:" "" -- "$ATUIN_H" | string collect)
commandline -r "$ATUIN_HIST"
commandline -f repaint
commandline -f execute
return
else
commandline -r "$ATUIN_H"
end
end
commandline -f repaint
end
function _atuin_bind_up
# Fallback to fish's builtin up-or-search if we're in search or paging mode
if commandline --search-mode; or commandline --paging-mode
up-or-search
return
end
# Only invoke atuin if we're on the top line of the command
set -l lineno (commandline --line)
switch $lineno
case 1
_atuin_search --shell-up-key-binding
case '*'
up-or-search
end
end
if string match -q '4.*' $version
bind ctrl-r _atuin_search
bind up _atuin_bind_up
if bind -M insert >/dev/null 2>&1
bind -M insert ctrl-r _atuin_search
# bind -M insert up _atuin_bind_up
end
else
bind \cr _atuin_search
bind -k up _atuin_bind_up
bind \eOA _atuin_bind_up
bind \e\[A _atuin_bind_up
if bind -M insert >/dev/null 2>&1
bind -M insert \cr _atuin_search
# bind -M insert -k up _atuin_bind_up; bind -M insert \eOA _atuin_bind_up; bind -M insert \e\[A _atuin_bind_up
end
end

View file

@ -0,0 +1,120 @@
set color00 {{substr 0 2 .colors.base00}}/{{substr 2 4 .colors.base00}}/{{substr 4 6 .colors.base00}} # Base 00 - Black
set color01 {{substr 0 2 .colors.base08}}/{{substr 2 4 .colors.base08}}/{{substr 4 6 .colors.base08}} # Base 08 - Red
set color02 {{substr 0 2 .colors.base0B}}/{{substr 2 4 .colors.base0B}}/{{substr 4 6 .colors.base0B}} # Base 0B - Green
set color03 {{substr 0 2 .colors.base0A}}/{{substr 2 4 .colors.base0A}}/{{substr 4 6 .colors.base0A}} # Base 0A - Yellow
set color04 {{substr 0 2 .colors.base0D}}/{{substr 2 4 .colors.base0D}}/{{substr 4 6 .colors.base0D}} # Base 0D - Blue
set color05 {{substr 0 2 .colors.base0E}}/{{substr 2 4 .colors.base0E}}/{{substr 4 6 .colors.base0E}} # Base 0E - Magenta
set color06 {{substr 0 2 .colors.base0C}}/{{substr 2 4 .colors.base0C}}/{{substr 4 6 .colors.base0C}} # Base 0C - Cyan
set color07 {{substr 0 2 .colors.base05}}/{{substr 2 4 .colors.base05}}/{{substr 4 6 .colors.base05}} # Base 05 - White
set color08 {{substr 0 2 .colors.base03}}/{{substr 2 4 .colors.base03}}/{{substr 4 6 .colors.base03}} # Base 03 - Bright Black
set color09 $color01 # Base 08 - Bright Red
set color10 $color02 # Base 0B - Bright Green
set color11 $color03 # Base 0A - Bright Yellow
set color12 $color04 # Base 0D - Bright Blue
set color13 $color05 # Base 0E - Bright Magenta
set color14 $color06 # Base 0C - Bright Cyan
set color15 {{substr 0 2 .colors.base07}}/{{substr 2 4 .colors.base07}}/{{substr 4 6 .colors.base07}} # Base 07 - Bright White
set color16 {{substr 0 2 .colors.base09}}/{{substr 2 4 .colors.base09}}/{{substr 4 6 .colors.base09}} # Base 09
set color17 {{substr 0 2 .colors.base0F}}/{{substr 2 4 .colors.base0F}}/{{substr 4 6 .colors.base0F}} # Base 0F
set color18 {{substr 0 2 .colors.base01}}/{{substr 2 4 .colors.base01}}/{{substr 4 6 .colors.base01}} # Base 01
set color19 {{substr 0 2 .colors.base02}}/{{substr 2 4 .colors.base02}}/{{substr 4 6 .colors.base02}} # Base 02
set color20 {{substr 0 2 .colors.base04}}/{{substr 2 4 .colors.base04}}/{{substr 4 6 .colors.base04}} # Base 04
set color21 {{substr 0 2 .colors.base06}}/{{substr 2 4 .colors.base06}}/{{substr 4 6 .colors.base06}} # Base 06
set colorfg $color07 # Base 05 - White
set colorbg $color00 # Base 00 - Black
if test -n "$TMUX"
# Tell tmux to pass the escape sequences through
# (Source: http://permalink.gmane.org/gmane.comp.terminal-emulators.tmux.user/1324)
function put_template; printf '\033Ptmux;\033\033]4;%d;rgb:%s\033\033\\\033\\' $argv; end;
function put_template_var; printf '\033Ptmux;\033\033]%d;rgb:%s\033\033\\\033\\' $argv; end;
function put_template_custom; printf '\033Ptmux;\033\033]%s%s\033\033\\\033\\' $argv; end;
else if string match 'screen*' $TERM # [ "${TERM%%[-.]*}" = "screen" ]
# GNU screen (screen, screen-256color, screen-256color-bce)
function put_template; printf '\033P\033]4;%d;rgb:%s\007\033\\' $argv; end;
function put_template_var; printf '\033P\033]%d;rgb:%s\007\033\\' $argv; end;
function put_template_custom; printf '\033P\033]%s%s\007\033\\' $argv; end;
else if string match 'linux*' $TERM # [ "${TERM%%-*}" = "linux" ]
function put_template; test $argv[1] -lt 16 && printf "\e]P%x%s" $argv[1] (echo $argv[2] | sed 's/\///g'); end;
function put_template_var; true; end;
function put_template_custom; true; end;
else
function put_template; printf '\033]4;%d;rgb:%s\033\\' $argv; end;
function put_template_var; printf '\033]%d;rgb:%s\033\\' $argv; end;
function put_template_custom; printf '\033]%s%s\033\\' $argv; end;
end
# 16 color space
put_template 0 $color00
put_template 1 $color01
put_template 2 $color02
put_template 3 $color03
put_template 4 $color04
put_template 5 $color05
put_template 6 $color06
put_template 7 $color07
put_template 8 $color08
put_template 9 $color09
put_template 10 $color10
put_template 11 $color11
put_template 12 $color12
put_template 13 $color13
put_template 14 $color14
put_template 15 $color15
# 256 color space
put_template 16 $color16
put_template 17 $color17
put_template 18 $color18
put_template 19 $color19
put_template 20 $color20
put_template 21 $color21
# foreground / background / cursor color
if test -n "$ITERM_SESSION_ID"
# iTerm2 proprietary escape codes
put_template_custom Pg {{.colors.base05}} # foreground
put_template_custom Ph {{.colors.base00}} # background
put_template_custom Pi {{.colors.base05}} # bold color
put_template_custom Pj {{.colors.base02}} # selection color
put_template_custom Pk {{.colors.base05}} # selected text color
put_template_custom Pl {{.colors.base05}} # cursor
put_template_custom Pm {{.colors.base00}} # cursor text
else
put_template_var 10 $colorfg
if [ "$BASE16_SHELL_SET_BACKGROUND" != false ]
put_template_var 11 $colorbg
if string match 'rxvt*' $TERM # [ "${TERM%%-*}" = "rxvt" ]
put_template_var 708 $colorbg # internal border (rxvt)
end
end
put_template_custom 12 ";7" # cursor (reverse video)
end
# set syntax highlighting colors
set -U fish_color_autosuggestion {{.colors.base02}}
set -U fish_color_cancel -r
set -U fish_color_command green #white
set -U fish_color_comment {{.colors.base02}}
set -U fish_color_cwd green
set -U fish_color_cwd_root red
set -U fish_color_end brblack #blue
set -U fish_color_error red
set -U fish_color_escape yellow #green
set -U fish_color_history_current --bold
set -U fish_color_host normal
set -U fish_color_match --background=brblue
set -U fish_color_normal normal
set -U fish_color_operator blue #green
set -U fish_color_param {{.colors.base04}}
set -U fish_color_quote yellow #brblack
set -U fish_color_redirection cyan
set -U fish_color_search_match bryellow --background={{.colors.base02}}
set -U fish_color_selection white --bold --background={{.colors.base02}}
set -U fish_color_status red
set -U fish_color_user brgreen
set -U fish_color_valid_path --underline
set -U fish_pager_color_completion normal
set -U fish_pager_color_description yellow --dim
set -U fish_pager_color_prefix white --bold #--underline
set -U fish_pager_color_progress brwhite --background=cyan

View file

@ -0,0 +1,15 @@
# This file is written by xdg-user-dirs-update
# If you want to change or add directories, just edit the line you're
# interested in. All local changes will be retained on the next run.
# Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped
# homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an
# absolute path. No other format is supported.
#
XDG_DESKTOP_DIR="$HOME/Desktop"
XDG_DOWNLOAD_DIR="$HOME/Downloads"
XDG_TEMPLATES_DIR="$HOME/Templates"
XDG_PUBLICSHARE_DIR="$HOME/Public"
XDG_DOCUMENTS_DIR="$HOME/Documents"
XDG_MUSIC_DIR="$HOME/Music"
XDG_PICTURES_DIR="$HOME/Pictures"
XDG_VIDEOS_DIR="$HOME/Videos"

View file

@ -0,0 +1 @@
/usr/lib/systemd/user/pipewire-pulse.service

View file

@ -0,0 +1 @@
/usr/lib/systemd/user/pipewire.service

View file

@ -0,0 +1 @@
/home/jsw/.config/systemd/user/polkit-gnome.service

View file

@ -0,0 +1 @@
/usr/lib/systemd/user/hyprpaper.service

View file

@ -0,0 +1,10 @@
[Unit]
Description=Polkit GNOME Authentication Agent
After=graphical-session.target
[Service]
ExecStart=/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
Restart=on-failure
[Install]
WantedBy=default.target

View file

@ -0,0 +1 @@
/usr/lib/systemd/user/pipewire-pulse.socket

View file

@ -0,0 +1 @@
/usr/lib/systemd/user/pipewire.socket

View file

@ -0,0 +1,104 @@
{
"layer": "bottom",
"position": "bottom",
"height": 26,
"spacing": 5,
"modules-left": ["hyprland/workspaces", "custom/platform-profile", "temperature"],
"modules-center": ["clock"],
"modules-right": ["wireplumber", "battery", "idle_inhibitor", "network", "bluetooth", "tray"],
"hyprland/workspaces": {
"format": "<span size='larger'>{icon}</span>",
"on-click": "activate",
"format-icons": {
"active": "\uf444",
"default": "\uf4c3"
},
"icon-size": 10,
"sort-by-number": true,
"persistent-workspaces": {
"1": [],
"2": [],
"3": [],
"4": [],
"5": [],
}
},
"clock": {
"format": "{:%d.%m.%Y | %H:%M}"
},
"wireplumber": {
"format": "\udb81\udd7e {volume}%",
"max-volume": 100,
"scroll-step": 5
},
"battery": {
"bat": "BAT1",
"interval": 60,
"format": "{icon} {capacity}%",
"format-icons": ["\uf244", "\uf243", "\uf242", "\uf241", "\uf240"],
},
"memory": {
"interval": 30,
"format": "\uf4bc {used:0.1f}G"
},
"temperature": {
"format": "{temperatureC}°C"
},
"network": {
"format": "",
"format-ethernet": "\udb83\udc9d",
"format-wifi": "{icon}",
"format-disconnected": "\udb83\udc9c",
"format-icons": ["\udb82\udd2f", "\udb82\udd1f", "\udb82\udd22", "\udb82\udd25", "\udb82\udd28"],
"tooltip-format-wifi": "{essid} ({signalStrength}%)",
"tooltip-format-ethernet": "{ifname}",
"tooltip-format-disconnected": "Disconnected",
},
"bluetooth": {
"format": "\udb80\udcaf",
"format-disabled": "\udb80\udcb2",
"format-connected": "\udb80\udcb1",
"tooltip-format": "{controller_alias}\t{controller_address}",
"tooltip-format-connected": "{controller_alias}\t{controller_address}\n\n{device_enumerate}",
"tooltip-format-enumerate-connected": "{device_alias}\t{device_address}"
},
"hyprland/language": {
"format": "{short}"
},
"tray": {
"icon-size": 16,
"spacing": 16
},
"custom/platform-profile": {
"format": "{icon}",
"exec": "~/.config/waybar/platform_profile.sh",
"return-type": "json",
"restart-interval": 1,
"format-icons": {
"low-power": "󰾆 ",
"balanced": "󰾅 ",
"performance": "󰓅 ",
"default": "?"
},
},
"idle_inhibitor": {
"format": "{icon}",
"format-icons": {
"activated": "\udb80\udd76",
"deactivated": "\udb83\udfaa"
}
}
}

View file

@ -0,0 +1,2 @@
#!/bin/sh
echo "{\"alt\": \"$(cat /sys/firmware/acpi/platform_profile)\"}"

View file

@ -0,0 +1,39 @@
@define-color foreground #{{ .colors.base05 }};
@define-color foreground-inactive #{{.colors.base04 }};
@define-color background #{{.colors.base01 }};
* {
font-family: JetBrainsMono Nerd Font;
font-size: 14px;
padding: 0;
margin: 0;
}
#waybar {
color: @foreground;
background-color: @background;
}
#workspaces button {
color: @foreground;
padding-left: 0.7em;
}
#workspaces button.empty {
color: @foreground-inactive;
}
#memory,
#custom-platform-profile {
padding-left: 1em
}
#wireplumber,
#battery,
#idle_inhibitor,
#language,
#network,
#bluetooth,
#tray {
padding-right: 1em
}

View file

@ -0,0 +1,99 @@
#!/usr/bin/env bash
set -euo pipefail
# elevate once, then never again
if (( EUID != 0 )); then
exec sudo -p "Password: " "$0" "$@"
fi
PROG=$(basename "$0")
usage() {
cat <<EOF
Usage: $PROG N|--reset
N Number of logical CPUs to keep online (integer >= 1)
--reset Bring all logical CPUs online
EOF
exit 1
}
get_total_cpus() { nproc --all; }
set_cpu_online() {
local cpu=$1 val=$2
local f="/sys/devices/system/cpu/cpu${cpu}/online"
[[ -e $f ]] || return 0
local cur
cur=$(cat "$f" 2>/dev/null || echo "")
[[ $cur == "$val" ]] && return 0
printf '%s\n' "$val" >"$f" 2>/dev/null || \
echo "Warning: failed to set cpu${cpu} online=$val" >&2
}
reset_cpus() {
local total=$1
for ((i = 0; i < total; i++)); do
set_cpu_online "$i" 1
done
}
apply_target() {
local target=$1 total=$2
for ((i = 0; i < total; i++)); do
if ((i < target)); then
set_cpu_online "$i" 1
elif ((i > 0)); then
set_cpu_online "$i" 0
fi
done
}
list_online() {
local total=$1
local online=()
for ((i = 0; i < total; i++)); do
local f="/sys/devices/system/cpu/cpu${i}/online"
if [[ -e $f ]]; then
[[ $(cat "$f") == 1 ]] && online+=("$i")
else
online+=("$i")
fi
done
echo "Online CPUs: ${online[*]}"
}
main() {
local total
total=$(get_total_cpus)
if [[ $# -ne 1 ]]; then
usage
fi
case $1 in
--reset)
reset_cpus "$total"
echo "Done."
;;
[0-9]*)
local target=$1
if ((target <= 0)); then
echo "Warning: minimum of 1 CPU required; using 1." >&2
target=1
fi
if ((target >= total)); then
reset_cpus "$total"
echo "Done."
else
apply_target "$target" "$total"
list_online "$total"
fi
;;
*)
usage
;;
esac
}
main "$@"

View file

@ -0,0 +1,16 @@
[Desktop Entry]
Type=Application
Name=Displays Settings
Name[pl]=Ustawienia wyświetlaczy
GenericName=Output configuration utility
GenericName[pl]=Ustawienia wyświetlaczy
Comment=nwg-shell tool to configure outputs
Comment[pl]=Narzędzie nwg-shell do konfiguracji monitorów
Exec=nwg-displays -m ~/.config/hypr/land/monitors.conf -w ~/.config/hypr/land/monitors.conf
Icon=nwg-displays
Terminal=false
Categories=Settings;DesktopSettings;

View file

@ -0,0 +1,4 @@
[4F96D1932A9F858E]
Default=JSW.default-release
Locked=1

View file

@ -0,0 +1,24 @@
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.
In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
For more information, please refer to <http://unlicense.org>

View file

@ -0,0 +1,354 @@
<img src="icon.svg" alt="Firefox GNOME theme" width="128" align="left"/>
# Firefox GNOME theme
[![GitHub](https://img.shields.io/github/license/rafaelmardojai/firefox-gnome-theme.svg)](https://github.com/rafaelmardojai/firefox-gnome-theme/blob/master/LICENSE)
[![Donate](https://img.shields.io/badge/PayPal-Donate-gray.svg?style=flat&logo=paypal&colorA=0071bb&logoColor=fff)](https://paypal.me/RafaelMardojaiCM)
[![Liberapay](https://img.shields.io/liberapay/receives/rafaelmardojai.svg?logo=liberapay)](https://liberapay.com/rafaelmardojai/donate)
<br>
**A GNOME theme for Firefox**
This theme follows latest GNOME Adwaita style.
> [!WARNING]
> ### Disclaimer:
> Be aware that this theme might do things that are not supported by upstream Firefox. If you face an issue while using this theme, report it here first or test if it is reproducible in vanilla Firefox.
>
> If you are a software distribution maintainer, please do not ship these changes by default to your users unless you make it extremely clear that they are using a modified version of the Firefox UI.
![Screenshot of the theme](screenshot.png)
## Description
This is a bunch of CSS code to make Firefox look closer to GNOME's native apps.
### Getting in Touch
Matrix room: [#firefox-gnome-theme:matrix.org](https://matrix.to/#/#firefox-gnome-theme:matrix.org)
### Firefox versions support
The `master` branch of this repo supports the current Firefox stable release `143`.
Theme versions compatible with older Firefox releases are preserved as git tags.
We also have the `beta` and `nightly` branches for fixes only applicable to the current Firefox beta and nightly versions.
# Installation
The most friendly way to get this theme is using the **Add Water** app.
<a href='https://flathub.org/apps/dev.qwery.AddWater'>
<img width='240' alt='Get it on Flathub' src='https://flathub.org/api/badge?locale=en'/>
</a>
## One command install with curl
To install this theme, you can run this command, which uses *curl* to download a script that will also download the latest released version of the theme (not the master version) and run the **auto-install** script for you.
> [!WARNING]
> Always be careful when running scripts from the Internet.
```sh
curl -s -o- https://raw.githubusercontent.com/rafaelmardojai/firefox-gnome-theme/master/scripts/install-by-curl.sh | bash
```
## Installation scripts
If you want to use other version of the theme than the stable one you can manually download the theme and run its install scripts.
First you need to grab a fresh copy of the theme repository by cloning it with git.
1. Clone this repo and enter folder:
```sh
git clone https://github.com/rafaelmardojai/firefox-gnome-theme.git
cd firefox-gnome-theme
```
2. Checkout a git branch or tag if needed, otherwise use `master` and ignore this step.
```sh
git checkout beta # Set beta branch
git checkout v78.1 # Set v78.1 tag
```
This theme provides two installation scripts in addition to the curled one.
### Auto install script
This script will look for Firefox profiles from various known locations (`~/.mozilla/firefox/`, Flatpak, Snap, etc) and install the theme in each one.
You can execute it by running:
```sh
./scripts/auto-install.sh
```
### Manual install script
This script will only install the theme into the profiles found in the default Firefox folder `~/.mozilla/firefox/`. The script accepts various flags to change its behavior.
Here are some examples of how to use it:
```sh
./scripts/install.sh # Standard
./scripts/install.sh -p pc8577yz.default-release # Only install in a profile named pc8577yz.default-release
./scripts/install.sh -f ~/.var/app/org.mozilla.firefox/.mozilla/firefox # Flatpak
./scripts/install.sh -f ~/snap/firefox/common/.mozilla/firefox #Snap
```
#### Script options
- `-f <firefox_folder_path>` *optional*
- Set custom Firefox folder path, for example `~/.mozilla/icecat/`.
- Default: `~/.mozilla/firefox/`
- `-p <profile_name>` *optional*
- Set custom profile name, for example `e0j6yb0p.default-nightly`.
- Default: All the profiles found in the firefox folder
### Advanced notes
<details>
<summary>Expand</summary>
If you want to checkout the theme version tag matching you Firefox version you can run:
```sh
git checkout v$(firefox --version | cut -d ' ' -f 3 | cut -d '.' -f 1) # Using Firefox version
```
</details>
## Package managers
### Arch Linux
1. Install the [AUR package](https://aur.archlinux.org/packages/firefox-gnome-theme) `firefox-gnome-theme`
2. Follow the instructions at `cat /usr/share/doc/firefox-gnome-theme/INSTALL.md`
## Manual installation
<details>
<summary>Expand</summary>
1. Go to `about:support` in Firefox.
2. Application Basics > Profile Directory > Open Directory.
3. Open directory in a terminal.
4. Create a `chrome` directory if it doesn't exist:
```sh
mkdir -p chrome
cd chrome
```
5. Clone this repo to a subdirectory:
```sh
git clone https://github.com/rafaelmardojai/firefox-gnome-theme.git
```
6. Create single-line user CSS files if non-existent or empty (at least one line is needed for `sed`):
```sh
[[ -s userChrome.css ]] || echo >> userChrome.css
[[ -s userContent.css ]] || echo >> userContent.css
```
7. Import this theme at the beginning of the CSS files (all `@import`s must come before any existing `@namespace` declarations):
```sh
sed -i '1s/^/@import "firefox-gnome-theme\/userChrome.css";\n/' userChrome.css
sed -i '1s/^/@import "firefox-gnome-theme\/userContent.css";\n/' userContent.css
```
8. Symlink preferences file:
```sh
cd .. # Go back to the profile directory
ln -fs chrome/firefox-gnome-theme/configuration/user.js user.js
```
9. Restart Firefox.
10. Open Firefox customization panel and move the new tab button to headerbar.
11. Be happy with your new gnomish Firefox.
</details>
## Required Firefox preferences
We provide a **user.js** configuration file in `configuration/user.js` that enables some preferences required by this theme to work.
You should already have this file installed if you followed one of the installation methods, but in any case be sure this preferences are enabled under `about:config`:
- `toolkit.legacyUserProfileCustomizations.stylesheets`
This preference is required to load the custom CSS in Firefox, otherwise the theme wouldn't work.
- `svg.context-properties.content.enabled`
This preference is required to recolor the icons, otherwise you will get black icons everywhere.
> For other non essential preferences checkout `configuration/user.js`.
## Updating
You can follow the installation script steps again to update the theme.
## Uninstalling
1. Go to your profile folder. (Go to `about:support` in Firefox > Application Basics > Profile Directory > Open Directory)
2. Remove `chrome` folder.
3. Remove the unwanted preferences from your `user.js` inside your profile folder. The install script append the needed prefs in that file, you can check what preferences does it append by checking `configuration/user.js` in this repo.
## Enabling optional features
Optional features can be enabled by creating new `boolean` preferences in `about:config`.
1. Go to the `about:config` page
2. Type the key of the feature you want to enable
3. Set it as a `boolean` and click on the add button
4. Restart Firefox
### Features
- **Hide single tab** `gnomeTheme.hideSingleTab`
Hide the tab bar when only one tab is open.
> **Note:** You should move the new tab button out of the tabbar or it will be hidden when there is only one tab. You can rearrange the toolbars doing a right-click on any toolbar and selecting "Customize Toolbar…".
- **Normal width tabs** `gnomeTheme.normalWidthTabs`
Use normal width tabs as default Firefox.
- **Swap tab close button position** `gnomeTheme.swapTabClose`
By default the tab close buttons follows the position of the window controls, this preference reverts that behavior.
- **Bookmarks toolbar under tabs** `gnomeTheme.bookmarksToolbarUnderTabs`
Move Bookmarks toolbar under tabs.
- **Active tab contrast** `gnomeTheme.activeTabContrast`
Add more contrast to the active tab.
- **Close only selected tabs** `gnomeTheme.closeOnlySelectedTabs`
Show the close button on the selected tab only.
- **System icons** `gnomeTheme.systemIcons`
Use system theme icons instead of Adwaita icons included by theme.
> **Note:** This feature has a [known color bug](#icons-color-broken-with-system-icons).
- **No themed Icons** `gnomeTheme.noThemedIcons`
Use default Firefox icons instead of the included icons.
- **Symbolic tab icons** `gnomeTheme.symbolicTabIcons`
Make all tab icons look kinda like symbolic icons.
- **Hide WebRTC indicator** `gnomeTheme.hideWebrtcIndicator`
Hide redundant WebRTC indicator since GNOME provides their own privacy icons in the top right.
- **Hide unified extensions button** `gnomeTheme.hideUnifiedExtensions`
Hide unified extensions button from the navbar, you can also use `extensions.unifiedExtensions.enabled` instead, which is only going to work till Firefox 111.
- **Drag window from headerbar buttons** `gnomeTheme.dragWindowHeaderbarButtons`
Allow dragging the window from headerbar buttons.
> **Note:** This feature is BUGGED. It can activate the button with unpleasant behavior.
- **Tabs as headerbar** `gnomeTheme.tabsAsHeaderbar`
Place the tabs on the top of the window, and use the tabs bar to hold the window controls, like Firefox's standard tab bar.
> **Note:** Enabling with `gnomeTheme.hideSingleTab` will replace the single tab with a title bar.
- **OLED black theme** `gnomeTheme.oledBlack`
Change the dark theme into the black variant.
- **Show "List All Tabs" button on overflow** `gnomeTheme.allTabsButtonOnOverflow`
Show the `List All Tabs` button when the tabs bar is overflowing (when you have too many tabs that the width of the tabs no longer shrinks when new tabs are added).
- **Show "List All Tabs" button** `gnomeTheme.allTabsButton`
Show the `List All Tabs` button all the time, like stock Firefox.
- **Align tab title and icon to left** `gnomeTheme.tabAlignLeft`
Align the tab title and favicon to left of tab in place of center.
- **Bookmarks bar in fullscreen** `gnomeTheme.bookmarksOnFullscreen`
Show the bookmarks bar while in fullscreen.
### Extensions support
We also have optional features to enable support for some Firefox extensions.
> [!WARNING]
> Note that extension support is maintained by the community, so requests to support new extensions are not allowed, and the included extensions may be broken until someone shows up to fix them.
- **Adaptive Tab Bar Colour support** `gnomeTheme.extensions.adaptiveTabBarColour`
> **Note:** Adaptive Tab Bar Colour presently hard-codes the colours for the home page (both normal as well as private windows). When navigating from the home page to any other page, the colour of the UI might momentarily switch to the original firefox home page colour before switching back to the expected colour (this is especially noticeable in private windows). This only happens when navigating from the homepage to another page, subsequent navigations should be unaffected.
## Known bugs
### CSD have sharp corners
See upstream [bug](https://bugzilla.mozilla.org/show_bug.cgi?id=1408360).
#### Wayland fix:
1. Go to the `about:config` page
2. Search for the `layers.acceleration.force-enabled` preference and set it to true.
3. Now restart Firefox, and it should look good!
#### X11 fix:
1. Go to the `about:config` page
2. Type `mozilla.widget.use-argb-visuals`
3. Set it as a `boolean` and click on the add button
4. Now restart Firefox, and it should look good!
### Icons color broken with System icons
Icons might appear black where they should be white on some systems. I have no idea why, but you can adjust them directly in the `system-icons.css` file, look for `--gnome-icons-hack-filter` & `--gnome-window-icons-hack-filter` vars and play with css filters.
## Development
If you wanna mess around the styles and change something, you might find these
things useful.
To use the Inspector to debug the UI, open the developer tools (F12) on any
page, go to options, check both of those:
- Enable browser chrome and add-on debugging toolboxes
- Enable remote debugging
Now you can close those tools and press Ctrl+Alt+Shift+I to Inspect the browser
UI.
Also you can inspect any GTK3 application, for example type this into a terminal
and it will run Epiphany with the GTK Inspector, so you can check the CSS styles
of its elements too.
```sh
GTK_DEBUG=interactive epiphany
```
Feel free to use any parts of my code to develop your own themes, I don't force
any specific license on your code.
## Credits
Developed by **[Rafael Mardojai CM](https://github.com/rafaelmardojai)** and [contributors](https://github.com/rafaelmardojai/firefox-gnome-theme/graphs/contributors). Based on **[Luna Kurame](https://github.com/lunakurame/firefox-gnome-theme)**'s original work.
## Donate
If you want to support development, consider donating via [PayPal](https://paypal.me/RafaelMardojaiCM). Also consider donating upstream, [Firefox](https://donate.mozilla.org/) & [GNOME](https://www.gnome.org/donate/).

View file

@ -0,0 +1,12 @@
# These are supported funding model platforms
github: rafaelmardojai
patreon: rafaelmardojai
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: rafaelmardojai
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
custom: ['https://rafaelmardojai.com/donate/']

View file

@ -0,0 +1,77 @@
name: Bug Report
description: Report a bug in the theme
title: "[Bug] "
labels: [bug]
body:
- type: markdown
attributes:
value: |
> [!IMPORTANT]
> Note that extension support is maintained by the community, so extension bug reports will be closed. If you want to report something, use [Discussions](https://github.com/rafaelmardojai/firefox-gnome-theme/discussions).
- type: textarea
attributes:
label: Describe the bug
description: A clear and concise description of what the bug is. Include screenshots if needed.
validations:
required: true
- type: textarea
attributes:
label: Steps to reproduce
description: Write steps to reproduce the behavior if possible.
- type: textarea
attributes:
label: Expected behavior
description: A clear and concise description of what you expected to happen.
- type: input
attributes:
label: Operating System
description: e.g. Fedora, Ubuntu
validations:
required: true
- type: dropdown
attributes:
label: Firefox installation method
options:
- Distro package
- Flatpak
- Snap
validations:
required: true
- type: input
attributes:
label: Firefox version
validations:
required: true
- type: input
attributes:
label: Theme version
description: e.g. v108, master branch, specific commit
validations:
required: true
- type: checkboxes
attributes:
label: Optional features enabled
description: Select the features you have enabled in `about:config`.
options:
- label: gnomeTheme.hideSingleTab
- label: gnomeTheme.normalWidthTabs
- label: gnomeTheme.swapTabClose
- label: gnomeTheme.bookmarksToolbarUnderTabs
- label: gnomeTheme.activeTabContrast
- label: gnomeTheme.closeOnlySelectedTabs
- label: gnomeTheme.systemIcons
- label: gnomeTheme.noThemedIcons
- label: gnomeTheme.symbolicTabIcons
- label: gnomeTheme.hideWebrtcIndicator
- label: gnomeTheme.hideUnifiedExtensions
- label: gnomeTheme.dragWindowHeaderbarButtons
- label: gnomeTheme.tabsAsHeaderbar
- label: gnomeTheme.oledBlack
- label: gnomeTheme.allTabsButtonOnOverflow
- label: gnomeTheme.allTabsButton
- label: gnomeTheme.tabAlignLeft
- label: gnomeTheme.bookmarksOnFullscreen
- type: textarea
attributes:
label: Additional information

View file

@ -0,0 +1,32 @@
name: Feature Request
description: Suggest an idea for this project
title: "[Feature] "
labels: [enhancement]
body:
- type: markdown
attributes:
value: |
> [!IMPORTANT]
> Note that requests for support of specific Firefox extensions are not allowed and will be closed.
- type: textarea
attributes:
label: Is your feature request related to a problem? Please describe.
description: |
A clear and concise description of what the problem is.
Ex. I'm always frustrated when [...]
validations:
required: true
- type: textarea
attributes:
label: Describe the solution you'd like
description: A clear and concise description of what you want to happen.
validations:
required: true
- type: textarea
attributes:
label: Describe alternatives you've considered
description: A clear and concise description of any alternative solutions or features you've considered.
- type: textarea
attributes:
label: Additional information

View file

@ -0,0 +1,5 @@
blank_issues_enabled: false
contact_links:
- name: General Questions and Chat
url: https://matrix.to/#/#firefox-gnome-theme:matrix.org
about: Ask and chat about the theme in Matrix

View file

@ -0,0 +1,30 @@
name: Release
on:
release:
types: [published]
jobs:
publish_aur_package:
name: Publish AUR package
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Generate PKGBUILD
env:
RELEASE: ${{ github.event.release.tag_name }}
run: ./scripts/generate-pkgbuild.sh
- name: Publish firefox-gnome-theme to the AUR
uses: KSXGitHub/github-actions-deploy-aur@v2.7.2
with:
pkgname: firefox-gnome-theme
pkgbuild: ./PKGBUILD
commit_username: ${{ secrets.AUR_USERNAME }}
commit_email: ${{ secrets.AUR_EMAIL }}
ssh_private_key: ${{ secrets.AUR_SSH_PRIVATE_KEY }}
commit_message: ${{ github.event.release.tag_name }}
updpkgsums: true
test: true

View file

@ -0,0 +1,41 @@
name: Test
on: [push]
jobs:
test:
runs-on: ubuntu-latest
name: Smoke test
steps:
- name: Setup - Install Firefox.deb
run: |
sudo add-apt-repository ppa:mozillateam/ppa
echo '
Package: *
Pin: release o=LP-PPA-mozillateam
Pin-Priority: 1001
' | sudo tee /etc/apt/preferences.d/mozilla-firefox
echo 'Unattended-Upgrade::Allowed-Origins:: "LP-PPA-mozillateam:${distro_codename}";' | sudo tee /etc/apt/apt.conf.d/51unattended-upgrades-firefox
sudo apt update
sudo apt install firefox
- name: Setup 1 - create a Firefox profile
run: firefox --headless --createprofile test
- name: Test 1 - Run a web installer as in README
run: curl -s -o- https://raw.githubusercontent.com/rafaelmardojai/firefox-gnome-theme/master/scripts/install-by-curl.sh | bash
- name: Teardown 1
run: rm -rf ls ~/.mozilla/firefox/
- name: Setup 2 - create a new Firefox profile
run: firefox --headless --createprofile test
- name: Setup 2 - checkout the repo
uses: actions/checkout@v3
- name: Test 2 - Run a regular installer
run: ./scripts/install.sh
- name: Teardown 2
run: rm -rf ls ~/.mozilla/firefox/

View file

@ -0,0 +1,3 @@
customChrome.css
customContent.css
PKGBUILD

View file

@ -0,0 +1,44 @@
#! /usr/bin/env bash
firefoxInstallationPaths=(
# Firefox
~/.mozilla/firefox # Package
~/.var/app/org.mozilla.firefox/.mozilla/firefox # Flatpak
~/snap/firefox/common/.mozilla/firefox # Snap
"$HOME/Library/Application Support/Firefox" # MacOS Package
~/AppData/Roaming/Mozilla/Firefox # Microsoft Windows
# Librewolf
~/.librewolf # Package
~/.var/app/io.gitlab.librewolf-community/.librewolf # Flatpak
# Floorp
~/.floorp # Package
~/.var/app/one.ablaze.floorp/.floorp # Flatpak
# Waterfox
~/.var/app/net.waterfox.waterfox/.waterfox # Flatpak
)
installScript="./scripts/install.sh"
folderArg=""
foldersFoundCount=0
eval "chmod +x ${installScript}"
for folder in "${firefoxInstallationPaths[@]}"; do
if [ -d "$folder" ]; then
echo Firefox installation folder found
folderArg=" -f \"$folder\""
eval ${installScript}${folderArg}
foldersFoundCount+=1
fi
done
if [ $foldersFoundCount = 0 ];then
echo No firefox folder found ;
fi

View file

@ -0,0 +1,42 @@
#!/bin/sh
# Exit on error
set -e
if [ -z "$RELEASE" ]; then
echo "\$RELEASE not set, aborting"
exit 1
fi
pkgver=$(echo "$RELEASE" | sed 's/v//')
cat << EOF > ./PKGBUILD
# Maintainer: Marko Korhonen <firefox-gnome-theme@marko.korhonen.cc>
# Based on the existing AUR package firefox-gnome-theme-git
# This PKGBUILD is automatically generated by https://github.com/rafaelmardojai/firefox-gnome-theme/blob/$RELEASE/scripts/generate-pkgbuild.sh
# when a release is published on GitHub. Do not edit this file directly.
pkgname=firefox-gnome-theme
pkgver=$pkgver
pkgrel=1
pkgdesc='A GNOME theme for Firefox'
arch=('any')
url="https://github.com/rafaelmardojai/\$pkgname"
license=('Unlicense')
optdepends=('firefox: primary compatible browser' 'librewolf: alternative compatible browser')
conflicts=("\$pkgname-git")
install="\$pkgname.install"
source=("\$pkgname-\$pkgver.tar.gz::https://github.com/rafaelmardojai/\$pkgname/archive/refs/tags/v\$pkgver.tar.gz" "INSTALL.md")
md5sums=('TO_BE_GENERATED'
'25f18456221ffc91f472b1abff8aae84')
package() {
cd "\$srcdir/\$pkgname-\$pkgver"
install -d "\$pkgdir/usr/lib/\$pkgname"
cp -ra theme userChrome.css userContent.css configuration "\$pkgdir/usr/lib/\$pkgname"
# Install docs
install -Dm644 README.md "\$pkgdir/usr/share/doc/\$pkgname/README.md"
install -Dm644 "\$srcdir/INSTALL.md" "\$pkgdir/usr/share/doc/\$pkgname/INSTALL.md"
}
EOF

View file

@ -0,0 +1,20 @@
#!/usr/bin/env bash
VERSION=$(curl --silent "https://api.github.com/repos/rafaelmardojai/firefox-gnome-theme/releases/latest" | grep tag_name | cut -d'"' -f4)
FILENAME=firefox-gnome-theme-$VERSION.tar.gz
(
cd $(mktemp -d) || exit 1
mkdir firefox-gnome-theme
cd firefox-gnome-theme
curl -LJo $FILENAME https://github.com/rafaelmardojai/firefox-gnome-theme/tarball/$VERSION
tar -xzf $FILENAME --strip-components=1
chmod +x scripts/auto-install.sh
./scripts/auto-install.sh
)

View file

@ -0,0 +1,156 @@
#!/usr/bin/env bash
THEMEDIRECTORY=$(cd "$(dirname $0)" && cd .. && pwd)
FIREFOXFOLDER=~/.mozilla/firefox
PROFILENAME=""
# Get options.
while getopts 'f:p:t:' flag; do
case "${flag}" in
f) FIREFOXFOLDER="${OPTARG}" ;;
p) PROFILENAME="${OPTARG}" ;;
*)
echo "Gnome Theme Install Script:"
echo " -f <firefox_folder_path>. Set custom Firefox folder path."
echo " -p <profile_name>. Set custom profile name."
echo " -h to show this message."
exit 0
;;
esac
done
# A wrapper around the `sed` command to handle platform-specific differences.
#
# sed in BSD platforms need this extra argument when using '-i' to specify no backup file.
function _sed(){
if [[ "$OSTYPE" == *"linux"* ]] || [[ "$OSTYPE" == *msys* ]]; then
sed "$@"
return $?
fi
if [[ "$1" == "-i" ]]; then
shift 1
sed -i '' "$@"
return $?
fi
sed "$@"
}
function saveProfile(){
local PROFILE_PATH="$1"
cd "$FIREFOXFOLDER/$PROFILE_PATH" || { echo "FAIL, Firefox profile path was not found."; exit 1; }
# Create a chrome directory if it doesn't exist.
mkdir -p chrome
cd chrome || { echo "FAIL, couldn't create chrome dir in $PWD, please check if there's something else named 'chrome'."; exit 1; }
# Copy theme repo inside
echo "Copying repo in $PWD" >&2
[ -e ./firefox-gnome-theme ] || mkdir firefox-gnome-theme
cp -fR "$THEMEDIRECTORY/." "$PWD/firefox-gnome-theme/" || { echo "FAIL, couldn't copy to $PWD/chrome, please check if there's something named 'chrome' or 'chrome/firefox-gnome-theme', that is not a dir."; exit 1; }
# Create single-line user CSS files if non-existent or empty.
if [ -s userChrome.css ]; then
# Remove older theme imports
_sed 's/@import "firefox-gnome-theme.*.//g' userChrome.css | _sed '/^\s*$/d' > tmpfile && mv tmpfile userChrome.css
echo >> userChrome.css
else
echo >> userChrome.css
fi
# Import this theme at the beginning of the CSS files.
_sed -i '1s/^/@import "firefox-gnome-theme\/userChrome.css";\n/' userChrome.css
# Check if the import was set correctly
if ! cat userChrome.css | grep "firefox-gnome-theme" > /dev/null; then
echo "Unable to add the main import in 'userChrome.css', it needs to be set manually." >&2
fi
# Create single-line user content CSS files if non-existent or empty. (userContent)
if [ -s userContent.css ]; then
# Remove older theme imports
_sed 's/@import "firefox-gnome-theme.*.//g' userContent.css | _sed '/^\s*$/d' > tmpfile1 && mv tmpfile1 userContent.css
echo >> userContent.css
else
echo >> userContent.css
fi
# Import this theme at the beginning of the CSS files. (userContent)
_sed -i '1s/^/@import "firefox-gnome-theme\/userContent.css";\n/' userContent.css
# Check if the import was set correctly (userContent)
if ! cat userContent.css | grep "firefox-gnome-theme" > /dev/null; then
echo "Unable to add the main import in 'userContent.css', it needs to be set manually." >&2
fi
cd ..
echo "Set configuration to user.js file" >&2
theme_prefs=()
while IFS= read -r line; do
theme_prefs+=("$line")
done < <(grep "user_pref" chrome/firefox-gnome-theme/configuration/user.js)
theme_prefs_unvalued=()
while IFS= read -r line; do
theme_prefs_unvalued+=("$line")
done < <(grep "user_pref" chrome/firefox-gnome-theme/configuration/user.js | cut -d'"' -f 2)
if [ ! -f "user.js" ]; then
mv chrome/firefox-gnome-theme/configuration/user.js .
else
cp user.js user.js.bak
OLDIFS=$IFS
IFS='/'
for t in "${theme_prefs_unvalued[@]}"; do
_sed -i "/$t/d" "user.js"
done
for f in "${theme_prefs[@]}"; do
echo "$f" >> "user.js"
done
IFS=$OLDIFS
fi
echo "Done." >&2
cd ..
}
PROFILES_FILE="${FIREFOXFOLDER}/profiles.ini"
if [ ! -f "${PROFILES_FILE}" ]; then
>&2 echo "FAIL, please check Firefox installation, unable to find 'profile.ini' at ${FIREFOXFOLDER}."
exit 1
fi
echo "'profiles.ini' found in ${FIREFOXFOLDER}"
PROFILES_PATHS=($(grep -E "^Path=" "${PROFILES_FILE}" | tr -d '\n' | _sed -e 's/\s\+/SPACECHARACTER/g' | _sed 's/Path=/::/g' ))
PROFILES_PATHS+=::
PROFILES_ARRAY=()
if [ "${PROFILENAME}" != "" ];
then
echo "Using ${PROFILENAME} profile"
PROFILES_ARRAY+=${PROFILENAME}
else
echo "Finding all available profiles";
while [[ "$PROFILES_PATHS" ]]; do
PROFILES_ARRAY+=( "${PROFILES_PATHS%%::*}" )
PROFILES_PATHS=${PROFILES_PATHS#*::}
done
fi
if [ ${#PROFILES_ARRAY[@]} -eq 0 ]; then
echo "FAIL, no Firefox profile found in $PROFILES_FILE".;
else
for i in "${PROFILES_ARRAY[@]}"
do
if [[ -n "$i" ]];
then
echo "Installing theme for $(sed 's/SPACECHARACTER/ /g' <<< $i) profile.";
saveProfile "$(sed 's/SPACECHARACTER/ /g' <<< $i)"
fi;
done
fi

View file

@ -0,0 +1,12 @@
#!/bin/sh
git checkout beta
git rebase master
git push origin beta -f
git checkout nightly
git rebase beta
git push origin nightly -f
git checkout master

View file

@ -0,0 +1,80 @@
@namespace xul url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
/* Variables that start with --gnome- are added by me and are assigned
* to elements somewhere in this code. The rest of the variables are
* built-in in Firefox, so you need to add an !important if you wanna
* override them. */
@media (prefers-color-scheme: dark) {
:root {
/* Accent */
--gnome-accent-bg: #1161CB;
--gnome-accent: #1161CB;
--gnome-toolbar-star-button: var(--gnome-palette-yellow-1);
/* Window */
--gnome-window-background: #000000;
--gnome-window-color: white;
--gnome-view-background: #1e1e1e;
--gnome-sidebar-background: #303030;
--gnome-secondary-sidebar-background: #2a2a2a;
/* Card */
--gnome-card-background: rgba(255, 255, 255, 0.08);
--gnome-card-shade-color: color-mix(in srgb, black 36%, transparent);
/* Menu */
--gnome-menu-background: #303030;
/* Header bar */
--gnome-headerbar-background: #000000;
--gnome-headerbar-shade-color: rgba(0, 0, 0, 0.9);
/* Toolbars */
--gnome-toolbar-icon-fill: #eeeeec;
/* Tabs */
--gnome-tabbar-tab-hover-background: #252524; /* Hardcoded color */
--gnome-tabbar-tab-active-background: #191918; /* Hardcoded color */
--gnome-tabbar-tab-active-background-contrast: #4F4F4F; /* Hardcoded color */
--gnome-tabbar-tab-active-hover-background: #272725; /* Hardcoded color */
--gnome-tabbar-identity-color-green: var(--gnome-palette-green-1);
--gnome-tabbar-identity-color-yellow: var(--gnome-palette-yellow-2);
--gnome-tabbar-identity-color-orange: var(--gnome-palette-orange-3);
--gnome-tabbar-identity-color-red: var(--gnome-palette-red-1);
--gnome-tabbar-identity-color-purple: var(--gnome-palette-purple-1);
/* Text color for Firefox Logo in new private tab */
--gnome-private-wordmark: #FBFBFE;
/* New private tab background */
--gnome-private-in-content-page-background: #242424;
/* Private browsing info box */
--gnome-private-text-primary-color: #FBFBFE;
}
/* Backdrop colors */
:root:-moz-window-inactive {
--gnome-tabbar-tab-hover-background: #2c2c2c; /* Hardcoded color */
--gnome-tabbar-tab-active-background: #2e2e2e; /* Hardcoded color */
}
/* Private colors */
:root[privatebrowsingmode="temporary"] {
--gnome-accent-fg: #78aeed;
/* Headerbar */
--gnome-headerbar-background: #252F49 !important;
/* Tabs */
--gnome-tabbar-tab-hover-background: #343e56; /* Hardcoded color */
--gnome-tabbar-tab-active-background: #343e56; /* Hardcoded color */
--gnome-tabbar-tab-active-background-contrast: #495675; /* Hardcoded color */
--gnome-tabbar-tab-active-hover-background: #414a61; /* Hardcoded color */
}
/* Private and backdrop colors */
:root[privatebrowsingmode="temporary"]:-moz-window-inactive {
--gnome-headerbar-background: #252F49 !important;
--gnome-tabbar-tab-hover-background: #242c3f; /* Hardcoded color */
--gnome-tabbar-tab-active-background: #272e41; /* Hardcoded color */
}
}

View file

@ -0,0 +1,71 @@
@namespace xul url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
/* Variables that start with --gnome- are added by me and are assigned
* to elements somewhere in this code. The rest of the variables are
* built-in in Firefox, so you need to add an !important if you wanna
* override them. */
@media (prefers-color-scheme: dark) {
:root {
/* Colors */
--gnome-standalone-color-oklab: max(l, 0.85) a b;
--gnome-destructive-bg: var(--gnome-palette-red-4);
--gnome-success-bg: var(--gnome-palette-green-5);
--gnome-warning-bg: #cd9309;
--gnome-error-bg: var(--gnome-palette-red-4);
--gnome-toolbar-star-button: var(--gnome-palette-yellow-1);
/* Window */
--gnome-window-background: #222226;
--gnome-window-color: white;
--gnome-view-background: #1e1e1e;
--gnome-sidebar-background: #2e2e32;
--gnome-secondary-sidebar-background: #28282c;
/* Card */
--gnome-card-background: rgba(255, 255, 255, 0.08);
--gnome-card-shade-color: rgba(0, 0, 6, 0.36);
/* Menu */
--gnome-menu-background: #36363a;
/* Header bar */
--gnome-headerbar-background: #2e2e32;
--gnome-headerbar-shade-color: rgba(0, 0, 0, 0.9);
/* Toolbars */
--gnome-toolbar-icon-fill: #ffffff;
/* Tabs */
--gnome-tabbar-identity-color-green: var(--gnome-palette-green-1);
--gnome-tabbar-identity-color-yellow: var(--gnome-palette-yellow-2);
--gnome-tabbar-identity-color-orange: var(--gnome-palette-orange-3);
--gnome-tabbar-identity-color-red: var(--gnome-palette-red-1);
--gnome-tabbar-identity-color-purple: var(--gnome-palette-purple-1);
/* Miscellaneous */
--gnome-shade-color: rgba(0, 0, 6, 0.25);
/* Text color for Firefox Logo in new private tab */
--gnome-private-wordmark: #FBFBFE;
/* New private tab background */
--gnome-private-in-content-page-background: #222226;
/* Private browsing info box */
--gnome-private-text-primary-color: #FBFBFE;
/* Backdrop colors */
&:-moz-window-inactive {
--gnome-sidebar-background: #28282c;
--gnome-secondary-sidebar-background: #252529;
}
/* Private browsing colors */
&[privatebrowsingmode="temporary"] {
/* Headerbar */
--gnome-headerbar-background: #2e2540 !important;
&:-moz-window-inactive {
--gnome-headerbar-background: #241d34 !important;
}
}
}
}

View file

@ -0,0 +1,177 @@
@namespace xul url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
/* Variables that start with --gnome- are added by me and are assigned
* to elements somewhere in this code. The rest of the variables are
* built-in in Firefox, so you need to add an !important if you wanna
* override them. */
:root {
/* Pallete */
--gnome-palette-blue-1: #99c1f1;
--gnome-palette-blue-2: #62a0ea;
--gnome-palette-blue-3: #3584e4;
--gnome-palette-blue-4: #1c71d8;
--gnome-palette-blue-5: #1a5fb4;
--gnome-palette-green-1: #8ff0a4;
--gnome-palette-green-2: #57e389;
--gnome-palette-green-3: #33d17a;
--gnome-palette-green-4: #2ec27e;
--gnome-palette-green-5: #26a269;
--gnome-palette-yellow-1: #f9f06b;
--gnome-palette-yellow-2: #f8e45c;
--gnome-palette-yellow-3: #f6d32d;
--gnome-palette-yellow-4: #f5c211;
--gnome-palette-yellow-5: #e5a50a;
--gnome-palette-orange-1: #ffbe6f;
--gnome-palette-orange-2: #ffa348;
--gnome-palette-orange-3: #ff7800;
--gnome-palette-orange-4: #e66100;
--gnome-palette-orange-5: #c64600;
--gnome-palette-red-1: #f66151;
--gnome-palette-red-2: #ed333b;
--gnome-palette-red-3: #e01b24;
--gnome-palette-red-4: #c01c28;
--gnome-palette-red-5: #a51d2d;
--gnome-palette-purple-1: #dc8add;
--gnome-palette-purple-2: #c061cb;
--gnome-palette-purple-3: #9141ac;
--gnome-palette-purple-4: #813d9c;
--gnome-palette-purple-5: #613583;
--gnome-palette-brown-1: #cdab8f;
--gnome-palette-brown-2: #b5835a;
--gnome-palette-brown-3: #986a44;
--gnome-palette-brown-4: #865e3c;
--gnome-palette-brown-5: #63452c;
--gnome-palette-light-1: #ffffff;
--gnome-palette-light-2: #f6f5f4;
--gnome-palette-light-3: #deddda;
--gnome-palette-light-4: #c0bfbc;
--gnome-palette-light-5: #9a9996;
--gnome-palette-dark-1: #77767b;
--gnome-palette-dark-2: #5e5c64;
--gnome-palette-dark-3: #3d3846;
--gnome-palette-dark-4: #241f31;
--gnome-palette-dark-5: #000000;
/* Colors */
--gnome-standalone-color-oklab: min(l, 0.5) a b;
--gnome-accent-bg: AccentColor;
--gnome-accent: oklab(from var(--gnome-accent-bg) var(--gnome-standalone-color-oklab));
--gnome-destructive-bg: var(--gnome-palette-red-3);
--gnome-destructive: oklab(from var(--gnome-destructive-bg) var(--gnome-standalone-color-oklab));
--gnome-success-bg: var(--gnome-palette-green-4);
--gnome-success: oklab(from var(--gnome-success-bg) var(--gnome-standalone-color-oklab));
--gnome-warning-bg: var(--gnome-palette-yellow-5);
--gnome-warning: oklab(from var(--gnome-warning-bg) var(--gnome-standalone-color-oklab));
--gnome-error-bg: var(--gnome-palette-red-3);
--gnome-error: oklab(from var(--gnome-error-bg) var(--gnome-standalone-color-oklab));
--gnome-focus-border-color: color-mix(in srgb, var(--gnome-accent) 50%, transparent);
--gnome-selection-bg: color-mix(in srgb, var(--gnome-accent-bg) 30%, transparent);
--gnome-toolbar-star-button: var(--gnome-palette-yellow-5);
/* Window */
--gnome-window-background: #fafafb;
--gnome-window-color: rgba(0, 0, 6, 0.8);
--gnome-view-background: #ffffff;
--gnome-view-color: var(--gnome-window-color);
--gnome-view-selected-background: color-mix(in srgb, var(--gnome-accent-bg) 25%, transparent);
--gnome-view-selected-hover-background: color-mix(in srgb, var(--gnome-accent-bg) 32%, transparent);
--gnome-view-selected-active-background: color-mix(in srgb, var(--gnome-accent-bg) 39%, transparent);
--gnome-sidebar-background: #ebebed;
--gnome-secondary-sidebar-background: #f3f3f5;
/* Card */
--gnome-card-background: #ffffff;
--gnome-card-shade-color: rgba(0, 0, 6, 0.07);
/* Menu */
--gnome-menu-background: #ffffff;
--gnome-menu-color: var(--gnome-window-color);
--gnome-menu-shadow: 0 1px 5px 1px rgba(0, 0, 0, .09), 0 2px 14px 3px rgba(0, 0, 0, .05);
--gnome-menu-button-hover-background: var(--gnome-button-background);
--gnome-menu-separator-color: var(--gnome-border-color);
/* Header bar */
--gnome-headerbar-background: #ffffff;
--gnome-headerbar-shade-color: rgba(0, 0, 0, 0.12);
/* Toolbars */
--gnome-toolbar-background: var(--gnome-headerbar-background);
--gnome-toolbar-border-color: var(--gnome-headerbar-shade-color);
--gnome-toolbar-icon-fill: #2f2f2f;
/* Elements */
--gnome-border-color: color-mix(in srgb, currentColor 15%, transparent);
--gnome-hover-color: color-mix(in srgb, currentColor 7%, transparent);
--gnome-active-color: color-mix(in srgb, currentColor 16%, transparent);
--gnome-selected-color: color-mix(in srgb, currentColor 10%, transparent);
--gnome-selected-hover-color: color-mix(in srgb, currentColor 13%, transparent);
--gnome-selected-active-color: color-mix(in srgb, currentColor 19%, transparent);
--gnome-trough-background: color-mix(in srgb, currentColor 15%, transparent);
--gnome-trough-hover-background: color-mix(in srgb, currentColor 20%, transparent);
--gnome-trough-active-background: color-mix(in srgb, currentColor 25%, transparent);
/* Buttons */
--gnome-button-background: color-mix(in srgb, currentColor 10%, transparent);
--gnome-button-hover-background: color-mix(in srgb, currentColor 15%, transparent);
--gnome-button-active-background: color-mix(in srgb, currentColor 30%, transparent);
--gnome-button-checked-background: var(--gnome-button-active-background);
--gnome-button-checked-hover-background: color-mix(in srgb, currentColor 35%, transparent);
--gnome-button-checked-active-background: color-mix(in srgb, currentColor 40%, transparent);
--gnome-button-suggested-background: var(--gnome-accent-bg);
--gnome-button-destructive-background: color-mix(in srgb, currentColor 15%, transparent);
--gnome-button-destructive-hover-background: color-mix(in srgb, currentColor 20%, transparent);
--gnome-button-destructive-active-background: color-mix(in srgb, currentColor 35%, transparent);
/* Entries */
--gnome-entry-background: var(--gnome-button-background);
--gnome-entry-color: var(--gnome-view-color);
--gnome-entry-focused-border-color: color-mix(in srgb, var(--gnome-accent) 50%, transparent);
--gnome-entry-error-focused-border-color: color-mix(in srgb, var(--gnome-error) 50%, transparent);
/* Tabs */
--gnome-tabbar-background: var(--gnome-headerbar-background);
--gnome-tabbar-tab-separator-color: var(--gnome-border-color);
--gnome-tabbar-tab-hover-background: color-mix(in srgb, currentColor 7%, var(--gnome-tabbar-background));
--gnome-tabbar-tab-active-background: color-mix(in srgb, currentColor 10%, var(--gnome-tabbar-background));
--gnome-tabbar-tab-active-background-contrast: color-mix(in srgb, currentColor 20%, var(--gnome-tabbar-background));
--gnome-tabbar-tab-active-hover-background: color-mix(in srgb, currentColor 13%, var(--gnome-tabbar-background));
--gnome-tabbar-tab-needs-attetion: var(--gnome-palette-blue-2);
--gnome-tabbar-identity-color-blue: var(--gnome-accent);
--gnome-tabbar-identity-color-turquoise: #00c79a;
--gnome-tabbar-identity-color-green: var(--gnome-palette-green-5);
--gnome-tabbar-identity-color-yellow: #ae7b03;
--gnome-tabbar-identity-color-orange: var(--gnome-palette-orange-4);
--gnome-tabbar-identity-color-red: var(--gnome-palette-red-3);
--gnome-tabbar-identity-color-pink: #ff4b84;
--gnome-tabbar-identity-color-purple: var(--gnome-palette-purple-4);
/* Miscellaneous */
--gnome-shade-color: rgba(0, 0, 6, 0.07);
/* Text color for Firefox Logo in new private tab */
--gnome-private-wordmark: #20123A;
/* New private tab background */
--gnome-private-in-content-page-background: #FAFAFA;
/* Private browsing info box */
--gnome-private-text-primary-color: #15141A;
/* Backdrop colors */
&:-moz-window-inactive {
--gnome-headerbar-background: var(--gnome-window-background) !important;
--gnome-sidebar-background: #f2f2f4;
--gnome-secondary-sidebar-background: #f6f6fa;
--gnome-selection-bg: color-mix(in srgb, var(--gnome-view-color) 10%, transparent);
}
/* Private browsing colors */
&[privatebrowsingmode="temporary"] {
/* Headerbar */
--gnome-headerbar-background: #f1eafa !important;
&:-moz-window-inactive {
--gnome-headerbar-background: #f3eef9 !important;
}
}
}

View file

@ -0,0 +1,73 @@
:root,
:root[privatebrowsingmode="temporary"],
:is(:root, :root[privatebrowsingmode="temporary"]):-moz-window-inactive {
/* Colors */
--gnome-accent-bg: AccentColor !important;
/* Window */
--gnome-window-color: var(--lwt-text-color);
--gnome-window-background: var(--lwt-accent-color);
--gnome-sidebar-background: var(--lwt-accent-color);
--gnome-secondary-sidebar-background: var(--sidebar-background-color);
/* Menu */
--gnome-menu-background: var(--arrowpanel-background);
--gnome-menu-color: var(--lwt-text-color);
/* Header bar */
--gnome-headerbar-background: var(--toolbar-bgcolor) !important;
/* Toolbars */
--gnome-toolbar-border-color: transparent;
--gnome-toolbar-background: var(--toolbar-bgcolor);
--gnome-toolbar-icon-fill: var(--toolbarbutton-icon-fill);
/* Entries */
--gnome-entry-background: var(--toolbar-field-background-color);
--gnome-entry-color: var(--toolbar-field-color);
--gnome-inactive-entry-color: hsl(from var(--gnome-entry-color) h s calc(l + 5%));
--gnome-entry-focused-border-color: var(--gnome-selection-bg);
/* Tabs */
--gnome-tabbar-background: var(--gnome-headerbar-background);
--gnome-tabbar-tab-hover-background: color-mix(in oklab, var(--gnome-tabbar-background), var(--lwt-text-color) 10%);
--gnome-tabbar-tab-active-background: var(--tab-selected-bgcolor);
--gnome-tabbar-tab-active-hover-background: color-mix(in oklab, var(--gnome-tabbar-tab-active-background), var(--lwt-text-color) 10%);
/* 'New Tab' and 'New Private Tab' pages */
&:has(
tab:where(
[image="chrome://branding/content/icon32.png"],
[image="chrome://browser/skin/privatebrowsing/favicon.svg"]
)[selected]
) {
--lwt-accent-color: var(--gnome-private-in-content-page-background) !important;
--lwt-text-color: rgba(0, 0, 0, 0.8) !important;
--sidebar-background-color: #f3f3f3 !important;
@media (prefers-color-scheme: dark) {
--lwt-text-color: white !important;
--sidebar-background-color: #2a2a2a !important;
}
--toolbar-bgcolor: var(--lwt-accent-color) !important;
--toolbar-color: var(--lwt-text-color) !important;
--toolbar-field-color: var(--lwt-text-color) !important;
--toolbarbutton-icon-fill: var(--lwt-text-color) !important;
--toolbar-field-focus-background-color: Field !important;
--arrowpanel-background: color-mix(in oklab, var(--toolbar-bgcolor), var(--lwt-text-color) 10%) !important;
--toolbar-field-background-color: var(--arrowpanel-background) !important;
--tab-selected-bgcolor: color-mix(in oklab, var(--gnome-tabbar-background), var(--lwt-text-color) 20%) !important;
--lwt-tab-line-color: var(--tab-selected-bgcolor) !important;
}
}
.menupopup-arrowscrollbox, window[role="dialog"] {
--gnome-menu-background: Menu;
--gnome-window-color: MenuText;
--gnome-toolbar-icon-fill: MenuText;
}
.urlbarView-url {
--gnome-headerbar-mix: color-mix(in oklch, var(--gnome-headerbar-background), var(--lwt-text-color) 60%);
--gnome-accent: oklch(from var(--gnome-headerbar-mix) l calc(c + 0.01) h);
}
#sidebar-launcher-splitter, #sidebar-splitter {
background-color: color-mix(in oklab, var(--lwt-accent-color), var(--lwt-text-color) 10%) !important;
}

View file

@ -0,0 +1,48 @@
/* Variables */
@import "variables.css";
@import "icons/icons.css";
@import "colors/light.css";
@import "colors/dark.css";
@import "colors/black.css" screen and -moz-pref("gnomeTheme.oledBlack");
/* Core */
@import "parts/toolbox.css";
@import "parts/headerbar.css";
@import "parts/csd.css";
@import "parts/urlbar.css";
@import "parts/tabsbar.css";
@import "parts/findbar.css";
@import "parts/sidebar.css";
@import "parts/lists.css";
@import "parts/buttons.css";
@import "parts/buttons-fixes.css";
@import "parts/entries.css";
@import "parts/controls.css";
@import "parts/icons.css";
@import "parts/popups.css";
@import "parts/popups-contents.css";
@import "parts/dialogs.css";
@import "parts/remove-white-flash.css";
/* Platforms */
@import "platforms/windows.css" screen and (-moz-platform: windows);
/* Extensions support */
@import "extensions/adaptive-tab-bar-colour.css" screen and -moz-pref("gnomeTheme.extensions.adaptiveTabBarColour");
/* Optional */
@import "system-icons.css" screen and -moz-pref("gnomeTheme.systemIcons");
@import "symbolic-tab-icons.css" screen and -moz-pref("gnomeTheme.symbolicTabIcons");
@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
/* Set theme version text in customization panel */
#customization-footer::before {
background: url(../icon.svg) no-repeat;
background-size: contain;
content: "Firefox GNOME theme v143";
padding: 9px 9px 9px 50px;
}

View file

@ -0,0 +1,5 @@
<svg height="14" width="14" xmlns="http://www.w3.org/2000/svg">
<g style="display:inline">
<path d="M388 342c-2.207 0-4 1.793-4 4s1.793 4 4 4c2.208 0 4-1.793 4-4s-1.792-4-4-4z" transform="translate(-381 -339)" fill="context-fill" fill-opacity="context-fill-opacity"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 280 B

View file

@ -0,0 +1,5 @@
<svg height="14" width="14" xmlns="http://www.w3.org/2000/svg">
<g style="display:inline">
<path d="M388 342c-2.207 0-4 1.793-4 4s1.793 4 4 4c2.208 0 4-1.793 4-4s-1.792-4-4-4z" transform="translate(-381 -339)" fill="#2e3436"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 239 B

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5 KiB

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
<path d="m 15 3.484375 l -1 -1 l -7.46875 7.515625 l -3.414062 -3.476562 l -2 2 l 5.414062 5.476562 l 9.46875 -9.515625 z m 0 0" fill="context-fill" fill-opacity="context-fill-opacity"/>
</svg>

After

Width:  |  Height:  |  Size: 325 B

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
<path d="m 15 3.484375 l -1 -1 l -7.46875 7.515625 l -3.414062 -3.476562 l -2 2 l 5.414062 5.476562 l 9.46875 -9.515625 z m 0 0" fill="#2e3436"/>
</svg>

After

Width:  |  Height:  |  Size: 284 B

View file

@ -0,0 +1,125 @@
# Generate stylesheet with GNOME SVG icons as CSS variables.
#
# Fetch icons from official git repos and convert them to inline CSS variables
# adding support for reoloring in Firefox in the process.
#
# Git is required to run the script.
#
# Partially inspired by https://gitlab.gnome.org/World/design/icon-library/-/blob/master/update-icons.py
import glob
import json
import logging
import os
import shutil
import subprocess
import xml.etree.ElementTree as ET
from typing import TypedDict
from urllib.parse import quote
ABS_PATH = os.path.dirname(os.path.abspath(__file__))
ICONS_FILE = os.path.join(ABS_PATH, "icons.json")
CSS_FILE = os.path.join(ABS_PATH, "icons.css")
ICONS_REPO_URL = "https://gitlab.gnome.org/GNOME/adwaita-icon-theme.git"
ICONS_REPO_PATH = os.path.join(ABS_PATH, "adwaita-icon-theme")
ICONS_KIT_REPO_URL = (
"https://gitlab.gnome.org/Teams/Design/icon-development-kit-www.git"
)
ICONS_KIT_REPO_PATH = os.path.join(ABS_PATH, "icon-development-kit-www")
ET.register_namespace("", "http://www.w3.org/2000/svg")
class IconsDefinition(TypedDict):
icons: list[str]
def main():
# Get icons repositories
if not os.path.exists(ICONS_REPO_PATH):
subprocess.call(["git", "clone", "--depth", "1", ICONS_REPO_URL], cwd=ABS_PATH)
if not os.path.exists(ICONS_KIT_REPO_PATH):
subprocess.call(
["git", "clone", "--depth", "1", ICONS_KIT_REPO_URL], cwd=ABS_PATH
)
# Get icons name to path mappings
icon_paths = {
**lookup_icons(f"{ICONS_KIT_REPO_PATH}/img/symbolic"), # Extra GNOME icons kit
**lookup_icons(f"{ICONS_REPO_PATH}/Adwaita/symbolic"), # Core GNOME icons
**lookup_icons(f"{ABS_PATH}/custom", False), # Custom icons
}
# Load definition of icons needed by the theme
with open(ICONS_FILE, "r") as f:
icons_def: IconsDefinition = json.load(f)
# Process icons SVGs for CSS
icons_svg: dict[str, str] = {}
for icon in icons_def["icons"]:
if icon not in icon_paths:
logging.warning(f"No icon file found for '{icon}'")
continue
text = process_svg(icon_paths[icon])
svg = quote(text, safe=" =:/'") # URL encode the icon, omitting some characters
icons_svg[icon] = svg
# Write CSS file
with open(CSS_FILE, "w") as css:
css.write(":root {\n")
for name, svg in icons_svg.items():
css.write(f'\t--gnome-icon-{name}: url("data:image/svg+xml,{svg}");\n')
css.write("}")
# Remove repos dirs
shutil.rmtree(ICONS_REPO_PATH)
shutil.rmtree(ICONS_KIT_REPO_PATH)
def lookup_icons(icons_folder: str, has_subdirs=True) -> dict[str, str]:
lookup: dict[str, str] = {}
for path in glob.glob(
f"{icons_folder}/{'**/' if has_subdirs else ''}*-symbolic.svg"
):
filename = os.path.basename(path)
name = filename.replace(".svg", "")
lookup[name] = path
return lookup
def process_svg(filename: str) -> str:
"""
Process SVG's XML to be one liner and add Mozilla's SVG coloring properties
"""
tree = ET.parse(filename)
root = tree.getroot()
# Set context-* values for fill and fill-opacity
# Needed for icon recolor from CSS
for tag in ("{http://www.w3.org/2000/svg}g", "{http://www.w3.org/2000/svg}path"):
for elem in root.iter(tag):
if "class" not in elem.attrib: # Paths with class name are colored overlays
if "fill" in elem.attrib:
elem.set("fill", "context-fill")
elem.set("fill-opacity", "context-fill-opacity")
if "stroke" in elem.attrib:
elem.set("stroke", "context-stroke")
elem.set("stroke-opacity", "context-stroke-opacity")
# Strip line breasks and indentation
for elem in root.iter("*"):
if elem.text is not None:
elem.text = elem.text.strip()
if elem.tail is not None:
elem.tail = elem.tail.strip()
text = ET.tostring(root, "unicode")
text = text.replace('"', "'") # Use single quotes
return text
main()

View file

@ -0,0 +1,68 @@
{
"icons": [
"application-x-addon-symbolic",
"applications-engineering-symbolic",
"audio-volume-muted-symbolic",
"audio-speakers-symbolic",
"build-configure-symbolic",
"bullet-symbolic",
"chain-link-symbolic",
"channel-insecure-symbolic",
"channel-secure-symbolic",
"chat-symbolic",
"edit-clear-symbolic",
"edit-copy-symbolic",
"edit-cut-symbolic",
"edit-find-symbolic",
"edit-paste-symbolic",
"eye-not-looking-symbolic",
"firefox-symbolic",
"folder-download-symbolic",
"folder-symbolic",
"general-properties-symbolic",
"go-down-symbolic",
"go-next-symbolic",
"go-previous-symbolic",
"go-up-symbolic",
"history-undo-symbolic",
"info-outline-symbolic",
"key-symbolic",
"list-add-symbolic",
"mail-unread-symbolic",
"newspaper-symbolic",
"non-starred-symbolic",
"open-menu-symbolic",
"pan-down-symbolic",
"pan-end-symbolic",
"pan-start-symbolic",
"pan-up-symbolic",
"pip-in-symbolic",
"pip-out-symbolic",
"play-large-disabled-symbolic",
"preferences-system-symbolic",
"preferences-system-time-symbolic",
"printer-symbolic",
"process-stop-symbolic",
"security-high-symbolic",
"security-low-symbolic",
"select-symbolic",
"settings-symbolic",
"sidebar-show-symbolic",
"sidebar-show-right-symbolic",
"starred-symbolic",
"tab-new-symbolic",
"tab-symbolic",
"user-home-symbolic",
"view-fullscreen-symbolic",
"view-more-horizontal-symbolic",
"view-refresh-symbolic",
"view-restore-symbolic",
"window-close-symbolic",
"window-maximize-symbolic",
"window-minimize-symbolic",
"window-new-symbolic",
"window-restore-symbolic",
"zoom-in-symbolic",
"zoom-out-symbolic"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

View file

@ -0,0 +1,11 @@
/* about:newtab */
@-moz-document url("about:newtab"), url("about:home") {
body {
--newtab-background-color: var(--gnome-window-background) !important;
--newtab-background-color-secondary: var(--gnome-menu-background) !important;
--newtab-primary-action-background: var(--gnome-accent) !important;
background-color: var(--gnome-window-background) !important;
}
}

View file

@ -0,0 +1,16 @@
/* about:privatebrowsing */
@-moz-document url("about:privatebrowsing") {
html.private {
--background-color-canvas: var(--gnome-private-in-content-page-background) !important;
/* Used by headings in promo boxes Firefox shows (like an ad for Firefox Focus) */
--in-content-text-color: var(--gnome-private-text-primary-color) !important;
}
.wordmark {
fill: var(--gnome-private-wordmark) !important;
}
.showPrivate {
color: var(--gnome-private-text-primary-color);
}
}

View file

@ -0,0 +1,262 @@
/* Buttons Issues/Glitches fixes */
@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
/* moz.button size */
moz-button {
--button-size-icon-small: var(--gnome-button-size) !important;
}
/* Menulist */
link[href="chrome://global/skin/menulist.css"] ~ dropmarker {
align-items: center !important;
justify-content: center !important;
}
.button-menu-dropmarker {
appearance: none !important;
margin: 0 !important;
margin-inline-start: 6px !important;
}
/* Remove the header bar buttons' hover styles */
#nav-bar {
--toolbarbutton-active-background: transparent !important;
--toolbarbutton-hover-background: transparent !important;
}
/* Fix notification dropmarker */
.popup-notification-dropmarker dropmarker {
margin-inline-start: 0 !important;
}
.popup-notification-dropmarker > .button-box > hbox {
display: -moz-box !important;
}
/* Fix subviewbutton icon buttons alignment */
.subviewbutton.subviewbutton-iconic:not(.subviewbutton-back, .unified-extensions-item-action-button) {
justify-content: center !important;
}
/* Fix hover background */
#appMenu-fullscreen-button2 > .toolbarbutton-icon {
background: transparent !important;
}
/* Fix unified-extensions-item margin */
toolbar .unified-extensions-item {
margin-inline: 0 3px !important;
}
/* menulist */
#label-box:not([native]) {
font-weight: 400 !important;
padding: 0 8px;
}
dropmarker:not([native]) {
margin-right: 8px;
}
/* Bookmark buttons */
#nav-bar toolbarbutton.bookmark-item {
width: auto !important;
}
#nav-bar toolbarbutton.bookmark-item .toolbarbutton-icon {
margin-left: 6px;
}
#nav-bar toolbarbutton.bookmark-item .toolbarbutton-text {
padding-right: 6px;
}
/* Fix library animation */
#library-animatable-box {
--library-button-height: 46px !important;
--library-icon-x: 1716px !important;
/*--library-icon-x: 1715.9833984375px !important;*/
}
#library-button[animate] > .toolbarbutton-icon {
fill: transparent !important;
}
/* Fix toolbars close icons */
.close-icon:not(.tab-close-button) .toolbarbutton-icon {
height: 16px !important;
width: 16px !important;
margin: 6px !important;
padding: 0 !important;
}
button.close {
margin: 0 !important;
}
/* */
#appMenu-popup .panel-banner-item[notificationid="update-restart"]::after {
display: none !important;
}
/* Identity site popover buttons */
.identity-popup-preferences-button:not(#hack) {
list-style-image: url("chrome://browser/skin/settings.svg") !important;
}
#tracking-protection-preferences-button > .toolbarbutton-text {
padding-inline-end: 0 !important;
}
.protections-popup-footer-button-label {
margin-inline-start: 3px !important;
}
/* Fix findbar buttons issues */
.findbar-container .findbar-find-previous image,
.findbar-container .findbar-find-next image {
margin: 6px !important;
opacity: 1 !important;
}
.findbar-container toolbarbutton:focus {
outline: 0 !important;
}
/* Sidebar header button reset font size */
#sidebar-header {
font-size: 1em !important;
}
/* Sidebar header button sizing */
#sidebar-switcher-target {
flex: unset !important;
}
/* Sidebar header button arrow opacity */
#sidebar-switcher-arrow {
opacity: 1 !important;
}
/* Sidebar history view */
#viewButton {
margin: 0 !important;
margin-inline-start: 6px !important;
}
/* Menulist */
#identity-popup-popup-menulist {
margin-right: 0 !important;
}
/* Auto complete popup button*/
.autocomplete-richlistitem[type="loginsFooter"] {
margin: 4px 4px 0 4px !important;
}
/* Identity popup tracking protection button */
.tracking-protection-button {
margin-inline-end: 0 !important;
}
/* Identity popup delete permission button */
.identity-popup-permission-remove-button {
opacity: 1 !important;
}
/* Identity popup expander button */
#identity-popup-security {
-moz-box-align: center;
}
#identity-popup-security-expander {
width: 34px !important;
}
#identity-popup-security-expander .button-icon {
margin: 0 !important;
}
/* Protections popup */
#protections-popup-info-button {
margin: 0 !important;
margin-inline-end: 0 !important;
}
.protections-popup-footer-icon {
display: none !important;
}
.protections-popup-footer-button-label {
margin-inline-start: 0 !important;
}
#protections-popup-footer-protection-type-label {
margin-inline-end: 0 !important;
margin-block: 0 !important;
}
/* Close button */
.close-icon:not(.tab-close-button) .toolbarbutton-icon {
outline: 0 !important;
}
/* Downloads button */
#downloads-indicator-progress-inner {
background: conic-gradient(var(--gnome-toolbar-icon-fill) var(--download-progress-pcent), transparent var(--download-progress-pcent)) !important;
background-color: var(--gnome-button-active-background) !important;
}
#downloads-indicator-progress-outer,
#downloads-indicator-start-image,
#downloads-indicator-finish-image {
border: 0 !important;
padding: 0 !important;
border-radius: 100% !important;
}
#downloads-indicator-progress-outer,
#downloads-indicator-start-image {
background: var(--gnome-toolbar-border-color) !important;
}
#downloads-indicator-finish-image {
background: var(--gnome-toolbar-icon-fill) !important;
}
#downloads-button[progress="true"] #downloads-indicator-progress-outer {
visibility: visible !important;
}
#downloads-button:not([progress="true"]) #downloads-indicator-icon {
visibility: visible !important;
}
/* Toolbar Animations */
#downloads-button .toolbarbutton-animatable-box {
top: 8px !important;
left: 8px !important;
}
#downloads-button .toolbarbutton-animatable-box,
#downloads-button .toolbarbutton-animatable-image,
#downloads-indicator-progress-inner {
height: 16px !important;
width: 16px !important;
}
#downloads-button .toolbarbutton-animatable-image,
#stop-reload-button .toolbarbutton-animatable-image:not(#hack),
#nav-bar-overflow-button .toolbarbutton-animatable-image:not(#hack) {
--anim-steps: 1 !important;
transform: none !important;
list-style-image: none !important;
display: none !important;
}
/* Panel banner */
#appMenu-popup .panel-banner-item {
margin: 0 0 6px !important;
}
#appMenu-popup .panel-banner-item > .toolbarbutton-text {
margin-inline: 0 !important;
}
/* User menu */
#fxa-toolbar-menu-button .toolbarbutton-badge-stack {
padding: 0 !important;
}
#fxa-avatar-image {
min-height: 24px !important;
width: 24px !important;
}
/* Translation */
#select-translations-panel-settings-button > .toolbarbutton-text {
display: none !important;
}
/* OPTIONAL: Hide unified-extensions-button */
@media -moz-pref("gnomeTheme.hideUnifiedExtensions") {
#unified-extensions-button {
display: none;
}
}

View file

@ -0,0 +1,266 @@
/* Buttons */
@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
/* Override vars */
:root {
/* moz-button */
--button-border-radius: var(--gnome-button-radius) !important;
--button-background-color: var(--gnome-button-background) !important;
--button-background-color-hover: var(--gnome-button-hover-background) !important;
--button-background-color-active: var(--gnome-button-active-background) !important;
--button-background-color-ghost-hover: var(--gnome-hover-color) !important;
--button-background-color-ghost-active: var(--gnome-active-color) !important;
}
/* Hide buttons separator */
#nav-bar .toolbaritem-combined-buttons separator {
display: none !important;
}
#appMenu-popup .toolbaritem-combined-buttons toolbarseparator {
border: 0 !important;
}
/* Buttons */
menulist,
.customizationmode-button,
#nav-bar toolbarbutton:not(#urlbar-zoom-button):not(.subviewbutton):not(.titlebar-button):not(#searchmode-switcher-close, #urlbar-searchmode-switcher),
:root[inFullscreen] .titlebar-button.titlebar-restore,
.subviewbutton.panel-subview-footer,
.panel-footer button,
#downloadsPanel-mainView .download-state .downloadButton,
#appMenu-popup .panel-banner-item,
#appMenu-popup .toolbaritem-combined-buttons toolbarbutton:not(#appMenu-fxa-label),
#context-navigation menuitem,
.identity-popup-preferences-button:not(#hack),
.findbar-container toolbarbutton,
#sidebar-switcher-target,
#viewButton,
.close-icon:not(.tab-close-button),
button.close,
.menulist-label-box,
.expander-down, .expander-up,
.notification-button,
#identity-popup-security-expander,
.panel-info-button,
.panel-button,
#PanelUI-panic-view-button,
.tracking-protection-button,
.dialog-button,
.autocomplete-richlistitem[type="loginsFooter"],
.dialog-button-box button,
.searchbar-engine-one-off-item,
.permission-popup-permission-remove-button,
.button.connect-device,
#item-choose button,
#editBMPanel_newFolderButton,
.unified-extensions-item-menu-button {
-moz-appearance: none !important;
align-items: center !important;
background-color: var(--gnome-button-background) !important;
border-radius: var(--gnome-button-radius) !important;
border: 0 !important;
color: var(--gnome-window-color) !important;
font: menu !important;
font-weight: bold !important;
max-height: var(--gnome-button-size) !important;
min-height: var(--gnome-button-size) !important;
min-width: var(--gnome-button-size) !important;
outline: 0 !important;
padding: 0 1px !important;
transition: background var(--gnome-animation-time);
-moz-box-align: center !important;
&:not([disabled="true"]) {
/* Hover buttons */
&:hover {
outline: 0 !important;
background-color: var(--gnome-button-hover-background) !important;
}
/* Active buttons */
&:active, &.active {
background-color: var(--gnome-button-active-background) !important;
}
/* Checked buttons */
&[selected], &[checked], &[open] {
background-color: var(--gnome-button-checked-background) !important;
&:hover {
background-color: var(--gnome-button-checked-hover-background) !important;
}
&:active {
background-color: var(--gnome-button-checked-active-background) !important;
}
}
}
/* Disabled buttons */
&[disabled="true"] {
opacity: 0.5 !important;
}
&[_moz-menuactive] {
outline: 2px solid var(--gnome-focus-border-color) !important;
outline-offset: -2px !important;
}
}
.subviewbutton-iconic {
-moz-box-pack: center !important;
}
/* Flat Buttons */
#nav-bar toolbarbutton:not(#urlbar-zoom-button):not(.subviewbutton):not(.titlebar-button):not(#searchmode-switcher-close, #urlbar-searchmode-switcher),
:root[inFullscreen] .titlebar-button.titlebar-restore,
.close-icon:not(.tab-close-button),
button.close,
.panel-info-button,
.permission-popup-permission-remove-button,
.unified-extensions-item-menu-button {
background-color: transparent !important;
transition: background var(--gnome-animation-time);
&:not([disabled="true"]) {
/* Hover buttons */
&:hover {
background-color: var(--gnome-hover-color) !important;
}
/* Active buttons */
&:active {
background-color: var(--gnome-active-color) !important;
}
/* Checked buttons */
&[selected], &[checked], &[open] {
background-color: var(--gnome-selected-color) !important;
&:hover {
background-color: var(--gnome-selected-hover-color) !important;
}
&:active {
background-color: var(--gnome-selected-active-color) !important;
}
}
}
/* Disabled buttons */
&[disabled="true"] {
opacity: 0.3 !important;
}
}
/* Buttons with suggested action */
#appMenu-popup .panel-banner-item[notificationid="update-restart"],
button.popup-notification-primary-button:not(#hack),
#editBookmarkPanelDoneButton,
#tracking-action-block,
.button.connect-device {
--gnome-button-background: var(--gnome-button-suggested-background) !important;
--gnome-button-hover-background: var(--gnome-button-suggested-background) !important;
--gnome-button-active-background: var(--gnome-button-suggested-background) !important;
color: white !important;
&:not([disabled="true"]) {
&:hover {
background-image: linear-gradient(rgba(255, 255, 255, .1), rgba(255, 255, 255, .1)) !important;
}
&:active {
background-image: linear-gradient(rgba(0, 0, 0, .2), rgba(0, 0, 0, .2)) !important;
}
}
}
/* Buttons with destructive action */
.panel-footer button#editBookmarkPanelRemoveButton,
#PanelUI-panic-view-button {
--gnome-button-background: var(--gnome-button-destructive-background) !important;
--gnome-button-hover-background: var(--gnome-button-destructive-hover-background) !important;
--gnome-button-active-background: var(--gnome-button-destructive-active-background) !important;
color: var(--gnome-destructive) !important;
}
/* Buttons with margins */
#nav-bar toolbarbutton:not(#urlbar-zoom-button, #urlbar-searchmode-switcher):not(.subviewbutton):not(.titlebar-button),
.subviewbutton.panel-subview-footer:not(:only-of-type),
.panel-footer button:not(:only-of-type):not(:last-child) {
margin: 0 calc(var(--gnome-toolbar-spacing) / 2) !important;
}
.close-icon:not(.tab-close-button) {
margin-left: var(--gnome-toolbar-spacing) !important;
}
/* Text buttons */
menulist,
.customizationmode-button,
#sidebar-switcher-target,
.subviewbutton.panel-subview-footer,
.panel-footer button,
#appMenu-popup .panel-banner-item,
#appMenu-popup #appMenu-zoomReset-button2:not(#hack),
#tracking-protection-preferences-button:not(#hack),
.findbar-container toolbarbutton.findbar-button,
.notification-button,
#PanelUI-panic-view-button,
.tracking-protection-button,
.panel-button,
.dialog-button,
.autocomplete-richlistitem[type="loginsFooter"],
.dialog-button-box button,
.toolbaritem-combined-buttons:is(:not([cui-areatype="toolbar"]), [overflowedItem="true"]) > #appMenu-fxa-label2:not(#hack),
.button.connect-device,
#item-choose button,
#editBMPanel_newFolderButton {
padding: 2px 9px !important;
}
.subviewbutton.panel-subview-footer label,
.panel-footer button,
#appMenu-popup .panel-banner-item .toolbarbutton-text,
#appMenu-popup #appMenu-zoomReset-button2:not(#hack),
#tracking-protection-preferences-button:not(#hack),
.findbar-container toolbarbutton.findbar-button,
.notification-button,
#PanelUI-panic-view-button,
.tracking-protection-button,
.dialog-button,
.autocomplete-richlistitem[type="loginsFooter"],
.dialog-button-box button,
.button.connect-device,
#item-choose button {
text-align: center !important;
}
/* Circle buttons */
#downloadsPanel-mainView .download-state .downloadButton,
.permission-popup-permission-remove-button:not(#hack) {
border-radius: 100% !important;
}
/* Combined buttons */
#nav-bar .toolbaritem-combined-buttons:not(.unified-extensions-item) toolbarbutton:not(:last-of-type):not(#hack),
#appMenu-popup .toolbaritem-combined-buttons:not(.unified-extensions-item) toolbarbutton:not(:last-of-type):not(#appMenu-zoomEnlarge-button),
#context-navigation menuitem:not(:last-of-type),
.findbar-container toolbarbutton.findbar-find-previous,
.findbar-button:not(:last-of-type),
.search-panel-one-offs .searchbar-engine-one-off-item:not(:last-child),
.popup-notification-secondary-button:not([dropmarkerhidden="true"]):not(#hack) {
border-start-end-radius: 0 !important;
border-end-end-radius: 0 !important;
border-right-width: 0 !important;
margin-inline-end: 0 !important;
}
#nav-bar .toolbaritem-combined-buttons:not(.unified-extensions-item) toolbarbutton:not(:first-of-type):not(#hack),
#appMenu-popup .toolbaritem-combined-buttons:not(.unified-extensions-item) toolbarbutton:not(:first-of-type):not(#appMenu-fullscreen-button),
#context-navigation menuitem:not(:first-of-type),
.findbar-container toolbarbutton.findbar-find-previous,
.findbar-container toolbarbutton.findbar-find-next,
.findbar-button:not(:first-of-type),
.search-panel-one-offs .searchbar-engine-one-off-item:not(:first-child),
.popup-notification-dropmarker:not(#hack) {
border-end-start-radius: 0 !important;
border-start-start-radius: 0 !important;
margin-inline-start: 0 !important;
}
#nav-bar .toolbaritem-combined-buttons:not(.unified-extensions-item) {
margin-left: 0 !important;
margin-right: 0 !important;
}

View file

@ -0,0 +1,107 @@
/* Controls */
/* Switchers, Checkboxes, etc. */
@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
/* Checkbox */
input[type="checkbox"],
checkbox:not(.treenode-checkbox) > .checkbox-check {
appearance: none !important;
border: 0 !important;
border-radius: 6px !important;
color: var(--gnome-window-color) !important;
height: 20px !important;
width: 20px !important;
}
input[type="checkbox"]:not(:checked),
checkbox:not(.treenode-checkbox) > .checkbox-check:not([checked]) {
background-color: transparent !important;
box-shadow: inset 0 0 0 2px var(--gnome-trough-background);
}
input[type="checkbox"]:not(:checked):hover,
checkbox:not(.treenode-checkbox) > .checkbox-check:not([checked]):hover {
box-shadow: inset 0 0 0 2px var(--gnome-trough-hover-background);
}
input[type="checkbox"]:checked,
checkbox:not(.treenode-checkbox) > .checkbox-check[checked] {
background-color: var(--gnome-accent-bg) !important;
/* NOTE: var(--gnome-icon-select-symbolic) doesn't load in modal dialogs */
background-image: url("../icons/custom/select-fixed-symbolic.svg") !important;
background-size: 14px !important;
background-repeat: no-repeat;
background-position: center;
fill: white !important;
-moz-context-properties: fill;
}
/* Radio */
input[type="radio"],
radio > .radio-check {
appearance: none !important;
border: 0 !important;
border-radius: 50% !important;
color: var(--gnome-window-color) !important;
height: 20px !important;
padding: 3px !important;
width: 20px !important;
radiogroup:focus-visible radio[focused] > & {
outline: 2px solid var(--gnome-focus-border-color) !important;
outline-offset: 2px !important;
}
}
input[type="radio"][aria-checked="false"],
radio > .radio-check:not([selected]) {
background-color: transparent !important;
box-shadow: inset 0 0 0 2px var(--gnome-trough-background);
}
input[type="radio"][aria-checked="false"]:hover,
radio > .radio-check:not([selected]):hover {
box-shadow: inset 0 0 0 2px var(--gnome-trough-hover-background);
}
input[type="radio"][aria-checked="true"],
radio > .radio-check[selected] {
background-color: var(--gnome-accent-bg) !important;
/* NOTE: var(--gnome-icon-bullet-symbolic) doesn't load in modal dialogs */
background-image: url("../icons/custom/bullet-fixed-symbolic.svg") !important;
background-repeat: no-repeat;
background-position: center;
fill: white !important;
-moz-context-properties: fill;
}
.radio-label-box {
outline: 0 !important;
}
.radio-label {
margin-inline-start: 3px !important;
}
/* Switchers */
.toggle-button {
--toggle-height: 26px !important;
--toggle-width: 48px !important;
--toggle-border-radius: 24px !important;
--toggle-border-color: var(--gnome-trough-background) !important;
--toggle-background-color: var(--gnome-trough-background) !important;
--toggle-background-color-pressed: var(--gnome-accent-bg) !important;
--toggle-dot-height: 22px !important;
--toggle-dot-width: 22px !important;
--toggle-dot-background-color: #FFF !important;
--toggle-dot-background-color-on-pressed: #FFF !important;
--toggle-dot-transform-x: calc(var(--toggle-width) - 4 * var(--toggle-dot-margin) - var(--toggle-dot-width)) !important;
border: 0 !important;
}
.toggle-button::before {
box-shadow: 0 2px 4px rgba(0, 0, 0, .2);
}
link[href="chrome://global/content/elements/moz-toggle.css"] ~ .label-wrapper {
margin-inline: 0 !important;
}
link[href="chrome://global/content/elements/moz-toggle.css"] ~ .description {
--input-space-offset: calc(48px + 12px) !important;
margin-block-start: 0 !important;
}

View file

@ -0,0 +1,126 @@
/* GNOME CSD styles for headerbar on Firefox */
@namespace xul url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
:root[customtitlebar] {
/* Headerbar top border corners rounded */
&[sizemode="normal"]:not([gtktiledwindow="true"]) #nav-bar {
border-radius: env(-moz-gtk-csd-titlebar-radius, 8px) env(-moz-gtk-csd-titlebar-radius, 8px) 0 0 !important;
}
/* Always show nav bar window buttons*/
#nav-bar > .titlebar-buttonbox-container {
display: flex !important;
}
#toolbar-menubar {
/* Prevent menubar from breaking */
&:not([inactive=true]) {
height: 30px !important;
margin-bottom: 8px;
}
/* Always hide menu bar window buttons*/
& > .titlebar-buttonbox-container {
display: none !important;
}
}
&[inFullscreen] {
/* Remove close and minimize buttons from fullscreen buttons */
.titlebar-buttonbox-container .titlebar-button:not(.titlebar-restore) {
display: none !important;
}
/* Force the restore button to appear regardless of maximize button's status */
&:not([inDOMFullscreen]) {
.titlebar-buttonbox-container {
visibility: visible !important;
}
.titlebar-restore {
display: inherit !important;
}
}
}
&:not([inFullscreen]) {
.titlebar-buttonbox-container {
padding: 0 8px;
}
/* Window buttons style */
.titlebar-button {
background: var(--gnome-button-background) !important;
border-radius: 100% !important;
height: 24px !important;
transition: background var(--gnome-animation-time);
width: 24px !important;
&:not([disabled]):hover {
background: var(--gnome-button-hover-background) !important;
}
&:not([disabled]):active {
background: var(--gnome-button-active-background) !important;
}
&::-moz-window-inactive {
filter: opacity(0.5);
}
}
}
.titlebar-buttonbox-container {
align-items: center;
padding: 0 3px;
.titlebar-buttonbox {
appearance: none !important;
gap: 13px;
.titlebar-button {
padding: 0 !important;
margin: 0 !important;
& > .toolbarbutton-icon {
@media not -moz-pref("gnomeTheme.noThemedIcons") {
background: none !important;
appearance: none !important;
height: 16px !important;
padding: 0 !important;
stroke: none !important;
width: 16px !important;
-moz-context-properties: fill, fill-opacity !important;
}
}
@media -moz-pref("widget.gtk.non-native-titlebar-buttons.enabled") {
&:-moz-lwtheme { /* Override config */
& > .toolbarbutton-icon {
appearance: auto !important
}
}
}
}
}
}
.titlebar-spacer {
display: none;
}
}
/* OPTIONAL: Allow draging the window from headerbar buttons */
@media -moz-pref("gnomeTheme.dragWindowHeaderbarButtons") {
:root[customtitlebar] #nav-bar *,
:root[customtitlebar] #titlebar .titlebar-button {
-moz-window-dragging: drag;
}
/* Avoid window dragging from urlbar */
:root[customtitlebar] #nav-bar .urlbar-input-box,
:root[customtitlebar] #nav-bar .urlbar-input-box * {
-moz-window-dragging: no-drag !important;
}
}

View file

@ -0,0 +1,207 @@
/* Dialogs */
@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
window {
padding: 0 !important;
width: initial !important;
}
dialog {
padding: var(--gnome-dialog-padding) !important;
}
/* Dialog box */
.dialogBox {
border-radius: var(--gnome-dialog-radius) !important;
margin-top: 0 !important;
}
.dialogBox[resizable="true"] {
margin-top: var(--gnome-dialog-padding) !important;
}
.dialogOverlay[topmost="true"]:not(.dialogOverlay-window-modal-dialog-subdialog), #window-modal-dialog::backdrop {
background-color: rgba(0, 0, 0, .5) !important;
}
/* Modal dialogs */
#window-modal-dialog {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
}
window[role="dialog"] {
background: var(--gnome-menu-background) !important;
border: 0 !important;
box-shadow: var(--gnome-menu-shadow) !important;
padding: 0 !important;
}
dialog#handling {
display: flex;
flex-direction: column;
}
.tab-prompt-dialog .dialogOverlay {
justify-content: center;
}
/* Content */
dialog {
&:not(.sizeDetermined) {
display: grid !important;
justify-content: stretch;
min-width: fit-content;
}
#titleContainer {
justify-content: center !important;
}
#titleCropper {
&[overflown] {
mask-image: none !important;
#titleText {
display: inline-block !important;
max-width: 100% !important;
overflow: hidden !important;
text-overflow: ellipsis;
}
}
&:not([nomaskfade]) {
display: initial !important;
}
}
#titleText {
font-size: 20px !important;
font-weight: 800 !important;
text-align: center !important;
white-space: initial !important;
}
.titleIcon {
display: none;
}
#description-box {
text-align: center;
#description {
font-size: 20px !important;
font-weight: 800 !important;
}
}
#infoContainer {
text-align: center;
}
#checkboxContainer {
align-items: center !important;
}
}
/* Buttons */
.dialog-button-box {
background: transparent !important;
display: flex !important;
gap: 12px;
margin-top: auto;
padding: 0 !important;
/* if dialog has at least 3 buttons */
&:has(button:not([hidden])[dlgtype="extra1"]) {
min-width: 40rem;
}
button {
min-height: 44px !important;
max-height: unset !important;
padding: 10px 14px !important;
margin: 0 !important;
border-radius: 12px !important;
flex: 1;
border-bottom: 0 !important;
.button-box {
max-width: 100%;
.button-text {
max-width: 100%;
&::before {
max-width: 100% !important;
overflow: hidden !important;
text-overflow: ellipsis;
}
}
}
}
.button-spacer {
display: none;
}
}
/* Browser dialogs */
#dialogGrid {
padding-bottom: 8px !important;
}
/* Bookmark dialog */
#bookmarkpropertiesdialog #editBookmarkPanelContent {
padding-bottom: var(--gnome-dialog-padding) !important;
}
/* Hadler dialog */
#os-default-handler {
image {
display: none !important;
}
.name {
font-weight: normal !important;
}
}
/* Fullscreen warning */
#fullscreen-warning {
background: rgba(0, 0, 0, 0.7) !important;
border-radius: 150px !important;
border: none !important;
color: rgba(255, 255, 255, .9) !important;
padding: 6px 12px !important;
&::before {
background-image: var(--gnome-icon-channel-secure-symbolic) !important;
height: 16px !important;
width: 16px !important;
}
.pointerlockfswarning-domain-text {
font-size: 16px !important;
font-weight: normal !important;
margin: 0 12px 0 6px !important;
}
}
#fullscreen-exit-button {
appearance: none !important;
background-color: rgba(255, 255, 255, .09) !important;
border-radius: var(--gnome-button-radius) !important;
border: 0 !important;
padding: 2px 16px !important;
height: var(--gnome-button-size) !important;
min-height: var(--gnome-button-size) !important;
color: rgba(255, 255, 255, .9) !important;
font-weight: bold !important;
transition: background var(--gnome-animation-time);
&:hover {
background-color: rgba(255, 255, 255, .135) !important;
}
&:active {
background-color: rgba(255, 255, 255, .27) !important;
}
}

View file

@ -0,0 +1,133 @@
/* Entries */
@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
/* Entries */
input[type="text"]:not(.tree-input),
input[type="password"],
#urlbar,
#searchbar,
link[href="chrome://global/content/elements/moz-input-common.css"] ~ #input,
.findbar-textbox,
.tabsFilter,
.popup-notification-body input {
-moz-appearance: none !important;
background: var(--gnome-entry-background) !important;
outline: 2px solid transparent !important;
border: 0 !important;
border-radius: var(--gnome-entry-radius) !important;
box-shadow: none !important;
color: var(--gnome-entry-color) !important;
height: var(--gnome-entry-height) !important;
max-height: var(--gnome-entry-height) !important;
margin: 0 !important;
padding: 6px 9px !important;
box-sizing: border-box;
transition-property: outline, outline-offset;
transition-duration: var(--gnome-animation-time);
/* Error */
&[status="notfound"] {
color: var(--gnome-error) !important;
}
&:-moz-window-inactive {
color: var(--gnome-inactive-entry-color) !important;
outline: 2px solid transparent !important;
}
}
/* Entries focused */
input[type="text"]:not(.tree-input):focus,
input[type="password"]:focus,
#urlbar[breakout][breakout-extend],
#urlbar[focused]:not([suppress-focus-border]),
#searchbar:focus-within,
link[href="chrome://global/content/elements/moz-input-common.css"] ~ #input:focus,
.findbar-textbox[focused],
.findbar-textbox:focus,
.tabsFilter[focused],
.popup-notification-body input:focus {
outline: 2px solid var(--gnome-entry-focused-border-color) !important;
outline-offset: -2px;
/* Error */
&[status="notfound"] {
outline-color: var(--gnome-entry-error-focused-border-color) !important;
}
}
/* Entries combined */
.findbar-textbox:not(.minimal) {
border-top-right-radius: 0 !important;
border-bottom-right-radius: 0 !important;
border-right-width: 0 !important;
}
/* Entry button */
.identity-box-button,
#tracking-protection-icon-container,
#notification-popup-box,
.urlbar-page-action,
.urlbar-icon {
fill-opacity: 0.8 !important;
transition-property: fil, fill-opacity, opacity;
transition-duration: var(--gnome-animation-time);
}
.identity-box-button:hover:not([open="true"]),
#tracking-protection-icon-container:hover:not([open="true"]),
#notification-popup-box:hover:not([open="true"]),
.urlbar-page-action:hover:not([open="true"]),
.urlbar-page-action:hover:not([open="true"]) .urlbar-icon,
.urlbar-icon:not([disabled]):hover {
background: none !important;
fill-opacity: 1 !important;
}
.identity-box-button:hover:active,
.identity-box-button[open=true],
#tracking-protection-icon-container:hover:active,
#tracking-protection-icon-container[open=true],
#notification-popup-box:hover:active,
#notification-popup-box[open=true],
.urlbar-page-action:hover:active,
.urlbar-page-action[open=true],
.urlbar-page-action:hover:active .urlbar-icon,
.urlbar-page-action[open=true] .urlbar-icon {
background: none !important;
fill-opacity: 1 !important;
}
/* Entries fixes */
#urlbar-container, #search-container {
padding: 0 !important;
margin: 0 !important;
}
.urlbar-input-container {
background: transparent !important;
border: 0 !important;
}
#urlbar, #searchbar {
margin: 0 calc(var(--gnome-toolbar-spacing) / 2) !important;
padding: 0 3px !important;
&[unifiedsearchbutton-available=""] {
padding-inline-start: 0 !important;
}
}
.searchbar-textbox {
border: 0 !important;
padding: 0 !important;
margin: 0 !important;
min-height: auto !important;
}
#searchbar > .searchbar-textbox[focused] .searchbar-search-button:not(#hack) {
margin: 0 !important;
}
#urlbar[focused]:not([suppress-focus-border]) > #urlbar-background {
outline: 0 !important;
}
link[href="chrome://global/content/elements/moz-input-common.css"] ~ #input {
width: 100% !important;
}

View file

@ -0,0 +1,42 @@
/* Find bar */
@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
findbar {
padding: var(--gnome-toolbar-padding) !important;
position: relative;
.findbar-container {
align-items: center;
display: flex;
justify-content: flex-start;
position: relative;
flex-direction: row;
margin: 0 !important;
margin-inline-end: var(--gnome-toolbar-padding) !important;
height: auto !important;
.findbar-textbox-wrapper {
order: 0;
}
.findbar-label.found-matches {
font-weight: normal !important;
order: 1;
}
.findbar-label.findbar-find-status {
font-weight: normal !important;
order: 4;
}
checkbox {
order: 2;
}
.findbar-entire-word {
margin-inline-end: auto !important;
}
}
.findbar-closebutton {
margin: 0 !important;
}
}

View file

@ -0,0 +1,50 @@
/* Header bar */
@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
/* Headerbar */
#nav-bar {
background: var(--gnome-headerbar-background) !important;
border: 0 !important;
padding: var(--gnome-toolbar-padding) calc(var(--gnome-toolbar-padding) / 2) !important;
}
/* Add private window headerbar indicator */
:root[privatebrowsingmode="temporary"] #nav-bar toolbarspring:first-of-type:before {
background: var(--gnome-icon-eye-not-looking-symbolic) no-repeat;
background-size: 64px 64px;
content: "";
display: block;
position: absolute;
width: 64px;
height: 64px;
top: 0;
transform: translate(15px, -9px);
fill: var(--gnome-window-color) !important;
fill-opacity: 0.15 !important;
-moz-context-properties: fill, fill-opacity;
}
/* Hide tabsbar default private browsing indicator */
.private-browsing-indicator-with-label {
display: none !important;
}
/* Overlay headerbar on fullscreen */
@media -moz-pref("browser.fullscreen.autohide") {
#navigator-toolbox[inFullscreen] {
position: fixed !important;
transition: margin var(--gnome-animation-time) ease-in-out 0s !important;
line-height: 0;
z-index: 1;
width: 100vw;
}
#navigator-toolbox[inFullscreen]:hover,
#navigator-toolbox[inFullscreen]:focus-within {
margin-top: 0 !important;
}
#navigator-toolbox[inFullscreen] > * {
line-height: normal;
}
}

View file

@ -0,0 +1,604 @@
/* Replace icons */
@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
/* Icons color */
.toolbarbutton-icon:not([class*="identity-color-"] .toolbarbutton-icon),
link[href="chrome://global/content/elements/moz-button.css"] + button[type~="icon"],
menuitem:not([class*='identity']) .menu-icon,
#vertical-tabs-newtab-button .toolbarbutton-icon,
.urlbar-page-action:not([readeractive]),
.urlbar-icon,
#blocked-permissions-container > .blocked-permission-icon,
.button-icon:not(#hack),
.bookmark-item[container],
.notification-anchor-icon,
.protections-popup-category::after,
.protections-popup-footer-icon,
#identity-popup-mainView .subviewbutton-nav::after,
.widget-overflow-list .subviewbutton-nav::after,
.PanelUI-subView .subviewbutton-nav::after,
#identity-popup[connection^="secure"] .identity-popup-security-connection,
.panel-info-button > image,
.menu-right,
.expander-down > .button-box,
#sidebar-switcher-arrow,
#sidebar-icon,
#viewButton .button-menu-dropmarker,
.menulist-label-box:after,
.expander-up > .button-box,
#urlbar:not(.searchButton) > .urlbar-input-container > #identity-box[pageproxystate="invalid"] > #identity-icon,
.searchbar-search-icon,
.textbox-search-sign,
treechildren::-moz-tree-twisty,
treechildren::-moz-tree-image,
.item.client .item-twisty-container,
menuitem[type="checkbox"],
menuitem[type="checkbox"][checked="true"],
menuitem[type="radio"],
menuitem[type="radio"][checked="true"],
.tab-icon-overlay,
.tab-icon-stack::before,
.close-icon:not(.tab-close-button),
button.close::before,
#urlbar-search-mode-indicator-close,
#tracking-protection-icon,
#identity-icon,
#permissions-granted-icon,
#downloads-indicator-icon,
.textbox-search-clear,
.urlbarView-type-icon,
radio > .radio-check,
link[href="chrome://global/skin/dropmarker.css"] + image,
:root[customtitlebar] .titlebar-buttonbox .titlebar-button .toolbarbutton-icon {
fill: var(--gnome-toolbar-icon-fill) !important;
-moz-context-properties: fill;
}
.urlbar-icon:-moz-window-inactive,
#urlbar:-moz-window-inactive image,
.toolbarbutton-icon:-moz-window-inactive,
:root[customtitlebar] .titlebar-buttonbox .titlebar-button .toolbarbutton-icon:-moz-window-inactive {
opacity: 0.5 !important;
}
/* Dimmed icons */
#urlbar:not(.searchButton) > .urlbar-input-container > #identity-box[pageproxystate="invalid"] > #identity-icon,
.searchbar-search-icon,
.textbox-search-sign,
.textbox-search-clear {
opacity: 0.7 !important;
}
.textbox-search-clear:hover {
opacity: 1 !important;
}
/* Fix icons sizes */
.permission-popup-permission-remove-button > .button-box > .button-icon,
.menu-iconic-icon,
link[href="chrome://global/skin/dropmarker.css"] + image,
.toolbarbutton-combined-buttons-dropmarker {
height: 16px !important;
width: 16px !important;
}
/* Fix icon color */
#sidebar-icon {
opacity: 1 !important;
}
treechildren::-moz-tree-twisty,
treechildren::-moz-tree-image {
fill-opacity: 1 !important;
}
/* Icons active color */
treechildren::-moz-tree-twisty(selected, focus),
treechildren::-moz-tree-twisty(selected, focus, open),
treechildren::-moz-tree-image(selected, focus),
treechildren::-moz-tree-image(selected, focus, open),
.item.client:focus .item-twisty-container,
.sidebar-panel[lwt-sidebar-brighttext] .sidebar-placesTreechildren::-moz-tree-twisty,
.sidebar-panel[lwt-sidebar-brighttext] .sidebar-placesTreechildren::-moz-tree-twisty(open) {
fill: #fff !important;
}
/* Fix flat buttons icons aproach */
button.close::before {
content: "";
display: block;
background-position: center center;
background-repeat: no-repeat;
height: 100%;
width: 100%;
}
/* Fix main menu zoom controls icons */
#appMenu-zoom-controls2 .toolbarbutton-icon {
padding: 0 !important;
padding-block: 0 !important;
padding-inline: 0 !important;
}
@media not -moz-pref("gnomeTheme.noThemedIcons") {
/* Scroll icons */
#scrollbutton-up {
list-style-image: var(--scrollbutton-icon-name) !important;
}
#scrollbutton-down {
list-style-image: var(--scrollbutton-icon-name) !important;
}
arrowscrollbox {
--scrollbutton-icon-name: var(--gnome-icon-pan-down-symbolic);
}
arrowscrollbox[orient="horizontal"] {
--scrollbutton-icon-name: var(--gnome-icon-pan-start-symbolic);
}
/* Popovers subview menu arrow */
#identity-popup-mainView .subviewbutton-nav::after,
.widget-overflow-list .subviewbutton-nav::after,
.PanelUI-subView .subviewbutton-nav::after,
.protections-popup-category::after,
.subviewbutton-back .toolbarbutton-icon,
.menu-right,
menupopup > menu::after {
fill-opacity: 1 !important;
opacity: .3;
}
.menu-right {
-moz-appearance: none !important;
list-style-image: var(--gnome-icon-go-next-symbolic) !important;
width: 16px !important;
height: 16px !important;
}
#identity-popup-mainView .subviewbutton-nav::after,
.widget-overflow-list .subviewbutton-nav::after,
.PanelUI-subView .subviewbutton-nav::after,
menupopup > menu::after {
content: "" !important;
background: var(--gnome-icon-go-next-symbolic) !important;
background-size: contain;
height: 16px;
width: 16px;
}
.protections-popup-category::after {
content: var(--gnome-icon-go-next-symbolic) !important;
}
/* Popovers subview back button */
.subviewbutton-back {
list-style-image: var(--gnome-icon-go-previous-symbolic) !important;
}
/* Arrow down buttons */
.expander-down > .button-box,
#sidebar-switcher-arrow,
#viewButton .button-menu-dropmarker,
.toolbarbutton-combined-buttons-dropmarker {
-moz-appearance: none !important;
list-style-image: var(--gnome-icon-pan-down-symbolic) !important;
}
.popup-notification-dropmarker dropmarker {
-moz-appearance: none !important;
content: var(--gnome-icon-pan-down-symbolic) !important;
}
#sidebar-switcher-arrow,
#viewButton .button-menu-dropmarker {
-moz-appearance: none !important;
list-style-image: var(--gnome-icon-pan-down-symbolic) !important;
width: 16px !important;
height: 16px !important;
}
.menulist-label-box:after,
link[href="chrome://global/skin/menulist.css"] ~ dropmarker {
content: var(--gnome-icon-pan-down-symbolic) !important;
}
/* Arrow up buttons */
.expander-up > .button-box {
list-style-image: var(--gnome-icon-pan-up-symbolic) !important;
}
/* Search entries */
#urlbar:not(.searchButton) > .urlbar-input-container > #identity-box[pageproxystate="invalid"] > #identity-icon,
.searchbar-search-icon,
.textbox-search-sign {
list-style-image: url(../icons/edit-find-symbolic.svg) !important;
}
.textbox-search-sign {
margin: 3px 0;
max-height: 16px !important;
width: 16px !important;
}
/* Findbar */
.findbar-find-previous {
list-style-image: var(--gnome-icon-go-up-symbolic) !important;
}
.findbar-find-next {
list-style-image: var(--gnome-icon-go-down-symbolic) !important;
}
/* Tree views */
treechildren::-moz-tree-twisty,
.item.client .item-twisty-container {
list-style-image: var(--gnome-icon-pan-end-symbolic) !important;
width: 16px !important;
height: 16px !important;
}
.item.client .item-twisty-container {
background-image: var(--gnome-icon-pan-end-symbolic) !important;
}
treechildren::-moz-tree-twisty(open) {
list-style-image: var(--gnome-icon-pan-down-symbolic) !important;
}
.item.client.closed .item-twisty-container {
background-image: var(--gnome-icon-pan-down-symbolic) !important;
}
treechildren::-moz-tree-image(title, container),
treechildren::-moz-tree-image(title, open) {
list-style-image: var(--gnome-icon-folder-symbolic) !important;
}
treechildren::-moz-tree-image(title, query, dayContainer),
treechildren::-moz-tree-image(query, OrganizerQuery_history____v) {
list-style-image: var(--gnome-icon-preferences-system-time-symbolic) !important;
}
/* Menu checkbox */
menuitem[type="checkbox"] {
list-style-image: none !important;
}
menuitem[type="checkbox"][checked="true"] {
list-style-image: var(--gnome-icon-select-symbolic) !important;
}
menuitem[type="checkbox"][disabled="true"] .menu-icon {
opacity: 0.5;
}
/* Menu radio */
menuitem[type="radio"] {
list-style-image: none !important;
}
menuitem[type="radio"][checked="true"] {
list-style-image: var(--gnome-icon-bullet-symbolic) !important;
}
menuitem[type="radio"] .menu-icon {
border-radius: 100%;
border: 1px solid var(--gnome-toolbar-icon-fill);
}
menuitem[type="radio"][disabled="true"] .menu-icon {
opacity: 0.5;
}
/* Dropmarker */
link[href="chrome://global/skin/dropmarker.css"] + image {
list-style-image: var(--gnome-icon-pan-down-symbolic) !important;
}
/* Close button */
.close-icon:not(.tab-close-button),
.identity-popup-permission-remove-button .button-icon,
.permission-popup-permission-remove-button > .button-box > .button-icon {
list-style-image: var(--gnome-icon-window-close-symbolic) !important;
}
#urlbar-search-mode-indicator-close,
#searchmode-switcher-close,
button.close::before {
background-image: var(--gnome-icon-window-close-symbolic) !important;
}
@media (prefers-color-scheme: light) {
.notificationbox-stack notification[type="critical"] .close-icon:not(.tab-close-button):not(:hover) {
fill: #fff !important;
}
}
@media (prefers-color-scheme: dark) {
.notificationbox-stack notification[type="warning"] .close-icon:not(.tab-close-button):not(:hover) image {
fill: rgb(46, 52, 54) !important;
}
}
moz-button.close {
--message-bar-icon-close-url: var(--gnome-icon-window-close-symbolic) !important;
}
/* Window buttons */
:root[customtitlebar] .titlebar-buttonbox .titlebar-close .toolbarbutton-icon {
list-style-image: var(--gnome-icon-window-close-symbolic) !important;
}
:root[customtitlebar] .titlebar-buttonbox .titlebar-max .toolbarbutton-icon {
list-style-image: var(--gnome-icon-window-maximize-symbolic) !important;
}
:root[customtitlebar] .titlebar-buttonbox .titlebar-restore .toolbarbutton-icon {
list-style-image: var(--gnome-icon-window-restore-symbolic) !important;
}
:root[customtitlebar][inFullscreen] .titlebar-buttonbox .titlebar-restore .toolbarbutton-icon {
background-image: none !important;
list-style-image: var(--gnome-icon-view-restore-symbolic) !important;
}
:root[customtitlebar] .titlebar-buttonbox .titlebar-min .toolbarbutton-icon {
list-style-image: var(--gnome-icon-window-minimize-symbolic) !important;
}
/* Sound icons */
.tab-icon-overlay[soundplaying] {
list-style-image: var(--gnome-icon-audio-speakers-symbolic) !important;
}
.tab-icon-overlay[muted] {
list-style-image: var(--gnome-icon-audio-volume-muted-symbolic) !important;
}
.tab-icon-overlay[activemedia-blocked] {
list-style-image: var(--gnome-icon-play-large-disabled-symbolic) !important;
}
/* Firefox View */
#firefox-view-button {
list-style-image: var(--gnome-icon-firefox-symbolic) !important;
}
/* Private browsing button */
#privatebrowsing-button {
list-style-image: var(--gnome-icon-eye-not-looking-symbolic) !important;
}
/* Sidebar button */
#sidebar-button:-moz-locale-dir(ltr):not([positionend]) .toolbarbutton-icon, #sidebar-button:-moz-locale-dir(rtl)[positionend] .toolbarbutton-icon {
list-style-image: var(--gnome-icon-sidebar-show-symbolic) !important;
}
#sidebar-button .toolbarbutton-icon {
list-style-image: var(--gnome-icon-sidebar-show-right-symbolic);
}
/* Back button */
#nav-bar #back-button,
#context-back {
list-style-image: var(--gnome-icon-go-previous-symbolic) !important;
}
/* Forward button */
#nav-bar #forward-button,
#context-forward,
#urlbar-go-button,
.search-go-button {
list-style-image: var(--gnome-icon-go-next-symbolic) !important;
}
/* Menu button */
#PanelUI-menu-button {
list-style-image: var(--gnome-icon-open-menu-symbolic) !important;
}
/* New tab button */
#new-tab-button {
list-style-image: var(--gnome-icon-tab-new-symbolic) !important;
}
#tabs-newtab-button,
#TabsToolbar #new-tab-button,
#vertical-tabs-newtab-button {
list-style-image: var(--gnome-icon-list-add-symbolic) !important;
}
/* Home button */
#home-button {
list-style-image: var(--gnome-icon-user-home-symbolic) !important;
}
/* Preferences button */
#preferences-button,
.search-setting-button > .button-box > .button-icon,
.unified-extensions-item-menu-button.subviewbutton,
.translations-panel-settings-gear-icon > .toolbarbutton-icon {
list-style-image: var(--gnome-icon-settings-symbolic) !important;
}
/* Tabs sync */
#sync-button,
#sidebar-box[sidebarcommand="viewTabsSidebar"] > #sidebar-header > #sidebar-switcher-target > #sidebar-icon,
.urlbarView-row[source="tabs"] > .urlbarView-row-inner > .urlbarView-no-wrap > .urlbarView-favicon,
#urlbar-engine-one-off-item-tabs {
list-style-image: var(--gnome-icon-tab-symbolic) !important;
}
/* Fullscreen button */
#fullscreen-button,
#appMenu-fullscreen-button2 {
list-style-image: var(--gnome-icon-view-fullscreen-symbolic) !important;
}
/* Zoom out button */
#zoom-out-button,
#appMenu-zoomReduce-button2 {
list-style-image: var(--gnome-icon-zoom-out-symbolic) !important;
}
/* Zoom in button */
#zoom-in-button,
#appMenu-zoomEnlarge-button2 {
list-style-image: var(--gnome-icon-zoom-in-symbolic) !important;
}
/* Developer button */
#developer-button {
list-style-image: var(--gnome-icon-build-configure-symbolic) !important;
}
/* Email link button */
#email-link-button {
list-style-image: var(--gnome-icon-mail-unread-symbolic) !important;
}
/* Print button */
#print-button {
list-style-image: var(--gnome-icon-printer-symbolic) !important;
}
/* Addons button */
#unified-extensions-button,
#add-ons-button,
#addons-notification-icon,
.install-icon {
list-style-image: var(--gnome-icon-application-x-addon-symbolic) !important;
}
/* Find button */
#find-button {
list-style-image: var(--gnome-icon-edit-find-symbolic) !important;
}
/* New window button */
#new-window-button {
list-style-image: var(--gnome-icon-window-new-symbolic) !important;
}
/* Bookmarks menu button */
#bookmarks-menu-button,
#sidebar-box[sidebarcommand="viewBookmarksSidebar"] > #sidebar-header > #sidebar-switcher-target > #sidebar-icon,
.urlbarView-row[source="bookmarks"] > .urlbarView-row-inner > .urlbarView-no-wrap > .urlbarView-favicon,
#urlbar-engine-one-off-item-bookmarks {
list-style-image: var(--gnome-icon-starred-symbolic) !important;
}
#context-bookmarkpage[starred="true"],
#star-button[starred] {
list-style-image: var(--gnome-icon-starred-symbolic) !important;
}
#context-bookmarkpage,
#star-button {
list-style-image: var(--gnome-icon-non-starred-symbolic) !important;
}
#star-button[starred] {
fill: var(--gnome-toolbar-star-button) !important;
}
/* Privacy */
#print-button {
list-style-image: var(--gnome-icon-printer-symbolic) !important;
}
/* Picture-in-picture */
#picture-in-picture-button > .urlbar-icon {
list-style-image: var(--gnome-icon-pip-in-symbolic) !important;
}
#picture-in-picture-button[pipactive] > .urlbar-icon {
list-style-image: var(--gnome-icon-pip-out-symbolic) !important;
}
/* Read mode */
#reader-mode-button > .urlbar-icon {
list-style-image: var(--gnome-icon-newspaper-symbolic) !important;
}
#reader-mode-button[readeractive] > .urlbar-icon {
fill: var(--gnome-accent) !important;
}
/* Blocked media */
.autoplay-media-icon.blocked-permission-icon {
list-style-image: var(--gnome-icon-play-large-disabled-symbolic) !important;
}
/* DRM */
.drm-icon {
list-style-image: var(--gnome-icon-chain-link-symbolic) !important;
}
/* History button */
#history-panelmenu,
#sidebar-box[sidebarcommand="viewHistorySidebar"] > #sidebar-header > #sidebar-switcher-target > #sidebar-icon,
.urlbarView-row[source="history"] > .urlbarView-row-inner > .urlbarView-no-wrap > .urlbarView-favicon,
#urlbar-engine-one-off-item-history {
list-style-image: var(--gnome-icon-preferences-system-time-symbolic) !important;
}
/* Forget history */
#panic-button {
list-style-image: var(--gnome-icon-history-undo-symbolic) !important;
}
/* All tabs button */
#alltabs-button {
list-style-image: var(--gnome-icon-pan-down-symbolic) !important;
}
/* Cut button */
#cut-button,
#appMenu-cut-button {
list-style-image: var(--gnome-icon-edit-cut-symbolic) !important;
}
/* Copy button */
#copy-button,
#appMenu-copy-button {
list-style-image: var(--gnome-icon-edit-copy-symbolic) !important;
}
/* Paste button */
#paste-button,
#appMenu-paste-button {
list-style-image: var(--gnome-icon-edit-paste-symbolic) !important;
}
/* Overflow button */
#nav-bar-overflow-button {
list-style-image: var(--gnome-icon-pan-down-symbolic) !important;
}
/* Reload */
#reload-button,
.downloadIconRetry > .button-box > .button-icon,
#context-reload {
list-style-image: var(--gnome-icon-view-refresh-symbolic) !important;
}
/* Stop */
#stop-button,
.downloadIconCancel > .button-box > .button-icon,
#context-stop {
list-style-image: var(--gnome-icon-process-stop-symbolic) !important;
}
/* Downlaod */
#downloads-button,
#downloads-indicator-icon {
list-style-image: var(--gnome-icon-folder-download-symbolic) !important;
}
/* Info */
.panel-info-button:not(.translations-panel-settings-gear-icon) > image,
#identity-icon {
list-style-image: var(--gnome-icon-info-outline-symbolic) !important;
}
.tabbrowser-tab[image="chrome://global/skin/icons/info.svg"]:not([busy]):not([progress]) .tab-icon-stack::before {
content: "";
height: 16px;
width: 16px;
background-image: var(--gnome-icon-info-outline-symbolic) !important;
}
/* Password */
#password-notification-icon {
list-style-image: var(--gnome-icon-key-symbolic) !important;
}
/* Url Bar icons */
#urlbar:not(.searchButton) > .urlbar-input-container > #identity-box[pageproxystate="invalid"] #identity-icon {
list-style-image: var(--gnome-icon-edit-find-symbolic) !important;
}
.urlbar-input-container[pageproxystate="valid"] > #tracking-protection-icon-container > #tracking-protection-icon-box > #tracking-protection-icon {
list-style-image: var(--gnome-icon-security-high-symbolic) !important;
}
.urlbar-input-container[pageproxystate="valid"] > #tracking-protection-icon-container > #tracking-protection-icon-box[hasException] > #tracking-protection-icon {
list-style-image: var(--gnome-icon-security-low-symbolic) !important;
}
.urlbar-input-container[pageproxystate="valid"] > #tracking-protection-icon-container > #tracking-protection-icon-box:not([hasException])[active] > #tracking-protection-icon {
list-style-image: var(--gnome-icon-security-high-symbolic) !important;
}
#identity-box[pageproxystate="valid"].verifiedDomain #identity-icon,
#identity-box[pageproxystate="valid"].mixedActiveBlocked #identity-icon {
list-style-image: var(--gnome-icon-channel-secure-symbolic) !important;
}
#identity-box[pageproxystate="valid"].notSecure #identity-icon,
#identity-box[pageproxystate="valid"].mixedActiveContent #identity-icon,
#identity-box[pageproxystate="valid"].httpsOnlyErrorPage #identity-icon,
#identity-box[pageproxystate="valid"].certUserOverridden #identity-icon {
list-style-image: var(--gnome-icon-channel-insecure-symbolic) !important;
}
#identity-popup[connection^="secure"] .identity-popup-security-connection {
list-style-image: var(--gnome-icon-channel-secure-symbolic) !important;
}
#identity-popup[connection="secure-cert-user-overridden"] .identity-popup-security-connection,
.identity-popup-security-connection {
list-style-image: var(--gnome-icon-channel-insecure-symbolic) !important;
}
#permissions-granted-icon {
list-style-image: var(--gnome-icon-general-properties-symbolic) !important;
}
.popup-notification-icon[popupid="web-notifications"], .desktop-notification-icon {
list-style-image: var(--gnome-icon-chat-symbolic) !important;
}
#reader-mode-button {
list-style-image: var(--gnome-icon-newspaper-symbolic) !important;
}
.urlbar-icon {
margin: 2px 0 !important;
}
/* Fix for extensions icons */
@media (prefers-color-scheme: dark) {
.webextension-browser-action {
list-style-image: var(--webextension-menupanel-image-light, inherit) !important;
}
}
/* Folder icon */
.bookmark-item[container],
.downloadIconShow > .button-box > .button-icon {
list-style-image: var(--gnome-icon-folder-symbolic) !important;
}
/* Text clear */
.textbox-search-clear {
content: var(--gnome-icon-edit-clear-symbolic) !important;
}
}

View file

@ -0,0 +1,51 @@
/* Lists */
@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
/* TODO: create list color vars */
/* List container */
#permission-popup-permission-list,
richlistbox#items {
--in-content-item-selected: var(--gnome-accent-bg) !important;
--in-content-item-selected-text: #fff !important;
background: var(--gnome-card-background) !important;
border: 0 !important;
border-radius: var(--gnome-card-radius) !important;
padding: 0 !important;
overflow: hidden;
}
richlistbox#items {
box-shadow: 0 0 0 1px rgba(0, 0, 0, .03),
0 1px 3px 1px rgba(0, 0, 0, .07),
0 2px 6px 2px rgba(0, 0, 0, .03);
}
/* List item */
.permission-popup-permission-item,
richlistbox#items richlistitem {
padding: var(--gnome-toolbar-padding) !important;
margin: 0 !important;
}
.permission-popup-permission-list-anchor {
padding: 0 !important;
}
.permission-popup-permission-list-anchor:not(:has(.permission-popup-permission-item)) {
visibility: collapse;
}
richlistbox#items richlistitem:not(:last-child) {
border-bottom: 1px solid var(--gnome-card-shade-color);
}
.permission-popup-permission-list-anchor:not(#permission-popup-permission-list-default-anchor):has(.permission-popup-permission-item) {
border-top: 1px solid var(--gnome-card-shade-color);
}
#permission-popup-permission-list-default-anchor:empty + .permission-popup-permission-list-anchor {
border: 0 !important;
}
/* Fix list buttons on selected state */
@media (prefers-color-scheme: light) {
richlistbox#items richlistitem[selected=true] button {
filter: invert() brightness(200%) !important;
}
}

View file

@ -0,0 +1,343 @@
/* Popups contents syles */
@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
/* Main menu fxa */
#appMenu-fxa-status[fxastatus="signedin"] > #appMenu-fxa-label {
padding-left: 22px !important;
margin-inline-start: -22px !important;
}
#appMenu-fxa-status[fxastatus="signedin"] > #appMenu-fxa-avatar {
margin-inline-start: 5px !important;
}
#appMenu-fxa-status2[fxastatus] > #appMenu-fxa-label2 > vbox > #appMenu-header-description, #appMenu-fxa-text {
font-weight: 400 !important;
}
/* Style main context menu & buttons */
#context-navigation {
padding: 0;
}
#context-navigation > menuitem > .menu-iconic-left {
margin: auto !important;
}
#context-navigation menuitem {
--toolbarbutton-active-background: transparent !important;
--toolbarbutton-hover-background: transparent !important;
}
/* Main menu */
#appMenu-popup .panel-banner-item:after {
-moz-box-ordinal-group: 0;
margin: 0 8px 0 0 !important;
}
#appMenu-popup .toolbaritem-combined-buttons {
margin-inline-end: 0 !important;
}
#appMenu-popup .toolbaritem-combined-buttons .before-label {
width: 32px !important;
}
.subviewbutton#appMenu-zoom-controls2 {
padding-right: 0 !important;
padding-top: 6px !important;
}
/* User sync account remove avatar */
#fxa-menu-avatar {
display: none;
}
/* Add search engine button remove icon */
#pageAction-panel-addSearchEngine .toolbarbutton-badge-stack {
display: none !important;
}
/* All tabs popover */
.all-tabs-item[selected] {
border-left: 3px solid var(--gnome-tabbar-tab-active-border-bottom-color);
box-shadow: none !important;
}
.all-tabs-item > .all-tabs-secondary-button label {
margin: 0 !important;
}
/* Add bookmark */
#editBookmarkPanel {
#editBookmarkPanelContent {
padding: 0 !important;
label {
margin-top: calc(var(--gnome-toolbar-spacing) * 2) !important;
margin-bottom: var(--gnome-toolbar-spacing) !important;
}
}
#editBookmarkPanelBottomContent {
margin-block: calc(var(--gnome-toolbar-spacing) * 2) !important;
}
}
/* Downloads popover */
#downloadsPanel-mainView .download-state {
padding: 12px !important;
border: 0 !important;
display: flex;
align-items: center;
height: 64px !important;
margin: 0 !important;
}
#downloadsPanel-mainView .downloadMainArea {
flex: 1;
display: flex;
}
#downloadsPanel-mainView .downloadMainArea:hover {
background: transparent !important;
}
#downloadsPanel-mainView .downloadTypeIcon {
margin: 0 !important;
margin-right: 6px !important;
}
#downloadsPanel-mainView .downloadContainer {
margin-inline-end: 0 !important;
flex: 1;
display: flex;
flex-direction: column;
}
#downloadsPanel-mainView .download-state .downloadButton .button-box {
padding: 0 !important;
margin: 0 !important;
}
#downloadsPanel-mainView .download-state toolbarseparator {
display: none;
}
/* Customization overflow menu position */
#customization-panel-container {
margin-top: 10px;
z-index: 10;
}
/* Confirmation Hint */
#confirmation-hint-checkmark-animation-container {
margin: 12px 6px 12px 12px !important;
}
#confirmation-hint-message-container {
margin: 12px 12px 12px 0 !important;
}
/* URLbar popups */
#identity-popup-mainView,
#permission-popup-mainView,
#protections-popup-mainView,
#identity-popup-mainView-panel-header {
max-width: calc(var(--popup-width) + (var(--gnome-menu-padding) * 2)) !important;
min-width: calc(var(--popup-width) + (var(--gnome-menu-padding) * 2)) !important;
}
/* Identity popup */
#identity-popup-security,
.identity-popup-section,
#identity-popup-security-expander .button-box,
.identity-popup-security-content {
border: 0 !important;
}
.identity-popup-security-content {
padding-inline-end: 0 !important;
padding-inline-start: 0 !important;
}
.identity-popup-security-content {
background-position: 0em 0.8em !important;
background-size: 24px auto;
}
.identity-popup-security-content .identity-popup-headline {
margin-left: 1.4em !important;
}
#identity-popup-security-button {
padding: 3px 0 !important;
}
.identity-popup-security-connection.identity-button:not(#hack) {
width: calc(var(--popup-width) - 30px) !important;
}
/* Permission popup */
#permission-popup-permissions-content {
padding: 0 !important;
}
.permission-popup-permission-item:first-child, #permission-popup-storage-access-permission-list-header {
margin-top: 0 !important;
}
.permission-popup-permission-remove-button {
opacity: 1 !important;
}
.permission-popup-permission-state-label {
display: none !important;
}
#permission-popup-permission-list-default-anchor:empty {
padding: 0 !important;
}
.permission-popup-permission-list-anchor[anchorfor="3rdPartyStorage"] {
padding: 0 !important;
}
.permission-popup-permission-list-anchor[anchorfor="3rdPartyStorage"] > vbox:only-child {
display: block !important;
height: 0 !important;
overflow: hidden;
visibility: hidden;
margin: 0 !important;
margin-bottom: -1px !important;
}
.permission-popup-permission-item-3rdPartyStorage {
margin-right: 6px;
margin-bottom: 6px !important;
}
#permission-popup-storage-access-permission-list-header {
padding: 6px !important;
}
/* Protections popup */
.protections-popup-section,
#protections-popup-not-blocking-section-header {
border: 0 !important;
}
#protections-popup-mainView-panel-header-section {
background: transparent !important;
}
#protections-popup-mainView toolbarseparator {
display: none !important;
}
#protections-popup-mainView-panel-header {
color: var(--gnome-window-color) !important;
}
#protections-popup[hasException] #protections-popup-mainView-panel-header {
background: none !important;
}
#protections-popup-main-header-label {
height: auto !important;
margin-inline-start: 6px !important;
text-align: left !important;
}
#protections-popup-mainView-panel-header-span {
margin: 0 !important;
margin-inline-start: 0 !important
}
#protections-popup[toast] #protections-popup-mainView-panel-header {
border-bottom-width: 1px !important;
border-radius: 5px !important;
padding: 0px !important;
}
#protections-popup-info-button {
margin: 0 !important;
}
#protections-popup-message {
background-position: center 12px !important;
background-color: var(--gnome-entry-background);
border: 0 !important;
border-radius: 12px;
color: var(--gnome-window-color) !important;
height: 100% !important;
margin: 0 !important;
}
#protections-popup-message .text-link,
#cfr-protections-panel-link-text {
color: var(--gnome-window-color) !important;
}
.whatsNew-message-body {
padding: 0 6px;
}
#protections-popup-tp-switch-section {
background: var(--gnome-menu-background);
border: 1px solid var(--gnome-button-border-color) !important;
border-radius: 9px;
padding: 0 0 24px 0 !important;
margin: 0 !important;
}
#protections-popup-tp-switch-section-header {
padding: 0 !important;
}
#protections-popup[hasException] #protections-popup-tp-switch-section {
background: var(--gnome-menu-background) !important;
}
.protections-popup-tp-switch-label-box label {
margin-right: 12px !important;
font-weight: normal !important;
}
#protections-popup-no-trackers-found-description {
margin: 12px 8px 0 !important;
text-align: left !important;
}
#protections-popup-blocking-section-header,
#protections-popup-not-found-section-header,
#protections-popup-not-blocking-section-header{
padding: 0px 5px !important;
margin-top: 20px !important;
height: auto !important;
}
#protections-popup-category-list {
margin: 0 !important;
}
.protections-popup-category.notFound .protections-popup-category-label {
width: calc(var(--popup-width) - 70px) !important;
}
.protections-popup-category-label {
margin-inline-start: 6px !important;
}
.protections-popup-category-state-label {
opacity: 0.7;
}
#protections-popup-footer {
display: flex;
justify-content: flex-start;
flex-wrap: wrap;
margin-top: 12px;
}
#protections-popup-show-report-stack,
#protections-popup-settings-button {
width: 100% !important;
}
#protections-popup-show-report-button {
height: 32px !important;
}
#protections-popup-footer-protection-type-label {
margin-left: 6px !important;
}
.protections-popup-description {
border-bottom: 0 !important;
}
.protections-popup-description > description {
margin: 8px !important;
}
/* Feature recommendation notification, fix width */
#contextual-feature-recommendation-notification {
width: auto !important;
}
/* Extensions sometimes assume a white background */
.webextension-popup-browser {
background-color: #fff !important;
}
/* Translate */
#translations-panel-translate:not(:only-child, #hack) {
margin: 0 !important;
}
#translations-panel-lang-selection > label {
margin-top: var(--gnome-menu-padding) !important;
}

View file

@ -0,0 +1,310 @@
/* Popup menus and context menus */
@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
/* Style menus */
menupopup {
appearance: none !important;
color: var(--gnome-window-color) !important;
padding: var(--gnome-menu-padding) !important;
}
menucaption {
color: var(--gnome-window-color) !important;
}
menu menupopup {
margin: -16px 0 0 0 !important;
}
menulist {
padding: 0px !important;
}
.menupopup-arrowscrollbox {
appearance: none !important;
background: var(--gnome-menu-background) !important;
border: 0 !important;
border-radius: var(--gnome-popover-radius) !important;
box-shadow: var(--gnome-menu-shadow) !important;
padding: var(--gnome-menu-padding) !important;
min-height: 45px !important;
}
@media not -moz-pref("gnomeTheme.noThemedIcons") {
menuitem:is([type="checkbox"], [checked="true"]) .menu-iconic-icon,
menuitem[type="radio"] .menu-iconic-icon {
appearance: none !important;
}
}
menuitem {
padding-inline-end: 18px !important;
}
menu, menuitem {
margin-inline: 0 !important;
&:where([_moz-menuactive]:not([disabled="true"])) {
color: currentColor;
background-color: transparent !important;
}
}
menuitem:not([acceltext]) .menu-accel-container {
visibility: collapse !important;
}
menuitem[type="checkbox"] image, menuitem[type="radio"] image {
appearance: none !important;
visibility: visible !important;
}
menuitem[disabled="true"]:hover, menupopup menu[disabled="true"]:hover {
background: transparent !important;
}
.menu-iconic-icon {
padding: 0 !important;
}
/* Adjust popovers position */
panel[type=arrow] {
margin-top: var(--gnome-menu-padding) !important;
}
/* Style popovers */
panel:not([remote]) {
--arrowpanel-background: var(--gnome-menu-background) !important;
--arrowpanel-color: var(--gnome-menu-color) !important;
--panel-item-hover-bgcolor: var(--gnome-selected-background) !important;
}
panel {
--arrowpanel-padding: 0 !important;
--arrowpanel-border-color: var(--gnome-menu-border-color) !important;
--arrowpanel-border-radius: var(--gnome-popover-radius) !important;
--panel-separator-color: var(--gnome-menu-color) !important;
}
/* Padding rules */
#sidebarMenu-popup {
--arrowpanel-padding: var(--gnome-menu-padding) !important;
}
#downloadsPanel-blockedSubview,
#downloadsPanel-mainView,
#select-translations-panel-main-content {
padding: var(--gnome-menu-padding) !important;
}
.panel-header, .panel-footer,
.panel-subview-body,
#protections-popup-mainView-panel-header-section,
.permission-popup-section,
.popup-notification-header-container,
.popup-notification-body-container,
.popup-notification-footer-container,
.translations-panel-content {
padding: 0 var(--gnome-menu-padding) var(--gnome-menu-padding) !important;
}
:is(
.panel-header, .panel-footer,
.panel-subview-body,
.protections-popup-section,
#protections-popup-mainView-panel-header-section,
.permission-popup-section,
.identity-popup-section,
.popup-notification-header-container,
.popup-notification-body-container,
.popup-notification-footer-container
):first-child:not(:empty) {
padding-top: var(--gnome-menu-padding) !important;
}
#protections-popup-footer,
#identity-popup-clear-sitedata-footer {
padding: 0 var(--gnome-menu-padding) !important;
}
.panel-subview-body > .panel-subview-body {
padding: 0 !important;
}
/* Padding with margign */
.subviewbutton.panel-subview-footer-button:not(#downloadsHistory) {
margin: var(--gnome-menu-padding) !important;
}
.subviewbutton.panel-subview-footer-button:not(:only-child, #downloadsHistory) {
margin: 0 var(--gnome-menu-padding) !important;
}
.subviewbutton.panel-subview-footer-button:not(:only-child, #downloadsHistory, #translations-panel-translate):last-child {
margin-bottom: var(--gnome-menu-padding) !important;
}
/* No menu */
#notification-popup,
#permission-popup,
#editBookmarkPanel,
#downloadsPanel,
#translations-panel {
--gnome-menu-padding: 12px !important;
}
/* Panel arrow */
.panel-arrowcontent {
background: var(--arrowpanel-background) !important;
border: 1px solid var(--gnome-menu-border-color) !important;
border-radius: 12px !important;
color: var(--gnome-window-color) !important;
}
.panel-arrow {
fill: var(--arrowpanel-background) !important;
stroke: var(--gnome-menu-border-color) !important;
display: -moz-inline-box !important;
}
/* Panel header */
.panel-header {
position: relative !important;
}
/* Panel footer */
.panel-footer {
background-color: transparent !important;
margin: 0 !important;
}
.panel-subview-body .panel-footer {
padding: 0 !important;
}
.panel-footer.panel-footer-menulike {
border-top: 0 !important;
margin-top: 8px !important;
}
.panel-footer toolbarseparator {
display: none !important;
}
.proton-zap {
border-image: unset !important;
}
.panel-subview-footer {
margin-top: 10px !important;
}
/* Remove unwanted separators */
.panel-header + toolbarseparator,
#identity-popup-mainView-panel-header + toolbarseparator,
#permission-popup-mainView-panel-header + toolbarseparator,
#protections-popup-mainView-panel-header-section + toolbarseparator {
display: none !important;
}
/* Menu buttons */
menuitem, menupopup menu,
panelview .subviewbutton:not(#appMenu-fxa-label2, .unified-extensions-item-menu-button),
panelview .toolbarbutton-1,
panelview .unified-extensions-item-action-button,
.protections-popup-footer-button,
.protections-popup-category,
.identity-popup-content-blocking-category,
#downloadsPanel-mainView .download-state {
-moz-appearance: none !important;
border-radius: var(--gnome-button-radius) !important;
color: var(--gnome-window-color) !important;
font: menu !important;
padding: 4px 12px !important;
min-height: 32px !important;
&:hover, &[_moz-menuactive], &:focus, &:focus-within {
background: var(--gnome-selected-color) !important;
outline: 0 !important;
}
}
.subviewbutton,
.protections-popup-footer-button,
.protections-popup-category,
.identity-popup-content-blocking-category,
.openintabs-menuitem,
.widget-overflow-list .toolbarbutton-1,
panelview .unified-extensions-item {
margin: 0 !important;
}
.subviewbutton[shortcut]:after {
opacity: 0.5 !important;
color: var(--gnome-menu-color) !important;
}
.bookmark-item .menu-right {
fill-opacity: 1 !important;
}
/* Menu buttons disabled */
menuitem[disabled="true"], menupopup menu[disabled="true"],
.subviewbutton[disabled="true"], .toolbarbutton-1[disabled="true"],
.protections-popup-category[disabled="true"],
.identity-popup-content-blocking-category[disabled="true"] {
opacity: .5 !important;
}
menuitem[disabled="true"][_moz-menuactive], menupopup menu[disabled="true"][_moz-menuactive] {
background: transparent !important;
}
/* Menu buttons fix */
#appMenu-fxa-label2 {
padding: 0 !important;
}
#appMenu-fxa-label2:hover {
background: transparent !important;
}
/* Menu buttons back */
.subviewbutton-back {
opacity: 1 !important;
width: 100%;
-moz-box-align: center !important;
-moz-box-pack: start !important;
}
.subviewbutton-back + h1 {
font-weight: normal !important;
left: 0 !important;
padding: 0 !important;
pointer-events: none;
position: absolute !important;
top: 12px !important;
width: 100%;
}
/* Menu headers */
.subview-subheader {
font: menu !important;
font-weight: bold !important;
padding-block: 0 !important;
margin: 0 4px !important;
}
/* Style popover separators */
panel toolbarseparator, menuseparator {
appearance: none !important;
padding: 0 !important;
&:not([orient="vertical"]) {
border-top: 1px solid var(--gnome-menu-separator-color) !important;
margin: 6px 0 !important;
&::before {
display: none !important;
}
}
&[orient="vertical"] {
margin: 0 6px !important;
}
}
#PlacesToolbar menupopup[placespopup="true"] menuseparator {
border-top: 1px solid var(--gnome-menu-separator-color) !important;
padding: 0 !important;
margin: 6px 0 !important;
}
#PlacesToolbar menupopup[placespopup="true"] menuseparator::before {
border: 0 !important;
}
.panel-subview-body + toolbarseparator:not([orient="vertical"]) {
margin: 0 0 6px !important;
}
panelview > toolbarseparator:not([orient="vertical"]),
#identity-popup-more-info-footer toolbarseparator:not([orient="vertical"]){
margin: 6px !important;
}
#identity-popup-clear-sitedata-footer toolbarseparator:not([orient="vertical"]) {
margin-top: 0 !important;
}

View file

@ -0,0 +1,11 @@
/* Removes a white flash after you open or close a tab. Affects all variants,
* but it's more visible on dark variants. */
@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
/* Overrides: Change the flash color */
#tabbrowser-tabpanels,
#tabbrowser-tabpanels[pendingpaint],
browser {
background-color: var(--gnome-window-background) !important;
}

View file

@ -0,0 +1,131 @@
/* Sidebar */
@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
/* Main sidebar */
#sidebar-main {
--button-size-icon: var(--gnome-button-size) !important;
background-color: var(--gnome-sidebar-background) !important;
}
link[href="chrome://browser/content/sidebar/sidebar-main.css"] + .wrapper {
.tools-and-extensions {
align-items: center !important;
justify-content: center !important;
&[orientation="horizontal"] {
padding: var(--gnome-toolbar-padding) !important;
}
}
.actions-list {
& > moz-button:not(.tools-overflow) {
--button-outer-padding-inline: var(--gnome-toolbar-padding) !important;
--button-outer-padding-block: calc(var(--gnome-toolbar-spacing) / 2) !important;
--toolbarbutton-active-background: var(--gnome-selected-color) !important;
&:last-of-type {
--button-outer-padding-block-end: var(--gnome-toolbar-padding) !important;
}
&:first-of-type {
--button-outer-padding-block-start: var(--gnome-toolbar-padding) !important;
}
}
}
}
/* Sidebar content */
#sidebar-box {
padding: 0 !important;
}
#sidebar-box:-moz-window-inactive label, #sidebar-box:-moz-window-inactive image,
.sidebar-panel:-moz-window-inactive label, .sidebar-panel:-moz-window-inactive image,
.tools-and-extensions:-moz-window-inactive,
.sidebar-placesTreechildren:-moz-window-inactive {
opacity: 0.7 !important;
}
#sidebar {
background-color: var(--gnome-secondary-sidebar-background) !important;
border: 0 !important;
border-radius: 0 !important;;
box-shadow: none !important;
}
#sidebar-search-container {
padding: var(--gnome-toolbar-padding) !important;
}
/* Separator */
#sidebar-splitter,
#sidebar-launcher-splitter {
background: var(--gnome-toolbar-background) !important;
border: 0 !important;
border-right: 1px solid var(--gnome-border-color) !important;
border-color: var(--gnome-toolbar-border-color) !important;
margin: 0 !important;
width: 0 !important;
}
#sidebar-tools-and-extensions-splitter {
background: transparent !important;
margin-block: 0 !important;
}
/* Browser content */
#tabbrowser-tabbox {
--chrome-content-separator-color: var(--gnome-toolbar-border-color);
box-shadow: none !important;
outline: 0 !important;
}
/* Settings lists */
/* TODO: Move to lists.css */
.customize-group .extensions,
link[href="chrome://global/content/elements/moz-fieldset.css"] ~ fieldset #inputs {
background: var(--gnome-card-background) !important;
border: 0 !important;
border-radius: var(--gnome-card-radius) !important;
box-shadow: 0 0 0 1px rgba(0, 0, 0, .03), 0 1px 3px 1px rgba(0, 0, 0, .07), 0 2px 6px 2px rgba(0, 0, 0, .03);
margin-top: 12px !important;
padding: 0 !important;
}
moz-checkbox, moz-radio, .customize-group .extension-item {
display: flex !important;
padding: 0 !important;
&:not(:last-of-type) {
border-bottom: 1px solid var(--gnome-card-shade-color) !important;
}
&[slot="nested"]:first-of-type {
border-top: 1px solid var(--gnome-card-shade-color) !important;
}
}
moz-checkbox, moz-radio {
flex-direction: column;
justify-content: center;
margin-block-start: 0 !important;
}
.customize-group .extension-item {
align-items: center;
min-height: 50px !important;
padding: 0 12px !important;
}
link[href="chrome://global/content/elements/moz-input-common.css"]:has(~ .nested) {
& ~ .label-wrapper {
margin-inline: 12px !important;
& > label {
align-items: center;
display: flex !important;
gap: var(--gnome-toolbar-spacing);
min-height: 50px !important;
}
}
& ~ .nested {
gap: 0 !important;
margin: 0 !important;
}
}

View file

@ -0,0 +1,892 @@
/* Tabs bar */
@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
/* Override vars */
:root {
--space-above-tabbar: 0 !important;
--tab-min-height: var(--gnome-button-size) !important;
--tab-border-radius: var(--gnome-button-radius) !important;
--tab-hover-background-color: var(--gnome-hover-color) !important;
--tab-selected-bgcolor: var(--gnome-selected-color) !important;
--tab-pinned-container-margin-inline-expanded: calc(var(--gnome-toolbar-padding) / 2) !important;
--tabstrip-inner-border: 1px solid var(--gnome-border-color) !important;
--gnome-tabbar-tab-close-overlay-bg: var(--gnome-tabbar-tab-hover-background);
@media not -moz-pref("sidebar.verticalTabs") {
/* We need the hardcoded tab colors in horizontal tabs, beacuse of the close button overlay */
--tab-hover-background-color: var(--gnome-tabbar-tab-hover-background) !important;
--tab-selected-bgcolor: var(--gnome-tabbar-tab-active-background) !important;
}
}
/* Tabsbar */
#TabsToolbar {
background-color: var(--gnome-tabbar-background) !important;
border-bottom: 0 !important;
padding: 0 calc(var(--gnome-toolbar-padding) / 2) !important;
position: relative;
z-index: 1;
--toolbarbutton-inner-padding: var(--toolbarbutton-inner-padding) !important;
/* Remove hover effects on tab bar buttons */
--toolbarbutton-active-background: transparent !important;
--toolbarbutton-hover-background: transparent !important;
/* Tabs scroll fade */
--gnome-tabbar-fade-background: var(--gnome-tabbar-background);
/* Remove tabbar's window controls */
.titlebar-buttonbox-container {
display: none !important;
}
/* Remove blank spaces on tabs start and end */
.titlebar-spacer {
display: none !important;
}
/* Tabsbar buttons */
.toolbarbutton-1 {
border-radius: var(--gnome-button-radius) !important;
margin: 0px calc(var(--gnome-toolbar-spacing) / 2) var(--gnome-toolbar-padding) !important;
min-height: var(--gnome-button-size) !important;
min-width: var(--gnome-button-size) !important;
transition: background var(--gnome-animation-time);
&:not([disabled]):not(:active):not([open]):hover {
background-color: var(--gnome-tabbar-tab-hover-background) !important;
}
&:active, &[open] {
background-color: var(--gnome-tabbar-tab-active-background) !important;
}
}
}
/* Tabs container */
#tabbrowser-tabs {
/* Horizontal */
&[orient="horizontal"] {
&, arrowscrollbox {
height: auto !important;
min-height: auto !important;
--tab-min-height: var(--gnome-button-size) !important;
}
}
/* Vertical */
&[orient="vertical"] {
grid-gap: 0 !important;
&[expanded] {
--tab-inner-inline-margin: var(--gnome-toolbar-padding) !important;
}
#tabbrowser-arrowscrollbox-periphery > #tabs-newtab-button,
#vertical-tabs-newtab-button {
margin-block: calc(var(--gnome-toolbar-padding) / 2) !important;
}
}
}
/* Tabs scroll */
#tabbrowser-arrowscrollbox {
&[orient="horizontal"] {
position: relative !important;
}
&[orient="vertical"] {
--gnome-undershoot-top: inset 0 1px color-mix(in srgb, var(--gnome-shade-color) 75%, transparent);
--gnome-undershoot-bottom: inset 0 -1px color-mix(in srgb, var(--gnome-shade-color) 75%, transparent);
&[overflowing] {
&:not([scrolledtostart]) {
box-shadow: var(--gnome-undershoot-top);
}
&:not([scrolledtoend]) {
box-shadow: var(--gnome-undershoot-bottom);
}
&:not([scrolledtostart], [scrolledtoend]) {
box-shadow: var(--gnome-undershoot-top), var(--gnome-undershoot-bottom);
}
}
}
}
/* Horizontal tabs scroll fade */
#scrollbutton-up:has(~ scrollbox[orient="horizontal"]),
scrollbox[orient="horizontal"] ~ #scrollbutton-down {
border-top: 0 !important;
position: absolute !important;
z-index: 5 !important;
top: 0;
bottom: 0;
}
#scrollbutton-up:has(~ scrollbox[orient="horizontal"])[disabled],
scrollbox[orient="horizontal"] ~ #scrollbutton-down[disabled] {
display: none;
}
#scrollbutton-up:has(~ scrollbox[orient="horizontal"]) > .toolbarbutton-icon,
scrollbox[orient="horizontal"] ~ #scrollbutton-down > .toolbarbutton-icon{
visibility: hidden;
}
scrollbox[orient="horizontal"] ~ #scrollbutton-down {
right: 0;
margin-inline-end: -5px !important;
}
#scrollbutton-up:has(~ scrollbox[orient="horizontal"]) {
left: 0;
margin-inline-start: -5px !important;
}
#scrollbutton-up:has(~ scrollbox[orient="horizontal"]):not([disabled])::after,
scrollbox[orient="horizontal"] ~ #scrollbutton-down:not([disabled])::after {
content: "";
height: 39px;
position: absolute;
top: -3px;
z-index: -1;
width: 50px;
pointer-events: none;
}
#scrollbutton-up:has(~ scrollbox[orient="horizontal"]):not([disabled])::after {
background: linear-gradient(to right, var(--gnome-tabbar-fade-background) 10px, transparent);
left: 0;
}
scrollbox[orient="horizontal"] ~ #scrollbutton-down:not([disabled])::after {
background: linear-gradient(to left, var(--gnome-tabbar-fade-background) 10px, transparent);
right: 0;
}
spacer[part=overflow-start-indicator], spacer[part=overflow-end-indicator] {
width: 0 !important;
border: 0 !important;
margin-inline: 0 !important;
}
/* Tabs */
.tabbrowser-tab {
&[selected="true"] {
--gnome-tabbar-tab-close-overlay-bg: var(--gnome-tabbar-tab-active-background);
&:hover {
--gnome-tabbar-tab-close-overlay-bg: var(--gnome-tabbar-tab-active-hover-background) !important;
}
}
@media -moz-pref("gnomeTheme.closeOnlySelectedTabs") {
--gnome-tabbar-tab-close-overlay-bg: unset;
}
/* OPTIONAL: Add more contrast to the active tab */
@media -moz-pref("gnomeTheme.activeTabContrast") {
&[selected="true"], &:hover {
--tab-hover-background-color: var(--gnome-tabbar-tab-active-background-contrast) !important;
--tab-selected-bgcolor: var(--gnome-tabbar-tab-active-background-contrast) !important;
--gnome-tabbar-tab-close-overlay-bg: var(--gnome-tabbar-tab-active-background-contrast) !important;
}
}
/* Horizontal tabs only */
#tabbrowser-tabs[orient="horizontal"] & {
position: relative;
> stack {
height: var(--tab-min-height) !important;
width: var(--tab-min-height) !important;
min-height: var(--tab-min-height) !important;
}
/* Not in collapsed tab-group */
:not([collapsed]) > & {
padding: 0px calc(var(--gnome-toolbar-spacing) / 2 - 1px) var(--gnome-toolbar-padding) !important;
&:not([hidden=true]):last-of-type {
padding-right: calc(var(--gnome-toolbar-spacing) / 2) !important;
}
/* Full width tabs */
@media not -moz-pref("gnomeTheme.normalWidthTabs") {
&:not([style^="max-width"]):not([pinned]),
&[style^="max-width: 100px !important;"]:not([pinned]) {
max-width: 100% !important;
--tab-min-width-pref: 131px !important;
}
&:not([style^="max-width"]):not([pinned]):not([fadein]),
&[style^="max-width: 100px !important;"]:not([pinned]):not([fadein]) {
max-width: .1px !important;
}
}
}
}
/* Vertical tabs only */
#tabbrowser-tabs[orient="vertical"] & {
padding-block: calc(var(--gnome-toolbar-spacing) / 2) !important;
&[pinned] {
padding-block: var(--gnome-toolbar-spacing) !important;
}
}
}
/* Tab background */
.tab-background {
box-shadow: none !important;
transition: background var(--gnome-tab-animation-time) linear !important;
margin-block: 0 !important;
/* Selected hover */
tab[selected]:hover & {
background-color: var(--gnome-selected-hover-color) !important;
@media not -moz-pref("sidebar.verticalTabs") {
background-color: var(--gnome-tabbar-tab-active-hover-background) !important;
}
}
/* Use raised button colors for pinned tabs in vertical */
#tabbrowser-tabs[orient="vertical"] tab[pinned] & {
background-color: var(--gnome-button-background) !important;
&[selected] {
background-color: var(--gnome-button-checked-background) !important;
}
tab:hover & {
background-color: var(--gnome-button-hover-background) !important;
&[selected] {
background-color: var(--gnome-button-checked-hover-background) !important;
}
}
}
/* Add solid bg on tabs dnd */
#tabbrowser-tabs[movingtab] tab:is([multiselected], [selected]) & {
background-color: var(--gnome-tabbar-background) !important;
background-image: linear-gradient(var(--tab-selected-bgcolor), var(--tab-selected-bgcolor)) !important;
}
}
/* Tab content */
.tab-content {
#tabbrowser-tabs[orient="horizontal"] & {
/* Center content on horizontal tabs */
align-items: center !important;
justify-content: center !important;
margin-top: -1px;
position: relative !important;
&:not([pinned]) {
padding: 0 4px !important;
}
&[pinned] {
padding: 0 5px !important;
}
/* Rearrange contents */
.tab-audio-button {
order: 0;
}
.tab-icon-stack {
order: 1;
}
.tab-label-container {
order: 2;
}
.tab-close-button {
order: 3;
}
/* Prevent tab icons size breaking */
.tab-icon-image, .tab-icon-sound, .tab-throbber, .tab-throbber-fallback, .tab-close-button {
min-width: 16px;
}
/* Tab close button etc. positioning */
.tab-throbber, .tab-icon-image, .tab-sharing-icon-overlay, .tab-icon-sound, .tab-close-button {
margin-top: 0 !important;
}
/* Close button overlay */
&:not([pinned])::before {
background: linear-gradient(to left, var(--gnome-tabbar-tab-close-overlay-bg) 50%, transparent);
border-radius: 0 4px 4px 0;
bottom: 2px;
content: "";
height: calc(100% - 5px);
opacity: 0;
position: absolute;
right: 2px;
transition: all var(--gnome-tab-animation-time) linear;
width: 55px;
z-index: 99;
}
&:not([pinned])[selected]::before,
tab:hover &::before {
opacity: 1;
}
:root[dir="rtl"] &:not([pinned])::before {
display: none;
}
/* Left close button */
@media (-moz-gtk-csd-reversed-placement) and (not -moz-pref("gnomeTheme.swapTabClose")),
(-moz-pref("gnomeTheme.swapTabClose")) and (not (-moz-gtk-csd-reversed-placement)) {
/* Rearrange and fix alignment */
.tab-audio-button {
order: 3 !important;
}
.tab-icon-stack {
margin-inline-start: 0 !important;
}
.tab-label-container {
margin-inline-end: auto !important;
}
.tab-close-button {
margin-inline-start: 0 !important;
order: 0 !important;
}
/* Overlay is not longer needed */
:root[dir="ltr"] &:not([pinned])::before {
display: none !important;
}
}
}
}
/* Tab label */
.tab-label-container {
#tabbrowser-tabs[orient="horizontal"] & {
min-width: 0 !important;
max-width: min-content !important;
:root[dir="ltr"] &:not([pinned]) {
margin-inline-end: -16px;
}
/* Fix alignment when audio button is prestent */
tab:is([muted], [soundplaying]) & {
@media (not (-moz-gtk-csd-reversed-placement)) and (not -moz-pref("gnomeTheme.swapTabClose")) {
margin-inline-end: 0 !important;
}
}
}
/* Hide secondary label, muted, playing, etc */
.tab-secondary-label {
display: none;
}
}
/* Tab buttons */
.tab-icon-overlay,
.tab-close-button {
border: 0 !important;
box-sizing: content-box !important; /* Avoid deformation on flexbox */
border-radius: 50% !important;
padding: 4px !important;
background-image: none !important;
background-color: transparent !important;
background-size: 24px;
transition: all var(--gnome-animation-time) ease-out !important;
&:hover {
background-color: var(--gnome-hover-color) !important;
}
&:active {
background-color: var(--gnome-active-color) !important;
}
/* Set solid bg when in no expanded vertical tabs */
#tabbrowser-tabs[orient="vertical"]:not([expanded]) & {
background-color: var(--gnome-window-background) !important;
}
}
/* Audio button */
.tab-audio-button {
--button-border-radius: 50% !important;
--button-size-icon-small: 24px !important;
#tabbrowser-tabs[orient="horizontal"] & {
margin-inline: 0 !important;
}
}
/* Tab close button */
.tab-close-button {
fill: var(--gnome-window-color) !important;
fill-opacity: 1 !important;
height: 16px !important;
list-style-image: var(--gnome-icon-window-close-symbolic) !important;
width: 16px !important;
-moz-context-properties: fill, fill-opacity !important;
#tabbrowser-tabs[orient="horizontal"] & {
margin-inline-start: auto;
margin-inline-end: 0 !important;
opacity: 1 !important;
z-index: 100 !important;
/* Autohide */
&:not([selected]) {
visibility: hidden !important;
opacity: 0 !important;
}
/* Show close button on tab hover */
tab:hover & {
@media not -moz-pref("gnomeTheme.closeOnlySelectedTabs") {
visibility: visible !important;
opacity: 1 !important;
}
}
}
}
/* Icon overlay */
.tab-icon-overlay {
height: 12px !important;
left: 11px !important;
top: -3px !important;
width: 12px !important;
&:not([crashed]) {
padding: 2px !important;
background: var(--gnome-button-background) !important;
&:hover {
background: var(--gnome-button-hover-background) !important;
}
}
&[busy] {
display: none !important;
}
}
/* Tab icon */
.tab-icon-stack {
align-items: center;
/* Avoid firefox hiding elements on indicator-replaces-favicon */
&[indicator-replaces-favicon] :not(&) {
opacity: 1 !important;
}
#tabbrowser-tabs[orient="horizontal"] & {
&:not([pinned]) {
margin-inline-start: auto !important;
margin-inline-end: 2px;
@media -moz-pref("gnomeTheme.tabAlignLeft") {
/* OPTIONAL: Align tab items left */
margin-inline-start: 0 !important;
padding: 0 5px !important;
}
.tab-throbber, .tab-icon-pending, .tab-icon-image, .tab-sharing-icon-overlay, .tab-icon-overlay {
margin-inline-end: 0 !important;
}
}
&[busy], &[sharing], .tab-icon-image:not([sharing]) {
padding: 4px;
}
.tab-icon-image {
transition: opacity var(--gnome-animation-time) ease-out !important;
}
}
&::before {
margin: 4px;
}
}
/* Tabs separators */
:root[dir="ltr"] #tabbrowser-tabs[orient="horizontal"] {
:not([collapsed]) > tab {
border-color: transparent !important;
border-left-width: 1px !important;
border-style: solid !important;
}
tab:not(:first-of-type, [selected], :hover) {
--gnome-tabbar-tab-separator-hack0: var(--gnome-tabbar-background);
--gnome-tabbar-tab-separator-hack1: linear-gradient(
to bottom,
var(--gnome-tabbar-tab-separator-hack0) 0,
var(--gnome-tabbar-tab-separator-hack0) 3px,
var(--gnome-tabbar-tab-separator-color) 3px,
var(--gnome-tabbar-tab-separator-color) 31px,
var(--gnome-tabbar-tab-separator-hack0) 31px,
var(--gnome-tabbar-tab-separator-hack0) 40px
) 1;
border-image: var(--gnome-tabbar-tab-separator-hack1);
}
tab[selected] ~ tab:not([hidden="true"]) {
border-image: none;
}
tab[selected] ~ tab:not([hidden="true"]) ~ tab:not([hidden="true"]) {
border-image: var(--gnome-tabbar-tab-separator-hack1);
}
tab:hover ~ tab:not([hidden="true"]) {
border-image: none !important;
}
tab:hover ~ tab:not([hidden="true"]) ~ tab:not([hidden="true"]) {
border-image: var(--gnome-tabbar-tab-separator-hack1) !important;
}
tab:hover ~ tab[selected] ~ tab:not([hidden="true"]) {
border-image: none !important;
}
tab:hover ~ tab[selected] ~ tab:not([hidden="true"]) ~ tab:not([hidden="true"]) {
border-image: var(--gnome-tabbar-tab-separator-hack1) !important;
}
tab-group[collapsed] + tab {
border-image: none !important;
}
}
/* Tabs group */
tab-group {
#tabbrowser-tabs[orient="horizontal"] & {
.tab-group-line {
margin-block-end: calc(var(--gnome-toolbar-padding) * -1) !important;
margin-inline: calc((var(--gnome-toolbar-spacing) / 2) * -1) !important;
}
}
#tabbrowser-tabs[orient="vertical"][expanded] & {
margin-inline-start: calc(var(--gnome-toolbar-padding) * 2) !important;
padding-inline-start: var(--tab-group-line-thickness);
}
}
.tab-group-label-container {
#tabbrowser-tabs[orient="vertical"][expanded] & {
margin-block: 0 !important;
margin-inline-start: calc(var(--tab-group-line-thickness) * -1);
}
#tabbrowser-tabs[orient="vertical"]:not([expanded]) & {
tab-group[collapsed] & {
margin-block: var(--gnome-toolbar-padding) !important;
}
}
}
/* Tabs group label */
.tab-group-label {
border-radius: 26px !important;
tab-group[collapsed] & {
@media (prefers-color-scheme: dark) {
outline: 0 !important;
}
}
#tabbrowser-tabs[orient="horizontal"] &,
#tabbrowser-tabs[orient="vertical"][expanded] & {
padding: 2px 9px !important;
}
#tabbrowser-tabs[orient="vertical"][expanded] & {
align-items: center !important;
display: flex;
margin-block: var(--gnome-toolbar-padding) !important;
&::before {
-moz-context-properties: fill;
fill: currentColor !important;
background: var(--gnome-icon-pan-end-symbolic) no-repeat;
background-size: contain;
content: "";
display: block;
height: 16px;
margin-inline-end: 3px;
width: 16px;
}
tab-group:not([collapsed]) &::before {
background-image: var(--gnome-icon-pan-down-symbolic);
}
}
}
/* Tabs group line */
.tab-group-line {
#tabbrowser-tabs[orient="vertical"] & {
inset-block: -3px !important;;
}
}
/* Tabs group overflow */
.tab-group-overflow-count-container {
#tabbrowser-tabs[orient="vertical"] & {
padding-block-start: 0 !important;
}
}
/* Remove spacing between pinned tabs and first tab */
#tabbrowser-tabs[haspinnedtabs]:not([positionpinnedtabs]) > #tabbrowser-arrowscrollbox > .tabbrowser-tab:nth-child(1 of :not([pinned], [hidden])) {
margin-inline-start: 0 !important;
}
/* Always display close icon (hidden) */
#tabbrowser-tabs[closebuttons="activetab"] .tab-close-button:not([pinned]) {
display: block !important;
}
/* Always show the muted icon when present */
#tabbrowser-tabs:not([secondarytext-unsupported]) .tabbrowser-tab:not(:hover) .tab-icon-overlay[indicator-replaces-favicon] {
opacity: 1 !important;
}
/* Fix custom info tab icon */
.tabbrowser-tab[image="chrome://global/skin/icons/info.svg"]:not([pinned]):not([busy]):not([progress]) .tab-icon-stack::before {
margin-inline-end: 5.5px;
}
.tabbrowser-tab[image="chrome://global/skin/icons/info.svg"] .tab-icon-image {
display: none !important;
}
/* Tabs containers */
.tabbrowser-tab[usercontextid] {
& > .tab-stack > .tab-background > .tab-context-line {
display: none;
}
.tab-label-container {
color: var(--identity-tab-color) !important;
font-weight: bold !important;
}
#tabbrowser-tabs[orient="vertical"]:not([expanded]) & {
.tab-background {
outline: 1px solid var(--identity-tab-color) !important;
}
}
}
.identity-color-blue,
.identity-color-turquoise,
.identity-color-green,
.identity-color-yellow,
.identity-color-orange,
.identity-color-red,
.identity-color-pink,
.identity-color-purple {
--identity-icon-color: var(--identity-tab-color) !important;
}
.identity-color-blue {
--identity-tab-color: var(--gnome-tabbar-identity-color-blue) !important;
}
.identity-color-turquoise {
--identity-tab-color: var(--gnome-tabbar-identity-color-turquoise) !important;
}
.identity-color-green {
--identity-tab-color: var(--gnome-tabbar-identity-color-green) !important;
}
.identity-color-yellow {
--identity-tab-color: var(--gnome-tabbar-identity-color-yellow) !important;
}
.identity-color-orange {
--identity-tab-color: var(--gnome-tabbar-identity-color-orange) !important;
}
.identity-color-red {
--identity-tab-color: var(--gnome-tabbar-identity-color-red) !important;
}
.identity-color-pink {
--identity-tab-color: var(--gnome-tabbar-identity-color-pink) !important;
}
.identity-color-purple {
--identity-tab-color: var(--gnome-tabbar-identity-color-purple) !important;
}
/* Needs attetion tab indicator */
.tabbrowser-tab:is([image], [pinned]) > .tab-stack > .tab-content,
.tabbrowser-tab > .tab-stack > .tab-content[pinned][titlechanged] {
background-size: 0px 0px !important;
background-position: center bottom !important;
transition-property: background-size;
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
transition-duration: calc(var(--gnome-animation-time) / 2);
}
.tabbrowser-tab:is([image], [pinned]) > .tab-stack > .tab-content[attention]:not([selected]),
.tabbrowser-tab > .tab-stack > .tab-content[pinned][titlechanged]:not([selected]) {
background-image: radial-gradient(var(--gnome-tabbar-tab-needs-attetion), var(--gnome-tabbar-tab-needs-attetion) 10px) !important;
background-size: clamp(20%, 50%, 7rem) 2px !important;
}
.tab-label[attention]:not([selected]) {
font-weight: normal !important;
}
/* Tab spinner */
.tab-throbber::before {
animation: none !important;
background-image: url("../icons/spinner.png") !important;
background-size: 16px;
width: 16px !important;
opacity: 1 !important;
@media (prefers-color-scheme: dark) {
background-image: url("../icons/spinner-dark.png") !important;
}
}
/* Tabs manager menu */
#alltabs-button {
@media not -moz-pref("gnomeTheme.allTabsButton") {
visibility: collapse;
}
@media -moz-pref("browser.tabs.tabmanager.enabled"), -moz-pref("gnomeTheme.allTabsButtonOnOverflow") {
#tabbrowser-tabs[overflow] ~ & {
visibility: visible;
}
}
#tabbrowser-tabs:not([overflow])[using-closing-tabs-spacer] ~ & {
display: none !important;
}
}
/* Firefox View */
#TabsToolbar #firefox-view-button .toolbarbutton-icon {
box-shadow: none !important;
fill: var(--gnome-toolbar-icon-fill) !important;
height: 16px !important;
opacity: 1 !important;
width: 16px !important;
overflow: visible !important;
border-radius: initial !important;
}
:root:not([privatebrowsingmode="temporary"]):not([firefoxviewhidden]) :is(#firefox-view-button, #wrapper-firefox-view-button) + #tabbrowser-tabs {
border-inline-start: 0 !important;
padding-inline-start: var(--tab-overflow-pinned-tabs-width) !important;
margin-inline-start: 0 !important;
}
/* OPTIONAL: Hide single tab */
@media -moz-pref("gnomeTheme.hideSingleTab") and (not -moz-pref("sidebar.verticalTabs")) {
#tabbrowser-tabs:not(:has(tab:not([hidden="true"]) ~ tab:not([hidden="true"]))) {
:is(tab, tab ~ toolbarbutton, tab ~ #tabbrowser-arrowscrollbox-periphery) {
visibility: collapse;
}
~ #alltabs-button {
visibility: collapse;
}
}
}
/* OPTIONAL: Use tabs as headerbar */
@media -moz-pref("gnomeTheme.tabsAsHeaderbar") and (not -moz-pref("sidebar.verticalTabs")) {
/* Rearrange bars */
#navigator-toolbox #TabsToolbar {
order: 0;
}
#navigator-toolbox #toolbar-menubar {
order: 1;
}
#navigator-toolbox #nav-bar {
order: 3;
}
#navigator-toolbox #PersonalToolbar {
order: 4;
}
@media -moz-pref("gnomeTheme.bookmarksToolbarUnderTabs") {
#navigator-toolbox #PersonalToolbar {
order: 2 !important;
}
}
#TabsToolbar {
/* Spacing should be removed on the side touching the URL bar */
.toolbarbutton-1,
.titlebar-button {
margin-bottom: 0 !important;
}
.toolbarbutton-1 {
margin-top: var(--gnome-toolbar-padding) !important;
}
}
#tabbrowser-tabs[orient="horizontal"] {
/* Invert padding */
:not([collapsed]) > .tabbrowser-tab, .tabbrowser-tab {
padding-bottom: 0px !important;
padding-top: var(--gnome-toolbar-padding) !important;
}
/* Move tab group line to top */
.tab-group-label-container::after {
inset: 0 !important;
}
tab-group {
.tab-group-line {
margin-block-end: 0 !important;
margin-block-start: calc(var(--gnome-toolbar-padding) * -1) !important;
top: 0 !important;
}
}
/* Tabs separators */
:root[dir="ltr"] & {
tab:not(:first-of-type, [selected], :hover) {
--gnome-tabbar-tab-separator-hack1: linear-gradient(
to bottom,
var(--gnome-tabbar-tab-separator-hack0) 0,
var(--gnome-tabbar-tab-separator-hack0) 9px,
var(--gnome-tabbar-tab-separator-color) 9px,
var(--gnome-tabbar-tab-separator-color) 37px,
var(--gnome-tabbar-tab-separator-hack0) 37px,
var(--gnome-tabbar-tab-separator-hack0) 40px
) 1;
border-image: var(--gnome-tabbar-tab-separator-hack1);
}
}
}
/* Remove nav-bar rounding and padding */
:root[customtitlebar][sizemode="normal"]:not([gtktiledwindow="true"]) #nav-bar {
border-radius: 0 !important;
}
/* Round and pad tab-bar */
:root[customtitlebar][sizemode="normal"]:not([gtktiledwindow="true"]) #TabsToolbar {
border-radius: env(-moz-gtk-csd-titlebar-radius) env(-moz-gtk-csd-titlebar-radius) 0 0 !important
}
:root[customtitlebar]:not([inFullscreen], [sizemode="maximized"]) #TabsToolbar .toolbar-items {
padding: 0 46px;
}
/* Hide duplicate window controls from navbar */
:root[customtitlebar] #nav-bar .titlebar-buttonbox-container {
display: none !important;
}
/* Force displaying controls in tab-bar */
:root[customtitlebar]:not([inDOMFullscreen]) #TabsToolbar .titlebar-buttonbox-container {
display: flex !important;
padding-top: var(--gnome-toolbar-padding) !important;
visibility: visible !important;
}
/* Blend single tab into whole bar */
@media -moz-pref("gnomeTheme.hideSingleTab") {
#tabbrowser-tabs:not(:has(tab:not([hidden="true"]) ~ tab:not([hidden="true"]))) :is(
tab,
tab ~ toolbarbutton,
tab ~ #tabbrowser-arrowscrollbox-periphery
) {
visibility: visible;
}
#tabbrowser-tabs:not(:has(tab:not([hidden="true"]) ~ tab:not([hidden="true"]))) tab {
-moz-window-dragging: drag !important;
}
#tabbrowser-tabs:not(:has(tab:not([hidden="true"]) ~ tab:not([hidden="true"]))) .tab-background {
display: none !important
}
#tabbrowser-tabs:not(:has(tab:not([hidden="true"]) ~ tab:not([hidden="true"]))) .tab-close-button {
visibility: hidden !important;
opacity: 0 !important;
}
#tabbrowser-tabs:not(:has(tab:not([hidden="true"]) ~ tab:not([hidden="true"]))) .tab-content::before {
--gnome-tabbar-tab-close-overlay-bg: unset !important;
}
:root[dir="ltr"] #tabbrowser-tabs:not(:has(tab:not([hidden="true"]) ~ tab:not([hidden="true"]))) .tab-label-container[textoverflow="true"] {
margin-inline-end: -16px;
}
}
}

View file

@ -0,0 +1,189 @@
/* Toolbox, a container for all toolbars (toolbox#navigator-toolbox):
* - menu bar (toolbar#toolbar-menubar)
* - tab bar (toolbar#TabsToolbar)
* - header bar (toolbar#nav-bar)
* - bookmark bar (toolbar#PersonalToolbar)
* - add-ons can add their own toolbars (toolbar) */
@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
:root {
--tabpanel-background-color: --gnome-window-background !important;
}
/* Toolbox colors */
#navigator-toolbox {
background: var(--gnome-toolbar-background) !important;
border-bottom: 1px solid var(--gnome-toolbar-border-color) !important;
}
#PersonalToolbar, #toolbar-menubar, #TabsToolbar, findbar {
appearance: none !important;
border: 0 !important;
background: var(--gnome-toolbar-background) !important;
&:-moz-window-inactive {
opacity: 1 !important;
}
}
findbar {
border-top: 1px solid var(--gnome-toolbar-border-color) !important;
}
#nav-bar:-moz-window-inactive,
#PersonalToolbar:-moz-window-inactive,
#toolbar-menubar:-moz-window-inactive,
#TabsToolbar:-moz-window-inactive,
findbar:-moz-window-inactive,
.container.infobar:-moz-window-inactive {
transition: background var(--gnome-animation-time) ease-out;
}
#navigator-toolbox:-moz-window-inactive label,
#downloads-indicator-anchor:-moz-window-inactive,
findbar:-moz-window-inactive image:not(#hack),
findbar:-moz-window-inactive label,
findbar:-moz-window-inactive description,
#viewButton:-moz-window-inactive dropmarker,
.container.infobar:-moz-window-inactive {
opacity: 0.5 !important;
}
#toolbar-menubar:not([inactive=true]) {
margin-bottom: 0 !important;
}
/* Overrides: Remove border below the menu bar / above the header bar */
#TabsToolbar:not([collapsed="true"]) + #nav-bar {
border-top-width: 0 !important;
}
#navigator-toolbox::after {
border-bottom-width: 0 !important;
}
/* Reorder toolbars */
#navigator-toolbox #nav-bar {
order: 0;
}
#navigator-toolbox #PersonalToolbar {
order: 2;
}
#navigator-toolbox #TabsToolbar {
order: 3;
}
#notifications-toolbar {
order: 100;
}
.notificationbox-stack {
order: 1000;
}
/* Content notifications */
.notificationbox-stack notification-message {
background-color: color-mix(in srgb, var(--gnome-accent-bg) 30%, var(--gnome-window-background)) !important;
border: 0 !important;
border-top: 1px solid var(--gnome-toolbar-border-color) !important;
border-radius: 0 !important;
margin: 0 !important;
&[type="warning"] {
background-color: #ffe900 !important;
}
&[type="critical"] {
background-color: #d70022 !important;
}
&[style*="margin-top"] {
margin-top: -48px !important;
}
&::before {
display: none !important;
}
}
link[href="chrome://global/content/elements/moz-message-bar.css"] ~ .container {
background: none !important;
border-radius: 0 !important;
box-shadow: none !important;
gap: var(--gnome-toolbar-spacing) !important;
padding: var(--gnome-toolbar-padding) !important;
.close {
margin: 0 !important;
}
.icon {
color: var(--gnome-window-color);
height: 16px !important;
width: 16px !important;
margin: 8px 0 !important;
}
.text-container {
flex: auto;
padding-block: 0 !important;
}
.text-content {
font-weight: bold !important;
}
}
/* Bookmarks */
#PersonalToolbar {
padding: var(--gnome-toolbar-padding) !important;
padding-top: 0 !important;
--bookmarks-toolbar-overlapping-browser-height: auto;
}
#PlacesToolbar toolbarseparator {
border-top: 0 !important;
}
#PlacesToolbarItems > toolbarseparator::before {
border-image-source: none !important;
border-color: var(--gnome-tabbar-tab-separator-color) !important;
}
@media -moz-pref("gnomeTheme.bookmarksOnFullscreen") { /* OPTIONAL: Show bookmarks bar while in fullscreen */
:root[inFullscreen] #PersonalToolbar{
visibility: visible !important;
}
}
#import-button,
#PlacesToolbar .bookmark-item {
border-radius: 6px !important;
color: var(--gnome-window-color) !important;
padding: 3px 6px !important;
&:hover {
background-color: var(--gnome-selected-color) !important;
}
&:active, &[open] {
background-color: var(--gnome-selected-active-color) !important;
}
}
/* Text link */
.text-link, a {
color: var(--gnome-accent) !important;
}
/* Selection*/
*::-moz-selection {
background-color: var(--gnome-selection-bg) !important;
}
/* OPTIONAL: Hide WebRTC indicator */
@media -moz-pref("gnomeTheme.hideWebrtcIndicator") {
#webrtcIndicator {
display: none;
}
}
/* OPTIONAL: Move Bookmarks toolbar under tabs */
@media -moz-pref("gnomeTheme.bookmarksToolbarUnderTabs") {
#navigator-toolbox #PersonalToolbar {
order: 3;
}
#navigator-toolbox #TabsToolbar {
order: 2;
}
}

View file

@ -0,0 +1,263 @@
/* Header bar's URL bar */
@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
#urlbar {
--urlbar-height: 34.00px;
--urlbar-toolbar-height: 34.00px !important;
}
#urlbar-container {
--urlbar-container-height: 34px !important;
@media (max-width: 630px) {
width: auto !important;
}
}
/* Center the URL bar */
toolbarspring {
max-width: 10000px !important;
}
/* URL bar */
#urlbar {
box-shadow: none !important;
&[breakout] {
width: calc(var(--urlbar-width) - var(--gnome-toolbar-spacing)) !important;
}
.urlbar-background {
box-shadow: var(--gnome-entry-box-shadow) !important;
border: 0 !important;
border-radius: var(--gnome-entry-radius) !important;
background: transparent !important;
}
.urlbar-input-container {
padding: 0 !important;
}
}
.urlbar-input::placeholder, .searchbar-textbox::placeholder {
opacity: 0.85 !important;
}
#urlbar-searchmode-switcher {
background-color: transparent !important;
border-radius: var(--gnome-button-radius) !important;
&:hover {
background-color: var(--gnome-hover-color) !important;
}
&:active, &[open] {
background-color: var(--gnome-active-color) !important;
}
#urlbar[searchmode] & {
background-color: var(--gnome-selected-color) !important;
border-start-end-radius: 0 !important;
border-end-end-radius: 0 !important;
&:hover {
background-color: var(--gnome-selected-hover-color) !important;
}
&:active, &[open] {
background-color: var(--gnome-selected-active-color) !important;
}
}
}
#searchmode-switcher-icon {
margin-inline-start: 6px !important;
}
#searchmode-switcher-chicklet {
background-color: var(--gnome-button-background) !important;
border-start-end-radius: var(--gnome-button-radius) !important;
border-end-end-radius: var(--gnome-button-radius) !important;
}
#searchmode-switcher-title {
color: var(--gnome-window-color);
padding-inline: 4px !important;
}
#searchmode-switcher-close {
background-size: 16px !important;
border-radius: 24px !important;
width: 24px !important;
height: 24px !important;
}
/* URL bar results */
.urlbarView {
background: transparent !important;
color: var(--gnome-window-color) !important;
margin: 11px 0 0 -3px !important;
position: absolute !important;
box-shadow: var(--gnome-menu-shadow) !important;
border-radius: 12px !important;
width: 100% !important;
}
/* Search bar result */
#PopupSearchAutoComplete {
margin-top: 7px !important;
}
.urlbarView-body-outer {
--item-padding-start: 0 !important;
--item-padding-end: 0 !important;
background: var(--gnome-menu-background) !important;
overflow-x: auto;
padding: 2px 6px !important;
border-radius: 8px 8px 0 0 !important;
}
.urlbarView-body-inner {
border: 0 !important;
}
.urlbarView-row-inner, .urlbarView-no-wrap {
align-items: center !important;
}
.urlbarView-row-inner {
padding-block: 5px !important;
border-radius: 5px !important;
}
.urlbarView-row[selected] {
background: var(--gnome-selected-color) !important;
color: var(--gnome-window-color) !important;
}
.urlbarView-row[selected]:hover {
background: var(--gnome-selected-hover-color) !important;
}
.urlbarView-row:not([selected]):hover {
background: var(--gnome-hover-color) !important;
}
.urlbarView-row:not([selected]):active {
background: var(--gnome-active-color) !important;
}
.urlbarView-url {
color: var(--gnome-accent) !important;
}
.urlbarView-action {
background: transparent !important;
}
/* Fix items overflow */
.urlbarView[actionoverride] .urlbarView-row[has-url] > .urlbarView-row-inner > .urlbarView-no-wrap,
.urlbarView-row[has-url]:not([type$="tab"]) > .urlbarView-row-inner > .urlbarView-no-wrap, .urlbarView-row[has-url]:is([type="remotetab"],
[sponsored]):is(:hover, [selected]) > .urlbarView-row-inner > .urlbarView-no-wrap {
max-width: calc(96% - 2 * (var(--urlbarView-favicon-width) + (6px + 2px))) !important;
}
/* Search engines buttons */
.search-one-offs {
padding: 8px !important;
background: var(--gnome-menu-background) !important;
border-top: 1px solid var(--gnome-menu-separator-color) !important;
border-radius: 0 0 8px 8px !important;
}
.search-one-offs[is_searchbar="true"] {
margin-bottom: -8px !important;
}
/* URL bar and Search bar */
#urlbar[focused] .urlbar-textbox-container {
margin: -1px !important;
}
#searchbar > .searchbar-textbox[focused] .searchbar-search-button {
margin-left: -1px !important;
}
#searchbar > .searchbar-textbox[focused] .search-go-button {
margin-right: -1px !important;
}
/* URL bar and Search bar's icons */
.urlbar-icon:hover,
.urlbar-icon-wrapper:hover,
.urlbar-icon[open],
.urlbar-icon-wrapper[open],
.urlbar-icon:hover:active,
.urlbar-icon-wrapper:hover:active,
.searchbar-search-button:hover .searchbar-search-icon,
.searchbar-search-button[open] .searchbar-search-icon,
.searchbar-search-button:hover:active .searchbar-search-icon {
background-color: transparent !important;
fill-opacity: 1 !important;
}
#urlbar .urlbar-icon {
margin: 0 !important;
height: 100% !important;
}
#notification-popup-box {
height: 100% !important;
}
@media -moz-pref("browser.urlbar.richSuggestions.featureGate") {
#urlbar:not(.searchButton) > .urlbar-input-container > #identity-box[pageproxystate="invalid"] > .identity-box-button {
margin-inline-start: 2px;
}
}
/* Search mode indicator */
#urlbar-search-mode-indicator,
#urlbar-label-box,
#urlbar-zoom-button {
background: var(--gnome-button-background) !important;
border: 0 !important;
border-radius: 26px !important;
outline: 0 !important;
margin: 4px 0;
}
#urlbar-search-mode-indicator {
padding-right: 0 !important;
}
#urlbar-search-mode-indicator-title {
color: var(--gnome-window-color);
padding-inline: 4px !important;
}
#urlbar-search-mode-indicator-close {
background-size: 16px !important;
background-position: center;
border-radius: 26px !important;
padding: 5px !important;
}
#urlbar-search-mode-indicator-close:hover {
background-color: var(--gnome-button-hover-background) !important;
}
#urlbar-zoom-button {
opacity: 0.8;
}
#urlbar-zoom-button:hover {
opacity: 1;
}
/* Firefox identity box */
#identity-box[pageproxystate="valid"].notSecureText > .identity-box-button,
#identity-box[pageproxystate="valid"].chromeUI > .identity-box-button,
#identity-box[pageproxystate="valid"].extensionPage > .identity-box-button,
#urlbar-label-box {
background-color: transparent !important;
}
#identity-box[pageproxystate="valid"].notSecureText > .identity-box-button:hover:not([open]),
#identity-box[pageproxystate="valid"].chromeUI > .identity-box-button:hover:not([open]),
#identity-box[pageproxystate="valid"].extensionPage > .identity-box-button:hover:not([open]) {
background-color: hsla(0,0%,70%,.2) !important;
}
#identity-box[pageproxystate="valid"].notSecureText > .identity-box-button:hover:active,
#identity-box[pageproxystate="valid"].notSecureText > .identity-box-button[open=true],
#identity-box[pageproxystate="valid"].chromeUI > .identity-box-button:hover:active,
#identity-box[pageproxystate="valid"].chromeUI > .identity-box-button[open=true],
#identity-box[pageproxystate="valid"].extensionPage > .identity-box-button:hover:active,
#identity-box[pageproxystate="valid"].extensionPage > .identity-box-button[open=true] {
background-color: hsla(0,0%,70%,.3) !important;
}
@media -moz-pref("browser.urlbar.richSuggestions.featureGate") {
#identity-box[pageproxystate="invalid"] > .identity-box-button {
padding-inline: var(--urlbar-icon-padding) !important;
}
}

View file

@ -0,0 +1,75 @@
@namespace xul url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
@namespace html url("http://www.w3.org/1999/xhtml");
/** Video player **/
.progressBar::-moz-progress-bar {
background-color: #fff !important;
}
.scrubber:hover::-moz-range-thumb,
.volumeControl:hover::-moz-range-thumb {
background-color: #ccc !important;
}
.scrubber:active::-moz-range-thumb,
.volumeControl:active::-moz-range-thumb {
background-color: #bbb !important;
}
.controlBar {
border-radius: 5px;
margin: auto;
margin-bottom: 5px;
width: 98.5%;
max-width: 800px;
height: 30px !important;
background-color: rgba(20,20,20,0.8) !important;
}
.controlBar > .button:enabled:hover {
fill: #ccc !important;
}
.controlBar > .button:enabled:hover:active {
fill: #bbb !important;
}
.scrubberStack {
margin: 0 10px;
}
.playButton {
scale: 0.8;
}
/** Vertical Volume Bar **/
/* I'm to stupid to get this working. Wasn't able to set proper position relative to mute button */
/* .muteButton:hover ~ .volumeStack{
margin-bottom: 129px !important;
}
.volumeStack:hover {
margin-bottom: 129px !important;
}
.volumeStack {
transform: rotate(270deg);
max-height: 33px !important;
min-width: 100px !important;
position:absolute !important;
margin-bottom: -150px !important;
background-color: rgba(20,20,20,0.8) !important;
border-bottom-right-radius: 5px !important;
border-top-right-radius: 5px !important;
transition-property: margin-bottom;
transition-duration: 0.13s;
transition-timing-function: linear;
}
.volumeControl{
width: 92% !important;
margin-left: 5px !important;
} */

View file

@ -0,0 +1,2 @@
@namespace xul url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");

View file

@ -0,0 +1,17 @@
@namespace xul url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
/* Icons light/dark fix coloring hack filters */
:root {
--gnome-convert-icon-to-symbolic-hack-filter: invert(100%) sepia(100%) grayscale(100%) brightness(200%) brightness(85%) invert(100%);
}
@media (prefers-color-scheme: dark) {
:root {
--gnome-convert-icon-to-symbolic-hack-filter: invert(100%) sepia(100%) grayscale(100%) brightness(200%) brightness(85%);
}
}
/* Make all tab icons look kinda like symbolic icons */
tab .tab-icon-image {
filter: var(--gnome-convert-icon-to-symbolic-hack-filter);
}

View file

@ -0,0 +1,98 @@
@namespace xul url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
/* Icons light/dark fix coloring hack filters */
:root {
--gnome-icons-hack-filter: brightness(0) saturate(100%) invert(37%) sepia(8%) saturate(683%) hue-rotate(183deg) brightness(95%) contrast(84%);
--gnome-window-icons-hack-filter: brightness(0) saturate(100%) invert(37%) sepia(8%) saturate(683%) hue-rotate(183deg) brightness(95%) contrast(84%);
@media (prefers-color-scheme: dark) {
--gnome-icons-hack-filter: brightness(0) saturate(100%) invert(94%) sepia(11%) saturate(362%) hue-rotate(184deg) brightness(95%) contrast(87%);
--gnome-window-icons-hack-filter: brightness(0) saturate(100%) invert(94%) sepia(11%) saturate(362%) hue-rotate(184deg) brightness(95%) contrast(87%);
}
}
/* Use system theme icons instead of Adwaita icons included by theme */
:root {
--gnome-icon-application-x-addon-symbolic: url("moz-icon://stock/application-x-addon-symbolic?size=dialog") !important;
--gnome-icon-applications-engineering-symbolic: url("moz-icon://stock/applications-engineering-symbolic?size=dialog") !important;
--gnome-icon-edit-copy-symbolic: url("moz-icon://stock/edit-copy-symbolic?size=dialog") !important;
--gnome-icon-edit-cut-symbolic: url("moz-icon://stock/edit-cut-symbolic?size=dialog") !important;
--gnome-icon-edit-find-symbolic: url("moz-icon://stock/edit-find-symbolic?size=dialog") !important;
--gnome-icon-edit-paste-symbolic: url("moz-icon://stock/edit-paste-symbolic?size=dialog") !important;
--gnome-icon-folder-download-symbolic: url("moz-icon://stock/folder-download-symbolic?size=dialog") !important;
--gnome-icon-go-next-symbolic: url("moz-icon://stock/go-next-symbolic?size=dialog") !important;
--gnome-icon-go-previous-symbolic: url("moz-icon://stock/go-previous-symbolic?size=dialog") !important;
--gnome-icon-mail-unread-symbolic: url("moz-icon://stock/mail-unread-symbolic?size=dialog") !important;
--gnome-icon-open-menu-symbolic: url("moz-icon://stock/open-menu-symbolic?size=dialog") !important;
--gnome-icon-pan-down-symbolic: url("moz-icon://stock/pan-down-symbolic?size=dialog") !important;
--gnome-icon-pan-down-symbolic: url("moz-icon://stock/pan-down-symbolic?size=dialog") !important;
--gnome-icon-preferences-system-symbolic: url("moz-icon://stock/preferences-system-symbolic?size=dialog") !important;
--gnome-icon-preferences-system-time-symbolic: url("moz-icon://stock/preferences-system-time-symbolic?size=dialog") !important;
--gnome-icon-printer-symbolic: url("moz-icon://stock/printer-symbolic?size=dialog") !important;
--gnome-icon-process-stop-symbolic: url("moz-icon://stock/process-stop-symbolic?size=dialog") !important;
--gnome-icon-starred-symbolic: url("moz-icon://stock/starred-symbolic?size=dialog") !important;
--gnome-icon-tab-new-symbolic: url("moz-icon://stock/tab-new-symbolic?size=dialog") !important;
--gnome-icon-user-home-symbolic: url("moz-icon://stock/user-home-symbolic?size=dialog") !important;
--gnome-icon-view-fullscreen-symbolic: url("moz-icon://stock/view-fullscreen-symbolic?size=dialog") !important;
--gnome-icon-view-refresh-symbolic: url("moz-icon://stock/view-refresh-symbolic?size=dialog") !important;
--gnome-icon-view-restore-symbolic: url("moz-icon://stock/view-restore-symbolic?size=dialog") !important;
--gnome-icon-window-close-symbolic: url("moz-icon://stock/window-close-symbolic?size=dialog") !important;
--gnome-icon-window-maximize-symbolic: url("moz-icon://stock/window-maximize-symbolic?size=dialog") !important;
--gnome-icon-window-minimize-symbolic: url("moz-icon://stock/window-minimize-symbolic?size=dialog") !important;
--gnome-icon-window-new-symbolic: url("moz-icon://stock/window-new-symbolic?size=dialog") !important;
--gnome-icon-window-restore-symbolic: url("moz-icon://stock/window-restore-symbolic?size=dialog") !important;
--gnome-icon-zoom-in-symbolic: url("moz-icon://stock/zoom-in-symbolic?size=dialog") !important;
--gnome-icon-zoom-out-symbolic: url("moz-icon://stock/zoom-out-symbolic?size=dialog") !important;
}
/* Apply icon color filter */
:root[customtitlebar] .titlebar-buttonbox .titlebar-close .toolbarbutton-icon,
.close-icon,
#nav-bar #back-button .toolbarbutton-icon,
#nav-bar #forward-button .toolbarbutton-icon,
#PanelUI-menu-button .toolbarbutton-icon,
#new-tab-button .toolbarbutton-icon,
#tabs-newtab-button .toolbarbutton-icon,
#TabsToolbar #new-tab-button .toolbarbutton-icon,
#home-button .toolbarbutton-icon,
#preferences-button .toolbarbutton-icon,
#fullscreen-button .toolbarbutton-icon,
#zoom-out-button .toolbarbutton-icon,
#zoom-in-button .toolbarbutton-icon,
#developer-button .toolbarbutton-icon,
#email-link-button .toolbarbutton-icon,
#print-button .toolbarbutton-icon,
#add-ons-button .toolbarbutton-icon,
#find-button .toolbarbutton-icon,
#new-window-button .toolbarbutton-icon,
#bookmarks-menu-button .toolbarbutton-icon,
#history-panelmenu .toolbarbutton-icon,
#alltabs-button .toolbarbutton-icon,
#cut-button .toolbarbutton-icon,
#copy-button .toolbarbutton-icon,
#paste-button .toolbarbutton-icon,
#reload-button .toolbarbutton-icon,
#context-reload .toolbarbutton-icon,
#stop-button .toolbarbutton-icon,
#context-stop .toolbarbutton-icon,
#downloads-indicator-icon,
#downloads-indicator-icon .toolbarbutton-icon,
#nav-bar-overflow-button .toolbarbutton-icon,
#context-back .menu-iconic-icon,
#context-forward .menu-iconic-icon,
#appMenu-zoom-controls .toolbarbutton-icon,
#unified-extensions-button .toolbarbutton-icon,
#identity-icon {
filter: var(--gnome-window-icons-hack-filter) !important;
}
/* Fix icon size */
toolbar .toolbarbutton-1 > .toolbarbutton-icon,
#downloads-indicator-icon {
width: 16px !important;
height: 16px !important;
padding: 0 !important;
}
:root[customtitlebar] #titlebar .titlebar-button .toolbarbutton-icon,
:root[customtitlebar][inFullscreen] #window-controls toolbarbutton .toolbarbutton-icon {
width: 16px;
}

Some files were not shown because too many files have changed in this diff Show more