How to enable Unity-like slim scrollbars?

save this as HoverlayScrollbars.patch in you home directory:

diff -Naur /usr/share/themes/Ambiant-MATE/gtk-2.0/apps/panel.rc /usr/share/themes/Ambiant-MATE-HoverlayScrollbars/gtk-2.0/apps/panel.rc
--- /usr/share/themes/Ambiant-MATE/gtk-2.0/apps/panel.rc	2017-08-18 19:09:03.000000000 +0500
+++ /usr/share/themes/Ambiant-MATE-HoverlayScrollbars/gtk-2.0/apps/panel.rc	2018-04-30 18:16:32.714100325 +0500
@@ -26,4 +26,4 @@
 widget_class "*notif*"            style "panel"
 widget_class "*PanelApplet*"      style "panel_default"	# workaround for right click menu corrupted bg
 widget_class "*Tray*"             style "panel"		# workaround for StarDict, gnubiff... tray icon bg
-class "GtkScrollbar"              style "murrine-scrollbar"
+class "GtkScrollbar"              style "scrollbar"
diff -Naur /usr/share/themes/Ambiant-MATE/gtk-2.0/gtkrc /usr/share/themes/Ambiant-MATE-HoverlayScrollbars/gtk-2.0/gtkrc
--- /usr/share/themes/Ambiant-MATE/gtk-2.0/gtkrc	2017-08-22 17:29:10.000000000 +0500
+++ /usr/share/themes/Ambiant-MATE-HoverlayScrollbars/gtk-2.0/gtkrc	2018-04-30 17:24:27.616872008 +0500
@@ -30,12 +30,10 @@
 	GtkScale::slider-length = 14
 	GtkScale::trough-side-details = 1
 
-	GtkScrollbar	::has-backward-stepper		= 1
-	GtkScrollbar	::has-forward-stepper		= 1
-	GtkScrollbar	::min-slider-length		= 15
-	GtkScrollbar	::slider-width			= 14
-	GtkScrollbar	::trough-border			= 0
-	GtkScrollbar	::activate-slider		= 1
+	GtkScrollbar::activate-slider = 1
+	GtkScrollbar::trough-border = 0
+	GtkScrollbar::slider-width = 13
+	GtkScrollbar::min-slider-length = 31
 
 	GtkScrolledWindow ::scrollbar-spacing		= 0
 	GtkScrolledWindow ::scrollbars-within-bevel	= 0
@@ -120,7 +118,7 @@
 		focusstyle = 3
 		handlestyle = 1
 		sliderstyle = 3
-		scrollbarstyle = 0
+		scrollbarstyle = 2
 		stepperstyle = 3
 		toolbarstyle = 2     # 0 = flat, 1 = glassy, 2 = gradient
 		#rgba = TRUE
@@ -212,20 +210,42 @@
 	}
 }
 
-style "murrine-scrollbar" {
-	bg[NORMAL]	= shade (0.99, @selected_bg_color)
-	bg[SELECTED]	= shade (1.03, @selected_bg_color)
-	bg[ACTIVE]	= shade (1.03, @selected_bg_color)
-	bg[PRELIGHT]	= shade (1.03, @selected_bg_color)
+style "scrollbar" = "button" {
+	xthickness = 2
+	ythickness = 2
 
-	engine "murrine" {
-		roundness	= 0
-		gradient_shades = {1.0, 1.0, 1.0, 1.0}
-		border_shades	= {1.05, 1.05}
-		contrast	= 0.4
+	bg[NORMAL] = @bg_color
+	bg[PRELIGHT] = shade (1.04, @bg_color)
+
+	bg[ACTIVE] = shade (0.96, @bg_color)
+
+	engine "murrine"
+	{
+		border_shades = {0.95, 0.90}
+		roundness = 20
+		contrast = 1.0
+		trough_shades = {0.92, 0.98}
+		lightborder_shade = 1.3
+		glowstyle = 5
+		glow_shade = 1.02
+		gradient_shades = {1.2, 1.0, 1.0, 0.86}
+		trough_border_shades = {0.9, 0.98}
 	}
 }
 
+style "hscrollbar" {
+}
+
+style "vscrollbar" {
+}
+
+style "overlay_scrollbar"
+{
+	bg[SELECTED] = shade (1.0, @selected_bg_color)
+	bg[INSENSITIVE] = shade (0.85, @bg_color)
+	bg[ACTIVE] = shade (0.6, @bg_color)
+}
+
 style "scale" = "button" {
 	bg[NORMAL] = @bg_color
 	bg[PRELIGHT] = shade (1.06, @bg_color)
@@ -688,9 +708,9 @@
 class "GtkScale" style "scale"
 class "GtkVScale" style "vscale"
 class "GtkHScale" style "hscale"
-class "GtkScrollbar"	style "murrine-scrollbar"
-class "GtkVScrollbar"	style "murrine-scrollbar"
-class "GtkHScrollbar"	style "murrine-scrollbar"
+class "GtkScrollbar" style "scrollbar"
+class "GtkHScrollbar" style "hscrollbar"
+class "GtkVScrollbar" style "vscrollbar"
 class "GtkCalendar" style "calendar"
 class "GtkInfoBar" style "infobar"
 class "GtkIconView" style "iconview"
@@ -750,6 +770,10 @@
 widget_class "*.<GtkList>.<GtkButton>.*<GtkLabel>" style "treeview_header"
 widget_class "*.<GtkCList>.<GtkButton>.*<GtkLabel>" style "treeview_header"
 
+# Overlay scrollbar
+widget_class "*<OsScrollbar>" style "overlay_scrollbar"
+widget_class "*<OsThumb>" style "overlay_scrollbar"
+
 # The window of the tooltip is called "gtk-tooltip"
 ##################################################################
 # FIXME:
diff -Naur /usr/share/themes/Ambiant-MATE/gtk-3.0/apps/gnome-terminal.css /usr/share/themes/Ambiant-MATE-HoverlayScrollbars/gtk-3.0/apps/gnome-terminal.css
--- /usr/share/themes/Ambiant-MATE/gtk-3.0/apps/gnome-terminal.css	2017-08-18 19:09:03.000000000 +0500
+++ /usr/share/themes/Ambiant-MATE-HoverlayScrollbars/gtk-3.0/apps/gnome-terminal.css	2018-04-30 01:32:30.540488120 +0500
@@ -5,3 +5,9 @@
     background-color: @dark_bg_color;
     color: @dark_fg_color;
 }
+
+terminal-screen-container scrollbar:hover,
+terminal-screen-container scrollbar:active {
+    background-color: alpha(@scrollbar_track_color, 0.4);
+    border-radius: 1px;
+}
diff -Naur /usr/share/themes/Ambiant-MATE/gtk-3.0/apps/mate-applications.css /usr/share/themes/Ambiant-MATE-HoverlayScrollbars/gtk-3.0/apps/mate-applications.css
--- /usr/share/themes/Ambiant-MATE/gtk-3.0/apps/mate-applications.css	2018-04-04 13:04:11.000000000 +0500
+++ /usr/share/themes/Ambiant-MATE-HoverlayScrollbars/gtk-3.0/apps/mate-applications.css	2018-04-29 23:43:13.245342962 +0500
@@ -484,6 +484,7 @@
     border-width: 0px 0px 0px 0px;
 }
 
+/*
 #mate-menu.background scrollbar {
     background-image: none;
     border-style: solid;
@@ -514,6 +515,7 @@
     background-color: transparent;
     color: shade (@insensitive_fg_color, 0.6);
 }
+*/
 
 #mate-menu.background entry {
     background-color: transparent;
@@ -701,6 +703,7 @@
     background: none;
 }
 
+/*
 .background.brisk-menu scrollbar {
     background-image: none;
     border-style: solid;
@@ -740,6 +743,7 @@
 .background.brisk-menu scrollbar.vertical .button.down:hover {
     box-shadow: inset 0 1px shade(@dark_fg_color, 0.35);
 }
+*/
 
 .background.brisk-menu entry {
     background-color: transparent;
diff -Naur /usr/share/themes/Ambiant-MATE/gtk-3.0/gtk-main.css /usr/share/themes/Ambiant-MATE-HoverlayScrollbars/gtk-3.0/gtk-main.css
--- /usr/share/themes/Ambiant-MATE/gtk-3.0/gtk-main.css	2018-03-19 14:26:40.000000000 +0500
+++ /usr/share/themes/Ambiant-MATE-HoverlayScrollbars/gtk-3.0/gtk-main.css	2018-04-30 19:01:43.082749066 +0500
@@ -157,12 +157,6 @@
 
 @define-color scrollbar_track_color mix(@base_color, black, 0.1); /* #e6e6e6 */
 
-@define-color scrollbar_trough shade(@theme_bg_color, 0.98);
-@define-color scrollbar_slider @theme_bg_color;
-
-@define-color scrollbar_slider_bg_color shade(@theme_selected_bg_color, 0.99);
-@define-color scrollbar_slider_hover_bg_color shade(@theme_selected_bg_color, 1.03);
-
 @define-color progressbar_fill_a shade(@theme_selected_bg_color, 1.07);
 @define-color progressbar_fill_b shade(mix(@theme_selected_bg_color, green, 0.10), 0.91);
 @define-color button_border_active shade(@theme_selected_bg_color, 0.95);
diff -Naur /usr/share/themes/Ambiant-MATE/gtk-3.0/gtk-widgets-assets.css /usr/share/themes/Ambiant-MATE-HoverlayScrollbars/gtk-3.0/gtk-widgets-assets.css
--- /usr/share/themes/Ambiant-MATE/gtk-3.0/gtk-widgets-assets.css	2017-08-18 19:09:03.000000000 +0500
+++ /usr/share/themes/Ambiant-MATE-HoverlayScrollbars/gtk-3.0/gtk-widgets-assets.css	2018-04-30 18:48:32.097615497 +0500
@@ -699,27 +699,3 @@
     background-image: url("assets/slider-right-backdrop-disabled.png");
 }*/
 
-/*************
- * scrollbar *
- *************/
-
-scrollbar.vertical button.up,
-scrollbar.vertical .button.up {
-    -gtk-icon-source: -gtk-icontheme("pan-up-symbolic");
-}
-
-scrollbar.vertical button.down,
-scrollbar.vertical .button.down {
-    -gtk-icon-source: -gtk-icontheme("pan-down-symbolic");
-}
-
-scrollbar.horizontal button.up,
-scrollbar.horizontal .button.up {
-    -gtk-icon-source: -gtk-icontheme("pan-start-symbolic");
-}
-
-scrollbar.horizontal button.down,
-scrollbar.horizontal .button.down {
-    -gtk-icon-source: -gtk-icontheme("pan-end-symbolic");
-}
-
diff -Naur /usr/share/themes/Ambiant-MATE/gtk-3.0/gtk-widgets.css /usr/share/themes/Ambiant-MATE-HoverlayScrollbars/gtk-3.0/gtk-widgets.css
--- /usr/share/themes/Ambiant-MATE/gtk-3.0/gtk-widgets.css	2018-04-04 02:30:05.000000000 +0500
+++ /usr/share/themes/Ambiant-MATE-HoverlayScrollbars/gtk-3.0/gtk-widgets.css	2018-04-30 19:03:23.010866182 +0500
@@ -909,10 +909,33 @@
   background: none;
 }
 
-.frame.flat,
+notebook.frame {
+    border: none;
+}
+
+/* XXX: this is a copy of the above; adding notebook.frame stack there didn't
+ * work */
+frame border, notebook.frame > stack {
+    border-radius: 3px;
+    border-width: 1px;
+    border-style: solid;
+    border-color: shade (@bg_color, 0.82);
+    border-image: none;
+    background: none;
+}
+
 frame > border.flat,
-overlay > frame > border {
-  border: none;
+.frame.flat {
+    border: none;
+}
+
+scrolledwindow > viewport.frame,
+frame > box > stack > scrolledwindow {
+    border-style: none;
+}
+
+frame > box.vertical > scrolledwindow.frame {
+    border-width: 1px 0px 1px 0px;
 }
 
 /***********************
@@ -2397,187 +2420,139 @@
  * scrollbar *
  *************/
 
+.scrollbar,
 scrollbar {
-    background-image: none;
-    border-style: solid;
-    border-color: @borders;
-    -GtkScrollbar-has-backward-stepper: true;
-    -GtkScrollbar-has-forward-stepper: true;
+    -GtkScrollbar-has-backward-stepper: 0;
+    -GtkScrollbar-has-forward-stepper: 0;
 }
 
-scrollbar.vertical {
-    border-width: 0px 0px 0px 1px;
-    min-width: 13px;
+scrollbar slider {
+    background-color: @scrollbar_track_color;
 }
 
-scrollbar.horizontal {
-    border-width: 1px 0px 0px 0px;
-    min-height: 13px;
+.scrollbar.vertical slider,
+scrollbar.vertical slider {
+    min-height: 25px;
+    min-width: 5px;
 }
 
-/* broken firefox ignore background of trough */
-scrollbar.vertical {
-    background-image: linear-gradient(to right,
-                                      @scrollbar_trough,
-                                      shade (@scrollbar_trough, 1.08));
+.scrollbar.horizontal.slider,
+scrollbar.horizontal slider {
+    min-width: 25px;
+    min-height: 5px;
 }
 
-scrollbar.horizontal {
-    background-image: linear-gradient(to bottom,
-                                      @scrollbar_trough,
-                                      shade (@scrollbar_trough, 1.08));
-}
-
-scrollbar trough {
-    border-style: none;
-    border-radius: 0;
-    border-image: none;
+.scrollbar.vertical.slider:hover,
+scrollbar.vertical:hover slider {
+    min-width: 10px;
 }
 
-scrollbar trough.vertical {
-    min-width: 13px;
-    background-image: linear-gradient(to right,
-                                      @scrollbar_trough,
-                                      shade (@scrollbar_trough, 1.08));
+.scrollbar.horizontal.slider:hover,
+scrollbar.horizontal:hover slider {
+    min-height: 10px;
 }
 
-scrollbar trough.horizontal {
-    min-height: 13px;
-    background-image: linear-gradient(to bottom,
-                                      @scrollbar_trough,
-                                      shade (@scrollbar_trough, 1.08));
+.scrollbar.contents,
+scrollbar contents {
+    background-color: transparent;
+    background-image: none;
+    background-size: 0;
+    border: none;
+    border-radius: 0;
 }
 
-/* Buttons */
-scrollbar.vertical button,
-scrollbar.vertical .button {
-    min-width:13px;
-    min-height: 16px;
-    padding: 1px 0px;
+.scrollbar.trough,
+scrollbar trough {
+    background-image: none;
+    border: none;
 }
 
-scrollbar.horizontal button,
-scrollbar.horizontal .button {
-    min-width:16px;
-    min-height: 13px;
-    padding: 0px 1px;
-}
-
-scrollbar button,
-scrollbar button:hover,
-scrollbar button:hover:active,
-scrollbar button:disabled,
-scrollbar .button,
-scrollbar .button:hover,
-scrollbar .button:hover:active,
-scrollbar .button:disabled {
-    border-style: none;
-    border-image: none;
-    border-radius: 0;
-    background-image: none;
-    background-color: transparent;
+.scrollbar:hover:backdrop,
+.scrollbar.dragging:backdrop,
+scrollbar:hover:backdrop,
+scrollbar.dragging:backdrop {
+    background-color: @backdrop_selected_bg_color;
 }
 
-scrollbar button:hover:active,
-scrollbar .button:hover:active {
-    background-color: alpha(shade(@scrollbar_trough, 0.8), 0.5);
+/* Adding margins, so actual visible size is: width - margin this allows to
+ * keep the slider smaller, but keeping few threshold pixels
+ */
+.scrollbar.vertical:hover:dir(ltr),
+.scrollbar.vertical:active:dir(ltr),
+scrollbar.vertical:hover:dir(ltr),
+scrollbar.vertical:active:dir(ltr) {
+    margin-left: 2px;
 }
 
-scrollbar.vertical button.up,
-scrollbar.vertical .button.up,
-scrollbar.vertical button.up:hover,
-scrollbar.vertical .button.up:hover {
-    box-shadow: inset 0 -1px shade(mix(@scrollbar_slider, @scrollbar_trough, 0.6), 0.87);
+.scrollbar.vertical:hover:dir(rtl),
+.scrollbar.vertical:active:dir(rtl),
+scrollbar.vertical:hover:dir(rtl),
+scrollbar.vertical:active:dir(rtl) {
+    margin-right: 2px;
 }
 
-scrollbar.vertical button.down,
-scrollbar.vertical .button.down,
-scrollbar.vertical button.down:hover,
-scrollbar.vertical .button.down:hover {
-    box-shadow: inset 0 1px shade(mix(@scrollbar_slider, @scrollbar_trough, 0.6), 0.93);
+.scrollbar.horizontal:hover,
+.scrollbar.horizontal:active,
+scrollbar.horizontal:hover,
+scrollbar.horizontal:active {
+    margin-top: 2px;
 }
 
-scrollbar.horizontal button.up,
-scrollbar.horizontal .button.down,
-scrollbar.horizontal button.up:hover,
-scrollbar.horizontal .button.down:hover {
-    box-shadow: inset -1px 0 shade(mix(@scrollbar_slider, @scrollbar_trough, 0.6), 0.87);
+.scrollbar.slider,
+scrollbar slider {
+    background-color: alpha(@selected_bg_color, 0.8);
+    border-radius: 1px;
 }
 
-scrollbar.horizontal button.down,
-scrollbar.horizontal .button.down,
-scrollbar.horizontal button.down:hover,
-scrollbar.horizontal .button.down:hover {
-    box-shadow: inset 1px 0 shade(mix(@scrollbar_slider, @scrollbar_trough, 0.6), 0.93);
+.scrollbar.slider:hover,
+.scrollbar.slider:active,
+scrollbar slider:hover,
+scrollbar slider:active {
+    border-radius: 2px;
+    margin: 0;
 }
 
-scrollbar button,
-scrollbar .button,
-scrollbar button:hover,
-scrollbar .button:hover {
-    color: @theme_fg_color;
+/* Adding margins, so actual visible size is: -GtkRange-slider-width - margin
+ * this allows to define some kind of proximity effect also on mouse-enter
+ */
+.scrollbar.vertical:dir(ltr):not(:hover):not(.dragging),
+scrollbar.vertical:dir(ltr):not(:hover):not(.dragging) {
+    margin-left: 7px;
 }
 
-scrollbar button:disabled,
-scrollbar .button:disabled {
-    color: @insensitive_fg_color;
+.scrollbar.vertical:dir(rtl):not(:hover):not(.dragging),
+scrollbar.vertical:dir(rtl):not(:hover):not(.dragging) {
+    margin-right: 7px;
 }
 
-scrollbar button:hover:active,
-scrollbar .button:hover:active {
-    color: @theme_fg_color;
+.scrollbar.horizontal:not(:hover):not(.dragging),
+scrollbar.horizontal:not(:hover):not(.dragging) {
+    margin-top: 7px;
 }
 
-scrollbar.vertical slider,
-scrollbar.vertical .slider {
-    min-width: 13px;
-    min-height: 42px;
-    margin: 0px -1px 0px -1px;
-}
-
-scrollbar.horizontal slider,
-scrollbar.horizontal .slider {
-    min-width: 42px;
-    min-height: 14px;
-    margin: -1px 0px -1px 0px;
-}
-
-scrollbar slider,
-scrollbar .slider {
-    background-color: @scrollbar_slider_bg_color;
-    background-image: none;
-    border-radius: 0;
-    border-style: solid;
-    border-image: none;
-    border-color: shade(@scrollbar_slider_bg_color, 0.95);
-    border-width: 1px;
+.scrollbar.slider:hover,
+scrollbar slider:hover {
+    background-color: alpha(@selected_bg_color, 0.85);
 }
 
-scrollbar slider:hover,
-scrollbar .slider:hover {
-    background-color: @scrollbar_slider_hover_bg_color;
+.scrollbar.slider:active,
+scrollbar slider:active {
+    background-color: @selected_bg_color;
 }
 
-scrollbar slider:disabled,
-scrollbar .slider:disabled {
-    background-color: shade(@scrollbar_slider_bg_color, 0.85);
-    border-color: shade(@scrollbar_slider_bg_color, 0.75);
+.scrollbar.slider:backdrop,
+scrollbar slider:backdrop {
+    background-color: alpha(@backdrop_filling_bg, 0.8);
 }
 
-scrollbar.vertical.fine-tune slider:hover:active,
-scrollbar.vertical.fine-tune .slider:hover:active {
-    background-image: linear-gradient(to bottom,
-                                      shade(@scrollbar_slider_hover_bg_color, 1.00),
-                                      shade(@scrollbar_slider_bg_color, 0.94));
-    border-color: shade(@scrollbar_slider_bg_color, 0.95);
+.scrollbar.slider:hover:backdrop,
+scrollbar slider:hover:backdrop {
+    background-color: alpha(@backdrop_filling_bg, 0.85);
 }
 
-scrollbar.horizontal.fine-tune slider:hover:active,
-scrollbar.horizontal.fine-tune .slider:hover:active {
-    background-image: linear-gradient(to right,
-                                      shade(@scrollbar_slider_hover_bg_color, 1.00),
-                                      shade(@scrollbar_slider_bg_color, 0.94));
-    border-color: shade(@scrollbar_slider_bg_color, 0.95);
+.scrollbar.slider:active:backdrop,
+scrollbar slider:active:backdrop {
+    background-color: @backdrop_filling_bg;
 }
 
 /*******************
@@ -2585,10 +2560,11 @@
  *******************/
 .ubuntu-online-accounts.frame,
 scrolledwindow.frame {
-    border-top-color: shade (@bg_color, 0.84);
+    border-top-color: @borders;
     border-right-color: shade (@bg_color, 0.76);
     border-bottom-color: shade (@bg_color, 0.86);
     border-left-color: shade (@bg_color, 0.76);
+    border-width: 1px;
     border-radius: 0;
     border-style: solid;
 }
@@ -4020,6 +3996,7 @@
     background-color: @osd_view_bg;
 }
 
+/*
 .osd scrollbar trough.trough {
     background-color: @osd_scrollbar_trough;
 }
@@ -4035,6 +4012,7 @@
 .osd scrollbar trough.slider:active {
     background-color: @osd_scrollbar_slider_active;
 }
+*/
 
 .osd iconview.cell:selected,
 .osd iconview.cell:selected:focus {
diff -Naur /usr/share/themes/Ambiant-MATE/index.theme /usr/share/themes/Ambiant-MATE-HoverlayScrollbars/index.theme
--- /usr/share/themes/Ambiant-MATE/index.theme	2018-04-24 20:03:18.000000000 +0500
+++ /usr/share/themes/Ambiant-MATE-HoverlayScrollbars/index.theme	2018-04-29 23:48:27.129526169 +0500
@@ -1,13 +1,14 @@
 [Desktop Entry]
 Type=X-GNOME-Metatheme
-Name=Ambiant-MATE
-Comment=Ambiant MATE theme
+Name=Ambiant-MATE-HoverlayScrollbars
+Comment=Ambiant MATE with Hoverlay Scrollbars theme
 Encoding=UTF-8
 
 [X-GNOME-Metatheme]
-GtkTheme=Ambiant-MATE
-MetacityTheme=Ambiant-MATE
+GtkTheme=Ambiant-MATE-HoverlayScrollbars
+MetacityTheme=Ambiant-MATE-HoverlayScrollbars
 IconTheme=Ambiant-MATE
 CursorTheme=mate
 CursorSize=24
 ButtonLayout=menu:minimize,maximize,close
+X-Ubuntu-UseOverlayScrollbars=true

then run in the terminal:

sudo cp -r /usr/share/themes/Ambiant-MATE /usr/share/themes/Ambiant-MATE-HoverlayScrollbars
cd /usr/share/themes/Ambiant-MATE-HoverlayScrollbars/
sudo patch -p5 < ~/HoverlayScrollbars.patch

make sure you have overlay-scrollbar and overlay-scrollbar-gtk2 installed.

after that run mate-appearance-properties and select Ambiant-MATE-HoverlayScrollbars theme.

2 Likes