Skip to content

Instantly share code, notes, and snippets.

@thecjharries
Last active June 20, 2020 08:45
Show Gist options
  • Save thecjharries/0e6ec9ba6209a0dfb5ccc66e1fc1b358 to your computer and use it in GitHub Desktop.
Save thecjharries/0e6ec9ba6209a0dfb5ccc66e1fc1b358 to your computer and use it in GitHub Desktop.
Fedora 28: i3-gaps + polybar + compton
Copyright 2018 CJ Harries
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

tl;dr: This leads with several basic writeups. The code's further down the page. I wax verbose.

My primary SSD died Friday afternoon. I work from home, so I've spent the past two days scrambling to get a real environment put back together. I've got Ansible roles to rebuild a majority of my tools, but I built those months ago and never updated. As a security-conscious individual, I try not to push my secrets to public platforms. Coincidentally enough, that's also why I've been scrambling. Turns out having a single copy of code on one drive in one machine isn't the best idea in the world.

I did this as a way to relax, so my citations aren't great. You should be able to find sources quickly in Google. I plan on writing this up eventually, but that may never happen so feel free to pester me. I spent a ton of time researching dependency issues, systemd, and polybar configuration. As soon as I was reminded that compositors exist, I knew what I had to do. I tried to get Compiz to work on horrible broke college hardware about a decade ago and put them completely out of my mind, thinking I'd never have the hardware for them.

Primary dependencies

There's a ton more, but these are the important bits.

Note

There are a ton of files here. This makes more sense as repo. Eventually.

systemd vs exec calls vs autostart

I realize this is going to tick a few people off (aside from just mentioning systemd). I fought a ridiculous number of issues to arrive to this conclusion, which probably means I was doing something wrong and there's a better way:

autostart

I used dex to load my user autostart files. It was pretty awesome. I directly copied desktop files from application directories, tweaked what I needed to, and wrote very little code. I also very quickly discovered that applications get tossed out and run much sooner than they should. With a proper session manager, that can be controlled by OnlyShowIn/NotShowIn to an extent, but I'm not sure there's a fantastic solution to that. If there is, I'd love to know about it.

exec calls

By moving application initialization back to i3/config with exec, I was able to control when things started. The first time I booted, it was great. And then several apps stayed open between sessions. This is actually a problem I fought before. I'm not sure what the original documentation was but here's a thread from six months ago that sums it up: pkill && launch.

systemd

I don't have a lot of experience with systemd so this was more a wild goose chase that maybe caught a goose than it was a good idea. I wanted to launch feh on boot and discovered someone did it for me. That broke almost immediately for a combination of the reasons above. After a decent number of queries, I stumbled on this answer that formed the basis for my code.

systemd adds a few benefits that the others don't.

  • It can bind to to the actual GUI session, i.e. it won't launch unless i3 is good and ready
  • It can quickly handle pkill && launch situations with ExecStartPre and ExecStart
  • It can kill apps when the GUI session goes away, which limits the need for a pkill && launch solution
  • It can handle failed launches out of the box without requiring your time to write a script to babysit Linux booting
  • It can launch apps as a group that wait for their dependencies to boot instead of just failing
  • It runs through the --user flag and a .config directory so it's super easy to get up and fo

There's probably some other stuff but that's all we need for setup here: organize bootstraping into discrete processes than can be tightly controlled.

Controlling app launch

Personally I think I have too many sections here. I was fighting a different bug at the time that seemed like it was related to how many targets I had. After I figured out it wasn't, I never came back to address my concerns

Each of these is triggered by an exec call at the end of my i3/config. The example I linked uses --no-block; I don't because I want each section to finish. YMMV.

exec --no-startup-id systemctl --user start i3-session-pre.target
  • i3-session-pre.target: This houses things that should boot before GUIs look for things that aren't there. I spent a lot of time coding sideways until I had this brilliant idea and ran xrandr before polybar
  • i3-session-polybar.target: This boots all my polybars, which is important because unless the tray is out and available by the time certain GUIs launch, they won't register in the tray and I'll have to kill them or log out and in again.
  • i3-session.target: This runs all the GUIs I want at boot that do not need the tray. Sublime, Terminator, that kind of stuff.
  • i3-session-tray.target: This finally boots anything that needs the tray. overGrive, Wavebox, pasystray, and Lightscreen are what it runs now.

What did all that accomplish?

  1. By moving to systemd, I didn't have to reinvent the wheel to restart things or manage stale processes
  2. By slightly delaying boot times to wait for things to finish, I was able to
  • actually load Spotify; snap and lpf had similar issues that led it to crash most of the time
  • actually fill the tray; my previous scripted pkill && launch attempts were never enough to have Lightscreen in the tray until I messed with it

If you're following that, yes, that means I spent way too long trying to figure out a way to make the OS do two things I can type in ~1m the one time I reboot every few months. Totally worth it.

xrdb

I tried very hard to get xrdb to work. I wanted to share data between i3 and polybar so that updates can happen on one file instead of two. I spent a long time trying different quotings, variable names, wildcard setups, .Xresource locations, and xrdb load/merge starting points. I was never able to get any data out of xrdb in i3. I think at one point I did get some data from xrdb in polybar, but it was inconsistent enough that I just manually hardcoded all the failsafes as the data I wanted to load.

xinit

I started here. I just built a basic .xinitrc. It didn't load by itself and sourcing it elsewhere did nothing useful. gdm seems to be the launcher for i3 on Fedora 28 (well, coming from a Gnome liveusb, that is). I don't fully understand the xinit process, so I'd like to be more familiar with it before booting from it. This is coming from the man who kept everything important on a single local SSD. YMMV.

Libraries

To use set_from_resource, you need xcb-util-xrm. For several issues with several different things, libraries were a big deal.I currently have the most current releases but I've had several major versions back over the last day trying to resolve dependency issues. (protip: git clone --recursive <polybar> is a good way to sidestep that)

libX11-xcb.x86_64                                    1.6.5-7.fc28                      @anaconda
libxcb.x86_64                                        1.13-1.fc28                       @fedora
libxcb-devel.x86_64                                  1.13-1.fc28                       @fedora
libxcb-doc.noarch                                    1.13-1.fc28                       @fedora
xcb-proto.noarch                                     1.13-1.fc28                       @fedora
xcb-util.x86_64                                      0.4.0-9.fc28                      @anaconda
xcb-util-cursor.x86_64                               0.1.3-5.fc28                      @fedora
xcb-util-cursor-devel.x86_64                         0.1.3-5.fc28                      @fedora
xcb-util-devel.x86_64                                0.4.0-9.fc28                      @fedora
xcb-util-image.x86_64                                0.4.0-9.fc28                      @anaconda
xcb-util-image-devel.x86_64                          0.4.0-9.fc28                      @fedora
xcb-util-keysyms.x86_64                              0.4.0-7.fc28                      @anaconda
xcb-util-keysyms-devel.x86_64                        0.4.0-7.fc28                      @fedora
xcb-util-renderutil.x86_64                           0.3.9-10.fc28                     @anaconda
xcb-util-renderutil-devel.x86_64                     0.3.9-10.fc28                     @fedora
xcb-util-wm.x86_64                                   0.4.1-12.fc28                     @anaconda
xcb-util-wm-devel.x86_64                             0.4.1-12.fc28                     @fedora
xcb-util-xrm.x86_64                                  1.2-5.fc28                        @fedora
xcb-util-xrm-devel.x86_64                            1.2-5.fc28                        @fedora

Load location

This bothered me the most. I wasn't able to form a clear picture of what's actually needed. This thread, with commentary from the dev of xcb-util-xrm, says the X data needs to be loaded before i3. The official docs aren't as explicit, and I've read plenty of threads where people swear that exec xrdb ~/.Xresources works (including one with the maintainer). It didn't work for me. Neither did attempting to run xrdb in my .zshprofile, its parent .bash_profile, or the super .profile. I put it in my .zshrc not expecting it to work so I wasn't disappointed when it didn't. I'm not up to speed on exactly when i3 is launched in gdm, so it might actually be impossible with my OS to load xrdb before i3. That sounds very implausible so it's probably not right. But there is an open issue in xcb-util-xrm and the number of threads with similar issues makes it seem like maybe I didn't royally screw something up.

I did verify that the data was available in xrdb via xrdb -query -all. The final code doesn't include this, but I did also attempted several different resource names. I think this is a good summary:

  • \*?wm.workspace.label1
  • \*?wm\*workspace\*label1
  • \*?wm_workspace_label1
  • \*?wmWorkspaceLabel1

If I wasn't connecting properly my syntax is a red herring. I have no idea. I ended up hardcoding everything.

The photo comes from NASA.

The palette was built via wp using the background image and sort of applied at random in ways that made sense to me as I was building the bar.

The bar uses Hasklug for plain text and Meslo LG S DZ for symbols, both of which came from Nerd Fonts.

gnome-character-map is a great tool for stuff like this.

I'm using compton to drop the opacity between five and ten percent on some things. If I lower it anymore I'll have to go install Compiz and spend the rest of my weekend spinning a desktop cube like my college self always wanted to.

I use zsh + prezto with a tweaked Paradox theme in Terminator.

I love Monokai Pro for Sublime; it wasn't until I started messing with transparency that I realized it kinda sorta already goes with the theme if you don't know very much about color like me.

opacity-rule = [ "90:class_g *?= 'sublime_text'", "90:class_g *?= 'keepass2'", "95:class_g *= 'jetbrains'", "95:class_g *?= 'google-chrome'"];
[Unit]
Description=Load Compton
PartOf=graphical-session-pre.target
[Service]
Type=simple
ExecStart=/usr/bin/compton
[Install]
WantedBy=i3-session-pre.target
# i3 config file (v4)
#
# Please see https://i3wm.org/docs/userguide.html for a complete reference!
set $primary_display "DVI-D-0"
set $secondary_display "HDMI-0"
set $mod Mod4
# Font for window titles. Will also be used by the bar unless a different font
# is used in the bar {} block below.
font pango:Droid Sans Mono for Powerline Regular 12
# Use Mouse+$mod to drag floating windows to their wanted position
floating_modifier $mod
# https://faq.i3wm.org/question/550/manipulating-windows-with-the-mouse.1.html
# The middle button over a titlebar kills the window
bindsym --release button2 kill
# The middle button and a modifer over any part of the window kills the window
bindsym --whole-window $mod+button2 kill
focus_follows_mouse no
# The right button toggles floating
bindsym button3 floating toggle
bindsym $mod+button3 floating toggle
# The side buttons move the window around
bindsym button9 move left
bindsym button8 move right
# start a terminal
bindsym $mod+Return exec terminator
# kill focused window
bindsym $mod+Shift+q kill
# start dmenu (a program launcher)
bindsym $mod+d exec dmenu_run
# There also is the (new) i3-dmenu-desktop which only displays applications
# shipping a .desktop file. It is a wrapper around dmenu, so you need that
# installed.
# bindsym $mod+d exec --no-startup-id i3-dmenu-desktop
# change focus
bindsym $mod+j focus left
bindsym $mod+k focus down
bindsym $mod+l focus up
bindsym $mod+semicolon focus right
# alternatively, you can use the cursor keys:
bindsym $mod+Left focus left
bindsym $mod+Down focus down
bindsym $mod+Up focus up
bindsym $mod+Right focus right
# move focused window
bindsym $mod+Shift+j move left
bindsym $mod+Shift+k move down
bindsym $mod+Shift+l move up
bindsym $mod+Shift+semicolon move right
# alternatively, you can use the cursor keys:
bindsym $mod+Shift+Left move left
bindsym $mod+Shift+Down move down
bindsym $mod+Shift+Up move up
bindsym $mod+Shift+Right move right
# split in horizontal orientation
bindsym $mod+h split h
# split in vertical orientation
bindsym $mod+v split v
# enter fullscreen mode for the focused container
bindsym $mod+f fullscreen toggle
# change container layout (stacked, tabbed, toggle split)
bindsym $mod+s layout stacking
bindsym $mod+w layout tabbed
bindsym $mod+e layout toggle split
# toggle tiling / floating
bindsym $mod+Shift+space floating toggle
# change focus between tiling / floating windows
bindsym $mod+space focus mode_toggle
# focus the parent container
bindsym $mod+a focus parent
# focus the child container
#bindsym $mod+d focus child
# Assign names
set $ws01_terminal Terminal
set $ws02_sublime "Sublime"
set $ws03_web "Web"
set $ws04_work "Work"
set $ws08_comms Comms
set $ws09_zzz "Zzz"
set $ws10_utils "Utils"
# Attach to displays
workspace $ws01_terminal output $secondary_display
workspace $ws02_sublime output $primary_display
workspace $ws03_web output $primary_display
workspace $ws04_work output $primary_display
workspace $ws08_comms output $secondary_display
workspace $ws09_zzz output $secondary_display
workspace $ws10_utils output $secondary_display
# Assign hotkeys
bindsym $mod+1 workspace $ws01_terminal
bindsym $mod+2 workspace $ws02_sublime
bindsym $mod+3 workspace $ws03_web
bindsym $mod+4 workspace $ws04_work
bindsym $mod+5 workspace 5
bindsym $mod+6 workspace 6
bindsym $mod+7 workspace 7
bindsym $mod+8 workspace $ws08_comms
bindsym $mod+9 workspace $ws09_zzz
bindsym $mod+0 workspace $ws10_utils
# move focused container to workspace
bindsym $mod+Shift+1 move container to workspace $ws01_terminal
bindsym $mod+Shift+2 move container to workspace $ws02_sublime
bindsym $mod+Shift+3 move container to workspace $ws03_web
bindsym $mod+Shift+4 move container to workspace $ws04_work
bindsym $mod+Shift+5 move container to workspace 5
bindsym $mod+Shift+6 move container to workspace 6
bindsym $mod+Shift+7 move container to workspace 7
bindsym $mod+Shift+8 move container to workspace $ws08_comms
bindsym $mod+Shift+9 move container to workspace $ws09_zzz
bindsym $mod+Shift+0 move container to workspace $ws10_utils
# Start terminals in 1
assign [class="^urxvt"] $ws01_terminal
assign [class="^URxvt"] $ws01_terminal
assign [class="^terminator"] $ws01_terminal
assign [class="^Terminator"] $ws01_terminal
# Give Sublime its own workspace
assign [class="^sublime_text"] $ws02_sublime
assign [class="^Sublime_text"] $ws02_sublime
# Keep the tabs contained in a single workspace
assign [class="Firefox"] $ws03_web
assign [class="^google-chrome"] $ws03_web
assign [class="^Google-chrome"] $ws03_web
assign [class="^Google-Chrome"] $ws03_web
# Group JetBrains products
assign [class="^jetbrains"] $ws04_work
# Wavebox gets its own workspace
assign [class="^wavebox"] $ws08_comms
assign [class="^Wavebox"] $ws08_comms
# workspace $ws10_utils
assign [class="KeePass"] $ws10_utils
assign [class="^spotify"] $ws10_utils
assign [class="^Spotify"] $ws10_utils
assign [class="Spotify"] $ws10_utils
# reload the configuration file
bindsym $mod+Shift+c reload
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
bindsym $mod+Shift+r restart
# exit i3 (logs you out of your X session)
bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -b 'Yes, exit i3' 'i3-msg exit'"
# resize window (you can also use the mouse for that)
mode "resize" {
# These bindings trigger as soon as you enter the resize mode
# Pressing left will shrink the window’s width.
# Pressing right will grow the window’s width.
# Pressing up will shrink the window’s height.
# Pressing down will grow the window’s height.
bindsym j resize shrink width 10 px or 10 ppt
bindsym k resize grow height 10 px or 10 ppt
bindsym l resize shrink height 10 px or 10 ppt
bindsym semicolon resize grow width 10 px or 10 ppt
# same bindings, but for the arrow keys
bindsym Left resize shrink width 10 px or 10 ppt
bindsym Down resize grow height 10 px or 10 ppt
bindsym Up resize shrink height 10 px or 10 ppt
bindsym Right resize grow width 10 px or 10 ppt
# back to normal: Enter or Escape
bindsym Return mode "default"
bindsym Escape mode "default"
}
bindsym $mod+r mode "resize"
# Remove window borders and set gaps
for_window [class="^.*"] border pixel 0
gaps inner 10
exec dex --autostart --environment i3 --search-paths ~/.config/autostart
exec --no-startup-id systemctl --user import-environment USER HOME SHELL PATH DBUS_SESSION_BUS_ADDRESS
exec --no-startup-id systemctl --user start i3-session-pre.target
exec --no-startup-id systemctl --user start i3-session-polybar.target
exec --no-startup-id systemctl --user start i3-session.target
exec --no-startup-id systemctl --no-block --user start i3-session-tray.target
[Unit]
Description=Boot polybar
BindsTo=graphical-session.target
After=i3-session-pre.target
Before=i3-session.target
[Unit]
Description=i3 session setup
BindsTo=graphical-session-pre.target
Before=i3-session-polybar.target
[Unit]
Description=Launch tray apps
BindsTo=graphical-session.target
After=i3-session.target
[Unit]
Description=i3 session running
BindsTo=graphical-session.target
After=i3-session-polybar.target
Before=i3-session-tray.target
[Unit]
Description=Load Lightscreen
PartOf=graphical-session.target
[Service]
Type=simple
ExecStartPre=/usr/bin/sleep 10
ExecStartPre=-/usr/bin/pkill -f /opt/Lightscreen/lightscreen
ExecStart=/opt/Lightscreen/lightscreen -h
[Install]
WantedBy=i3-session-tray.target
[Unit]
Description=Wallpaper management with nitrogen
PartOf=graphical-session.target
After=xrandr.service
[Service]
Type=oneshot
ExecStart=/usr/bin/nitrogen --restore
[Install]
WantedBy=i3-session.target
[Unit]
Description=Run overGrive
PartOf=graphical-session.target
[Service]
Type=simple
ExecStart=/usr/bin/python2 /opt/thefanclub/overgrive/overgrive
[Install]
WantedBy=i3-session-tray.target
;=====================================================
;
; To learn more about how to configure Polybar
; go to https://github.com/jaagr/polybar
;
; The README contains alot of information
;
;=====================================================
[colors]
color0 = ${xrdb:color0:#1b1e20}
color1 = ${xrdb:color1:#a07d86}
color2 = ${xrdb:color2:#835ea0}
color3 = ${xrdb:color3:#a06751}
color4 = ${xrdb:color4:#a06350}
color5 = ${xrdb:color5:#9861a0}
color6 = ${xrdb:color6:#a0574d}
color7 = ${xrdb:color7:#a06290}
color8 = ${xrdb:color8:#455e9c}
color9 = ${xrdb:color9:#c87670}
color10 = ${xrdb:color10:#c899c5}
color11 = ${xrdb:color11:#c854ac}
color12 = ${xrdb:color12:#c88b78}
color13 = ${xrdb:color13:#8b88cc}
color14 = ${xrdb:color14:#c8a1b5}
color15 = ${xrdb:color15:#b9b3e0}
background = #aa000000
background-alt = ${colors.color0}
foreground = #FFFFFF
foreground-alt = ${colors.color15}
primary = ${colors.color8}
secondary = ${colors.color2}
alert = ${colors.color11}
[bar/top_ancestor]
width = 100%
height = 50
offset-x = 0
offset-y = 0
radius = 0
fixed-center = false
background = ${colors.background}
foreground = ${colors.foreground}
line-size = 5
line-color = ${colors.color7}
border-size = 0
module-margin = 2
font-0 = "Hasklug Nerd Font:fontformat=truetype:size=12;1"
font-1 = unifont:fontformat=truetype:size=8:antialias=false;0
font-2 = "MesloLGSDZ Nerd Font Mono:fontformat=opentype:size=20;3"
font-3 = "MesloLGSDZ Nerd Font Mono:fontformat=opentype:size=32;5"
font-4 = "Hasklug Nerd Font:fontformat=truetype:size=16;0"
scroll-up = i3wm-wsnext
scroll-down = i3wm-wsprev
cursor-click = pointer
cursor-scroll = ns-resize
[bar/primary]
inherit = bar/top_ancestor
monitor = ${env:MONITOR:DVI-D-0}
modules-left = date powermenu pulseaudio memory cpu
modules-right = i3
tray-position = left
tray-padding = 2
[bar/secondary]
inherit = bar/top_ancestor
monitor = ${env:MONITOR:HDMI-0}
modules-left = i3
modules-right = powermenu date
[module/i3]
type = internal/i3
format = <label-state>
;<label-mode>
strip-wsnumber = true
pin-workspaces = true
index-sort = true
fuzzy-match = true
wrapping-scroll = false
ws-icon-0 = "Utils;"
ws-icon-1 = "Terminal;"
ws-icon-2 = "Sublime;"
ws-icon-3 = "Web;"
ws-icon-4 = "Work;"
ws-icon-5 = "5;"
ws-icon-6 = "6;"
ws-icon-7 = "7;"
ws-icon-8 = "Comms;שּ"
ws-icon-9 = "Utils;"
ws-icon-default = ""
label-focused-font = 4
label-unfocused-font = ${self.label-focused-font}
label-visible-font = ${self.label-focused-font}
label-urgent-font = ${self.label-focused-font}
; label-mode-padding = 2
; label-mode-foreground = #000
; label-mode-background = ${colors.primary}
; focused = Active workspace on focused monitor
label-focused = %{T4}%{F#C8A1B5}%icon%%{F-}%{T5} %name%
label-focused-background = ${colors.background-alt}
label-focused-overline= ${colors.primary}
label-focused-padding = 2
; unfocused = Inactive workspace on any monitor
label-unfocused = %{T4}%{F#C8A1B5}%icon%%{F-}%{T5} %name%
label-unfocused-padding = 2
; visible = Active workspace on unfocused monitor
label-visible = %{T4}%{F#C8A1B5}%icon%%{F-}%{T5} %name%
label-visible-background = ${self.label-focused-background}
label-visible-overline = ${self.label-focused-overline}
label-visible-padding = ${self.label-focused-padding}
; urgent = Workspace with urgency hint set
label-urgent = %{T4}%{F#C8A1B5}%icon%%{F-}%{T5} %name%
label-urgent-background = ${colors.alert}
label-urgent-padding = 2
[module/cpu]
type = internal/cpu
interval = 2
format = <ramp-coreload>
format-overline = ${colors.color13}
ramp-coreload-0 = ▁
ramp-coreload-1 = ▂
ramp-coreload-2 = ▃
ramp-coreload-3 = ▄
ramp-coreload-4 = ▅
ramp-coreload-5 = ▆
ramp-coreload-6 = ▇
ramp-coreload-7 = █
[module/memory]
type = internal/memory
interval = 2
format = <bar-used>
format-overline = ${colors.color13}
bar-used-indicator =
bar-used-width = 50
bar-used-foreground-0 = ${colors.color13}
bar-used-foreground-1 = ${colors.color15}
bar-used-foreground-2 = ${colors.color14}
bar-used-foreground-3 = ${colors.color10}
bar-used-foreground-4 = ${colors.color11}
bar-used-fill = ▐
bar-used-empty = ▐
bar-used-empty-foreground = ${colors.color0}
; TODO: readd once signal works again
; [module/wlan]
; type = internal/network
; interface = wlp5s0
; interval = 0.5
; ; accumulate-stats = true
; format-connected = <ramp-signal> <label-connected>
; label-connected = %essid% %signal%
; ramp-signal-0 = ⢀
; ramp-signal-1 = ⣀
; ramp-signal-2 = ⣠
; ramp-signal-3 = ⣤
; ramp-signal-4 = ⣴
; ramp-signal-5 = ⣶
; ramp-signal-6 = ⣾
; ramp-signal-7 = ⣿
; ramp-signal-foreground = ${colors.foreground-alt}
[module/date]
type = internal/date
interval = 5
date =
date-alt = " %Y-%m-%d"
time = %H:%M
time-alt = %H:%M:%S
format-prefix = 
format-prefix-font = 3
format-prefix-foreground = ${colors.foreground-alt}
label = %date% %time%
label-font = 1
[module/pulseaudio]
type = internal/pulseaudio
format-volume = <label-volume> <bar-volume>
label-volume = 
label-volume-foreground = ${root.foreground}
label-muted = 🔇 muted
label-muted-foreground = ${colors.color14}
bar-volume-width = 10
bar-volume-foreground-0 = ${colors.color2}
bar-volume-foreground-1 = ${colors.color2}
bar-volume-foreground-2 = ${colors.color2}
bar-volume-foreground-3 = ${colors.color2}
bar-volume-foreground-4 = ${colors.color2}
bar-volume-foreground-5 = ${colors.color2}
bar-volume-foreground-6 = ${colors.color11}
bar-volume-gradient = false
bar-volume-indicator = |
bar-volume-indicator-font = 3
bar-volume-fill = ─
bar-volume-fill-font = 3
bar-volume-empty = ─
bar-volume-empty-font = 3
bar-volume-empty-foreground = ${colors.foreground-alt}
; TODO: this summer
; [module/temperature]
; type = internal/temperature
; thermal-zone = 0
; warn-temperature = 60
; format = <ramp> <label>
; format-underline = #f50a4d
; format-warn = <ramp> <label-warn>
; format-warn-underline = ${self.format-underline}
; label = %temperature-c%
; label-warn = %temperature-c%
; label-warn-foreground = ${colors.secondary}
; ramp-0 = 
; ramp-1 = 
; ramp-2 = 
; ramp-foreground = ${colors.foreground-alt}
[module/powermenu]
type = custom/menu
label-font = 5
expand-right = true
format-spacing = 1
label-open-font = 3
label-open = 
label-open-foreground = ${colors.secondary}
label-close = 陵
label-close-foreground = ${colors.secondary}
label-close-font = 4
label-separator = |
label-separator-foreground = ${colors.foreground-alt}
label-separator-font = 3
menu-0-0-font = 1
menu-0-0 = reboot
menu-0-0-exec = menu-open-1
menu-0-1-font = 1
menu-0-1 = power off
menu-0-1-exec = menu-open-2
menu-0-2-font = 1
menu-0-2 = log out
menu-0-2-exec = i3 exit
menu-1-0-font = 1
menu-1-0 = 
menu-1-0-exec = menu-open-0
menu-1-1-font = 1
menu-1-1 = 
menu-1-1-exec = sudo reboot
menu-2-0-font = 1
menu-2-0 = 
menu-2-0-exec = sudo poweroff
menu-2-1-font = 1
menu-2-1 = 
menu-2-1-exec = menu-open-0
[settings]
screenchange-reload = true
;compositing-background = xor
;compositing-background = screen
;compositing-foreground = source
;compositing-border = over
[global/wm]
margin-top = 5
margin-bottom = 5
; vim:ft=dosini
[Unit]
Description=Launch polybar
PartOf=graphical-session.target
[Service]
Type=simple
ExecStart=/usr/local/bin/polybar -r -c /home/cjharries/.config/polybar/config-test primary
[Install]
WantedBy=i3-session-polybar.target
[Unit]
Description=Launch secondary screen's bar
PartOf=graphical-session.target
[Service]
Type=simple
ExecStart=/usr/local/bin/polybar -r -c /home/cjharries/.config/polybar/config-test secondary
[Install]
WantedBy=i3-session-polybar.target
[Unit]
Description=Launch terminator as a dbus
PartOf=graphical-session.target
[Service]
Type=simple
ExecStart=/usr/bin/terminator --new-tab
[Install]
WantedBy=i3-session.target
[Unit]
Description=Load display configuration
PartOf=graphical-session-pre.target
[Service]
Type=oneshot
ExecStart=/usr/bin/xrandr --output HDMI-0 --mode 1920x1080 --pos 1920x0 --rotate right --output DP-3 --off --output DVI-D-0 --primary --mode 1920x1080 --pos 0x424 --rotate normal --output DP-1 --off --output DP-2 --off
[Install]
WantedBy=i3-session-pre.target
@loonymike
Copy link

Hi, I was wondering how you installed Polybar? Thanks, Mike

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment