-
-
Save thecjharries/0e6ec9ba6209a0dfb5ccc66e1fc1b358 to your computer and use it in GitHub Desktop.
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.
There's a ton more, but these are the important bits.
- Fedora 28: OS
i3-gaps
: window managerpolybar
: status bar- Nerd Fonts: symbols
compton
: compositorwp
: palette generator
There are a ton of files here. This makes more sense as repo. Eventually.
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:
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.
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
.
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 withExecStartPre
andExecStart
- 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.
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 ranxrandr
before polybari3-session-polybar.target
: This boots all mypolybars
, which is important because unless thetray
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.
- By moving to
systemd
, I didn't have to reinvent the wheel to restart things or manage stale processes - By slightly delaying boot times to wait for things to finish, I was able to
- actually load Spotify;
snap
andlpf
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.
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.
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.
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
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 |
Hi, I was wondering how you installed Polybar? Thanks, Mike