1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 | *customization: -color
Xterm.termName: xterm-256color
URxvt.termName: rxvt-256color
!-------------------------------------------------------------------------------
! Xft settings
!-------------------------------------------------------------------------------
Xft.dpi: 96
Xft.antialias: true
Xft.rgba: rgb
Xft.hinting: true
Xft.hintstyle: hintslight
Xft.lcdfilter: lcddefault
!-------------------------------------------------------------------------------
! URxvt settings
!-------------------------------------------------------------------------------
URxvt.depth: 32
URxvt.geometry: 90x30
!URxvt.transparent: true
!URxvt.fading: 0
URxvt.urgentOnBell: true
URxvt.visualBell: true
URxvt.loginShell: true
URxvt.saveLines: 1000000
URxvt.internalBorder: 0
URxvt.lineSpace: 0
! do not scroll with output
URxv*scrollTtyOutput: false
! scroll with relation to buffer
URxvt*scrollWithBuffer: true
! scroll back to bottom with keypress
URxvt*scrollTtyKeypress: true
! Fonts
URxvt.allow_bold: true
URxvt.font: xft:Source Code Pro-11:hinting=True;antialias:True
URxvt.boldFont: xft:Source Code Pro-11:bold;hinting=True;antialias:True
! Fix font space
URxvt*letterSpace: -1
! Scrollbar
!URxvt.scrollStyle: rxvt
URxvt.scrollBar: false
!URxvt.scrollBar_right: true
! Perl extensions
URxvt.perl-ext-common: default,matcher,keyboard-select
URxvt.matcher.button: 1
URxvt.urlLauncher: firefox
! Cursor
URxvt.cursorBlink: true
URxvt.cursorColor: #657b83
URxvt.cursorUnderline: false
! keyboard-select
URxvt.keysym.M-r: perl:keyboard-select:activate
! Pointer
URxvt.pointerBlank: true
!! color stuff
#define S_base03 #002b36
#define S_base02 #073642
#define S_base01 #586e75
#define S_base00 #657b83
#define S_base0 #839496
#define S_base1 #93a1a1
#define S_base2 #eee8d5
#define S_base3 #fdf6e3
*background: S_base03
*foreground: S_base0
*fadeColor: S_base03
*cursorColor: S_base1
*pointerColorBackground:S_base01
*pointerColorForeground:S_base1
#define S_yellow #b58900
#define S_orange #cb4b16
#define S_red #dc322f
#define S_magenta #d33682
#define S_violet #6c71c4
#define S_blue #268bd2
#define S_cyan #2aa198
#define S_green #859900
!! black dark/light
*color0: S_base02
*color8: S_base03
!! red dark/light
*color1: S_red
*color9: S_orange
!! green dark/light
*color2: S_green
*color10: S_base01
!! yellow dark/light
*color3: S_yellow
*color11: S_base00
!! blue dark/light
*color4: S_blue
*color12: S_base0
!! magenta dark/light
*color5: S_magenta
*color13: S_violet
!! cyan dark/light
*color6: S_cyan
*color14: S_base1
!! white dark/light
*color7: S_base2
*color15: S_base3
|
x
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 | @namespace html url(http://www.w3.org/1999/xhtml);
@namespace xul url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul);
/*
Austin's minimal firefox css
Note: To enable the urlbar; search this css for:
"make the url-bar visible" and "adjust margin-top to"
*/
:root {
/* TAB VARIABLES */
--bg-light: #073642; --bg-dark: #002b36;
--fg-light: #93a1a1; --fg-dark: #839496;
--tab-triangle-correction: 0px;
--tab-height: 20px; --tab-icon-size: 12px; --tab-strip-margin: 0; --tab-overlap: -5px;
--tab-fonts: "Source Code Pro",monospace; --tab-font-size: 8pt;
--tab-text-align: center; /* left | center | right */
--tab-triangle: none; /* block | none */
/* URL VARIABLES */
--url-background: var(--bg-light); --url-color: var(--fg-light);
--url-height: 22px; --url-right-margin: 10px;
--url-fonts: "Source Code Pro",monospace; --url-font-size: 8pt;
--url-text-align: center; /* left | center | right */
--url-position: fixed; /* absolute == top (under tabs) || fixed == bottom of browser */
margin-bottom: 0 /*var(--url-height)*/ !important;
}
@-moz-document url(chrome://browser/content/browser.xul) {
/* URL-BAR */
#back-button, #forward-button, #back-button *, #forward-button *, #identity-box, #urlbar-reload-button, #urlbar-stop-button, #urlbar-go-button,
#PanelUI-button, #bookmarks-menu-button, #downloads-button, #home-button, #stylish-toolbar-button, #abp-toolbarbutton,
#notification-popup-box, #new-tab-button, #private-browsing-indicator, #search-container, #nav-bar-overflow-button,
.tabs-newtab-button, .tab-close-button, .tab-close, .tab-throbber, .tab-background-start, .tab-background-end,
#window-controls /*, #alltabs-button, #tabview-button, .tab-icon-image */, .tab-icon-image:not([pinned]) { display: none !important; }
#titlebar-content {
margin-top: 0 !important;
background-color: var(--bg-dark) !important;
}
.tab-drop-indicator { margin-bottom: 0 !important; }
#PopupAutoCompleteRichResult {
display: none;
}
#nav-bar {
position: var(--url-position) !important; bottom: 0 !important;
width: 100% !important; height: var(--url-height) !important;
min-height: var(--url-height) !important; max-height: var(--url-height) !important;
margin: 0 0 0 0 !important;
}
#nav-bar-customization-target { width: 100% !important; }
#urlbar-wrapper {
width: 100% !important; margin-top: -1px !important; /* --- adjust margin-top to ~ -5px if you experience gap --- */
position: absolute !important; top: 0 !important; left: 0 !important;
border-bottom: 0px solid var(--bg-light) !important;
}
#urlbar {
border: none !important; border-radius: 0 !important;
margin: 0 0 0 0 !important; padding: 0 2px 0 2px !important;
width: calc(100% + var(--url-right-margin)) !important;
height: var(--url-height) !important; min-height: var(--url-height) !important;
background: var(--url-background) !important; color: var(--url-color) !important;
font-family: var(--url-fonts) !important; font-size: var(--url-font-size) !important;
text-align: var(--url-text-align) !important;
}
/* TABS */
.tabbrowser-tab[fadein]:not([pinned]) { min-width: 50px !important; max-width: /*180px*/ 100% !important; }
tab {
font-family: var(--tab-fonts) !important;
height: var(--tab-height) !important; min-height: var(--tab-height) !important;
background: var(--bg-dark) !important; color: var(--fg-dark) !important;
font-size: var(--tab-font-size); text-shadow: none !important; text-align: var(--tab-text-align) !important;
}
.tabbrowser-tab label { padding: 0 14px 0 14px !important; }
#tabbrowser-tabs .tabbrowser-tab[pinned] { width: 38px !important; }
#tabbrowser-tabs .tabbrowser-tab[pinned] label { display: none !important; }
#tabbrowser-tabs .tabbrowser-tab .tab-icon-image {
margin: 0 -10px 0 14px !important;
width: var(--tab-icon-size) !important;
height: var(--tab-icon-size) !important;
}
.tabbrowser-tab *, .tabs-newtab-button * {
background: none !important; list-style-image: none !important;
margin: 0 0 0 0 !important; padding: 0 0 0 0 !important;
-moz-appearance: none !important;
}
#tabbrowser-tabs .tabbrowser-tab[pinned] .tab-stack { height: var(--tab-height) !important; width: 100% !important; }
#tabbrowser-tabs .tabbrowser-arrowscrollbox .box-inherit.scrollbox-innerbox { max-height: var(--tab-height) !important; }
.scrollbutton-up, .scrollbutton-down { border: none !important; }
.tabbrowser-tab[selected="true"] .tab-stack {
background: var(--bg-light) !important; color: var(--fg-light) !important;
border-radius: 0px !important; position: relative !important;
/*border-top: 1px solid #dc52a5 !important;/**/
}
.tabbrowser-tab[selected="true"]:before { /* Left Triangle (of selected tab) */
content: '' !important; display: var(--tab-triangle);
position: absolute !important; top: 0 !important; left: var(--tab-overlap) !important;
width: 0 !important; height: 0 !important;
border: none !important; z-index: 2 !important;
border-top: var(--tab-height) solid var(--bg-dark) !important;
border-right: calc(var(--tab-height)/2) solid var(--bg-light) !important;
/**/
}
.tabbrowser-tab[selected="true"]:after { /* Right Triangle (of selected tab) */
content: '' !important; display: var(--tab-triangle);
position: absolute !important; top: 0 !important; right: var(--tab-overlap) !important;
width: 0 !important; height: 0 !important;
border: none !important; z-index: 2 !important;
border-top: var(--tab-height) solid var(--bg-dark) !important;
border-left: calc(var(--tab-height)/2) solid var(--bg-light) !important;
/**/
}
#TabsToolbar, #tabbrowser-tabs {
-moz-appearance: none !important;
height: var(--tab-height) !important; min-height: var(--tab-height)!important;
margin: 0 var(--tab-strip-margin) !important;
background: var(--bg-dark) !important;
}
#TabsToolbar::after { display: none !important; }
.tabbrowser-tab::before, .tabbrowser-tab::after { background: none !important; opacity: 1 !important; visibility: visible !important; }
/*browser, #navigator-toolbox { -moz-appearance: none !important; background: transparent !important; }*/
#navigator-toolbox::after { height: 0px !important; background: var(--bg-light) !important; }
#liberator-separator { height: 0px !important; background: var(--bg-light) !important; border-top: 0 !important; }
/* MENUS */
menuitem + menuseparator, menu + menuseparator/*, .menu-iconic-left*/ { display: none !important; }
/*menuitem > label { margin-left: var(--tab-height) !important; }*/
menubar, menubutton, menulist, menu, menuitem {
font-family: var(--tab-fonts) !important; font-size: var(--tab-font-size);
height: var(--tab-height) !important;
}
/* HIDE ORANGE MENU BUTTON */
#appmenu-toolbar-button, #appmenu-button-container { display: none !important; }
/* HIDE STATUS BAR */
#status-bar, #statusbar-display, statuspanel { display: none !important; }
/* PRIVATE BROWSING ICON HIDE */
#main-window[privatebrowsingmode=temporary] #private-browsing-indicator,
#main-window[privatebrowsingmode=temporary] #private-browsing-indicator-titlebar { display: none !important; }
/* Vimperator icon style */
#liberator-statusline:not([customizing="true"]) { background: var(--bg-light); margin: -2px -2px !important; padding: 0 0 !important; height: 24px !important; }
#liberator-statusline:not([customizing="true"]) :-moz-any(toolbarbutton) { height: 100% !important; }
#tabview-button {
list-style-image: url(http://twily.info/img/tabview-button.png?v=2) /* 16x16 px image */ !important;
-moz-image-region: rect(0, 0, 0, 0) !important;
}
#liberator-completions { background: var(--bg-dark) !important; }
/* Tabgroup margin top fix */
#tab-view-deck #tab-view { margin: 24px 12px 12px 12px !important; }
#tab-view-deck { background: var(--bg-light) !important; }
window[sizemode="fullscreen"] #liberator-statusline { display: none !important; }
window[sizemode="fullscreen"] #liberator-bottombar {
margin-top: -24px !important;
transition: 1s ease !important; transition-delay: .3s !important;
}
}
/* Tab Group Page Style (Ctrl+Shift+E) */
@-moz-document url(chrome://browser/content/tabview.html) {
#content #bg, #actions, body { background: var(--bg-light) !important; }
body * { color: var(--fg-light) !important; }
body .groupItem, #content #actions, body .undo {
background: var(--bg-dark) !important;
border: 0 !important; border-radius: 0 !important; box-shadow: 0 0 0 0 !important;
}
#content #actions {
opacity: 0 !important; display: none !important; /* block | none */
transition: .3s ease-out !important;
}
#content #actions:hover { opacity: 1 !important; }
body .appTabTrayContainer { border: 0 !important; }
body .tab, body .tab .thumb {
box-shadow: 0 0 0 0 !important; border: 0 !important; border-radius: 0 !important;
background: transparent !important; padding : 0 !important;
}
body .tab .favicon { display: none !important; }
body .groupItem .name { border: 0 !important; }
body .tab .tab-title { padding-top: 2px !important; }
}
@-moz-document url("chrome://browser/content/browser.xul"),
url("chrome://global/content/viewSource.xul") {
.browserContainer findbar,
#viewSource #FindToolbar { -moz-box-ordinal-group: 0; position: fixed !important; right: 20px; border: 1px solid threedshadow !important; border-top: none !important; background: var(--bg-dark) !important; }
body * { color: var(--fg-light) !important; }
}
/* AGENT_SHEET */
@-moz-document url-prefix(http://), url-prefix(https://), url-prefix(chrome://liberator/), url-prefix(file:///) {
/* SCROLLBAR */
scrollbar[orient="vertical"], scrollbar thumb[orient="vertical"],
scrollbar[orient="horizontal"], scrollbar thumb[orient="horizontal"] {
display: block !important; /* none = hide || block = show */
}
}
/* background color around/behind pictures opened in firefox (require html namespace on top) */
@-moz-document regexp("(https?://|file:///)(.*)\\.(jpeg|jpg|gif|png|apng|svg|bmp|webm|webp)") {
body { background: var(--bg-light) !important; }
img.decoded { background-color: transparent !important; }
}
/* About:Blank background */
@-moz-document url(about:blank) {
html,body { background: var(--bg-dark) !important; }
}
/* about:stylish-edit toolbar style */
@-moz-document regexp("about:stylish-edit.*") {
#main-area, textbox { background: var(--bg-light) !important; }
textbox, grid, columns, rows, separator { border: 0 !important; }
.devtools-toolbarbutton { background: var(--bg-dark) !important; color: var(--fg-light) !important; }
}
/*----- Fix for white flash on new tab -----*/
tabbrowser tabpanels, #appcontent > #content { background: var(--bg-light) !important; }
|
x
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 | #Austin's i3 config
#Modifier key for actions, I use windows
set $mod Mod4
# Font for window titles.
font pango:Source Code Pro 9
# set some nice colors border background text
client.focused #2aa198 #2aa198 #eee895
client.unfocused #021215 #021215 #586e75
client.focused_inactive #073642 #073642 #839496
client.urgent #cb4b16 #dc322f #fdf6e3
exec xrdb .Xresources
##Startup Programs
#autoname
exec_always ~/.i3/i3-autoname-workspaces.py &
# set bg
exec --no-startup-id nitrogen --restore
# wireless
exec --no-startup-id nm-applet
# fix keyboard, repeat rate, xcape
exec setxkbmap -option ctrl:nocaps
exec --no-startup-id xcape
exec --no-startup-id xset r rate 400 33
# compton
exec_always --no-startup-id compton --config ~/.config/compton.conf -b
# pidgin
exec --no-startup-id pidgin
# clipit
exec clipit
## Floats
for_window [class="^.*"] border pixel 2
for_window [title="Screen Layout Editor"] floating enable
for_window [title="Application Finder"] floating enable
for_window [instance="Download"] floating enable
for_window [window_role="plugin_ui"] floating enable
for_window [title="Menu Update"] floating enable
for_window [title="___"] floating enable
# Use mouse+$mod to drag floats
floating_modifier $mod
# gaps !only use for i3-gaps!
gaps inner 6
gaps outer 1
smart_gaps on
smart_borders on
# Volume controls, and screen brightness
bindsym XF86AudioRaiseVolume exec amixer -q sset Master 5%+ unmute
bindsym XF86AudioLowerVolume exec amixer -q sset Master 5%- unmute
bindsym XF86AudioMute exec amixer -q sset Master toggle
bindsym XF86MonBrightnessUp exec xbacklight -inc 20 # increase screen brightness
bindsym XF86MonBrightnessDown exec xbacklight -dec 20 # decrease screen brightness
bindsym XF86Homepage exec firefox
bindsym XF86Tools exec terminator
##Program Bindings
# start a terminal
bindsym $mod+Return exec urxvt256c-ml
# kill focused window
bindsym $mod+Shift+q kill
# start dmenu/rofi
#bindsym $mod+d exec dmenu_run -p "k:" -l 10 -fn 'Terminus-12' -nb '#021215' -nf '#657b83' -sb '#002b36' -sf '#93a1a1'
bindsym $mod+d exec "rofi -show combi -combi-modi run,ssh -modi combi"
bindsym $mod+e exec rofi -show window
# quickswitch
bindsym $mod+c exec /usr/bin/quickswitch.py
#fancy screen lock
bindsym $mod+Shift+w exec ~/.i3/pixelate_lock.sh
bindsym XF86Sleep exec ~/.i3/pixelate_lock.sh
#rename the current workspace
bindsym $mod+t exec ~/.i3/rename_workspace.sh
# datepaste
#bindsym $mod+e exec ~/.i3/date.sh
##Key Bindings
# change focus
bindsym $mod+h focus left
bindsym $mod+j focus down
bindsym $mod+k focus up
bindsym $mod+l focus right
# move focused window
bindsym $mod+Shift+h move left
bindsym $mod+Shift+j move down
bindsym $mod+Shift+k move up
bindsym $mod+Shift+l move right
# split in horizontal orientation
bindsym $mod+g split h
#split in vertical orientation
bindsym $mod+v split v
# enter fullscreen mode for the focused container
#bindsym $mod+t fullscreen
# change container layout (stacked, tabbed, toggle split)
bindsym $mod+s layout stacking
bindsym $mod+w layout tabbed
bindsym $mod+f 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
# switch to workspace
bindsym $mod+1 workspace number 1
bindsym $mod+2 workspace number 2
bindsym $mod+3 workspace number 3
bindsym $mod+4 workspace number 4
bindsym $mod+5 workspace number 5
bindsym $mod+6 workspace number 6
bindsym $mod+7 workspace number 7
bindsym $mod+8 workspace number 8
bindsym $mod+9 workspace number 9
bindsym $mod+0 workspace number 10
# move focused container to workspace
bindsym $mod+Shift+1 move container to workspace number 1
bindsym $mod+Shift+2 move container to workspace number 2
bindsym $mod+Shift+3 move container to workspace number 3
bindsym $mod+Shift+4 move container to workspace number 4
bindsym $mod+Shift+5 move container to workspace number 5
bindsym $mod+Shift+6 move container to workspace number 6
bindsym $mod+Shift+7 move container to workspace number 7
bindsym $mod+Shift+8 move container to workspace number 8
bindsym $mod+Shift+9 move container to workspace number 9
bindsym $mod+Shift+0 move container to workspace number 10
bindsym $mod+Shift+Right move workspace to output right
bindsym $mod+Shift+Left move workspace to output left
##i3 bindings
# 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+p restart
# exit i3 (logs you out of your X session)
bindsym $mod+Shift+f 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'"
# Jump to urgent window
#bindsym $mod+x [urgent=latest] focus
# display management
set $mode_display Screen Management (w) WORK, (s) SOLO
mode "$mode_display" {
bindsym w exec ~/.i3/work.sh
bindsym s exec ~/.i3/notwork.sh
# back to normal: Enter or Escape
bindsym Return mode "default"
bindsym Escape mode "default"
}
bindsym $mod+x mode "$mode_display"
# resize window
set $resize Resize Window
mode "$resize" {
bindsym h resize shrink width 10 px or 10 ppt
bindsym j resize grow height 10 px or 10 ppt
bindsym k resize shrink height 10 px or 10 ppt
bindsym l 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"
# Start i3bar
bar {
status_command i3blocks -c ~/.i3/i3blocks.conf
position top
height 18
font pango:DejaVu Sans Mono, FontAwesome 10
colors {
background #021215
statusline #93a1a1
separator #2aa198
# Type border background font
focused_workspace #2aa198 #073642 #eee895
active_workspace #073642 #002b36 #839496
inactive_workspace #002b36 #021215 #586e75
urgent_workspace #cb4b16 #dc322f #fdf6e3
}
}
# vim:filetype=i3
|
x
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | # i3blocks config file
# Global properties
align=center
color=#93a1a1
separator_block_width=0
separator=false
markup=pango
[volume]
label=
instance=Master
command=/usr/local/libexec/i3blocks/volume
interval=20
signal=1
[cpu]
label=
command=.i3/cpu_usage.pl
interval=-2
[memory]
label=
command=.i3/memory.sh
interval=10
[network]
command=.i3/bandwidth.sh
interval=5
[battery]
command=.i3/battery.py
interval=30
[date]
label=
command=echo "<span background=\"#021215\" foreground=\"#2aa198\">$(date '+%A, %d %b %Y') </span>"
interval=3600
[time]
command=echo "<span background=\"#002b36\" foreground=\"#268bd2\">$(date +%H:%M)</span>"
interval=5
markup=pango
|
x
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 | #!/usr/bin/env python3
# This script listens for i3 events and updates workspace names to show icons
# for running programs. It contains icons for a few programs, but more can
# easily be added by inserting them into WINDOW_ICONS below.
#
# Dependencies
# * xorg-xprop - install through system package manager
# * i3ipc - install with pip
# * fontawesome - install with pip
#
# Installation:
# * Download this script and place it in ~/.config/i3/ (or anywhere you want)
# * Add "exec_always ~/.config/i3/i3-autoname-workspaces.py &" to your i3 config
# * Restart i3: "$ i3-msg restart"
#
# Configuration:
# The default i3 config's keybingings reference workspaces by name, which is an
# issue when using this script because the "names" are constantaly changing to
# show window icons. Instead, you'll need to change the keybindings to
# reference workspaces by number. Change lines like:
# bindsym $mod+1 workspace 1
# To:
# bindsym $mod+1 workspace number 1
import i3ipc
import subprocess as proc
import re
import signal
import sys
import fontawesome as fa
from util import *
# Add icons here for common programs you use. The keys are the X window class
# (WM_CLASS) names (lower-cased) and the icons can be any text you want to
# display.
#
# Most of these are character codes for font awesome:
# http://fortawesome.github.io/Font-Awesome/icons/
#
# If you're not sure what the WM_CLASS is for your application, you can use
# xprop (https://linux.die.net/man/1/xprop). Run `xprop | grep WM_CLASS`
# then click on the application you want to inspect.
WINDOW_ICONS = {
'urxvt256c-ml': fa.icons['terminal'],
'google-chrome': fa.icons['chrome'],
'subl': fa.icons['code'],
'spotify': fa.icons['spotify'],
'firefox': fa.icons['firefox'],
'libreoffice': fa.icons['file-text-o'],
'feh': fa.icons['picture-o'],
'zathura': fa.icons['file-pdf-o'],
'thunar': fa.icons['files-o'],
'pcmanfm': fa.icons['files-o'],
'pidgin': fa.icons['commenting'],
'steam': fa.icons['steam'],
'zenity': fa.icons['window-maximize'],
'rambox': fa.icons['paper-plane'],
'remmina': fa.icons['desktop'],
}
# This icon is used for any application not in the list above
DEFAULT_ICON = '*'
# Returns an array of the values for the given property from xprop. This
# requires xorg-xprop to be installed.
def xprop(win_id, property):
try:
prop = proc.check_output(['xprop', '-id', str(win_id), property], stderr=proc.DEVNULL)
prop = prop.decode('utf-8')
return re.findall('"([^"]+)"', prop)
except proc.CalledProcessError as e:
print("Unable to get property for window '%d'" % win_id)
return None
def icon_for_window(window):
classes = xprop(window.window, 'WM_CLASS')
if classes != None and len(classes) > 0:
for cls in classes:
cls = cls.lower() # case-insensitive matching
if cls in WINDOW_ICONS:
return WINDOW_ICONS[cls]
print('No icon available for window with classes: %s' % str(classes))
return DEFAULT_ICON
# renames all workspaces based on the windows present
# also renumbers them in ascending order, with one gap left between monitors
# for example: workspace numbering on two monitors: [1, 2, 3], [5, 6]
def rename_workspaces(i3):
ws_infos = i3.get_workspaces()
prev_output = ""
n = 1
for ws_index, workspace in enumerate(i3.get_tree().workspaces()):
ws_info = ws_infos[ws_index]
name_parts = parse_workspace_name(workspace.name)
name_parts['icons'] = ' '.join([icon_for_window(w) for w in workspace.leaves()])
# as we enumerate, leave one gap between each workspace
if ws_info.output != prev_output and prev_output != "":
n += 1 # leave a gap
prev_output = ws_info.output
# renumber workspace
name_parts['num'] = n
n += 1
new_name = construct_workspace_name(name_parts)
i3.command('rename workspace "%s" to "%s"' % (workspace.name, new_name))
# rename workspaces to just numbers and shortnames.
# called on exit to indicate that this script is no longer running.
def undo_window_renaming(i3):
for workspace in i3.get_tree().workspaces():
name_parts = parse_workspace_name(workspace.name)
name_parts['icons'] = None
new_name = construct_workspace_name(name_parts)
i3.command('rename workspace "%s" to "%s"' % (workspace.name, new_name))
i3.main_quit()
sys.exit(0)
if __name__ == '__main__':
i3 = i3ipc.Connection()
# exit gracefully when ctrl+c is pressed
for sig in [signal.SIGINT, signal.SIGTERM]:
signal.signal(sig, lambda signal, frame: undo_window_renaming(i3))
# call rename_workspaces() for relevant window events
def window_event_handler(i3, e):
if e.change in ['new', 'close', 'move']:
rename_workspaces(i3)
i3.on('window', window_event_handler)
rename_workspaces(i3)
i3.main()
|
x
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | #!/usr/bin/env python3
## This script is used to dynamically rename workspace names in i3.
# When run, it presents a text field popup using zenity, in which you can type a
# new name for the workspace. It is compatible with the i3-autoname-workspaces
# script and renames only the "shortname" of the workspace, keeping the number
# and window icons in place.
#
# Note that this script can be used without i3-autoname-workspaces.py
#
# Dependencies:
# * zenity - install with system package manager
# * i3ipc - install with pip
import i3ipc
import logging
import subprocess as proc
import re
import sys
from util import *
logging.basicConfig(level=logging.INFO)
i3 = i3ipc.Connection()
workspace = [w for w in i3.get_workspaces() if w.focused][0]
name_parts = parse_workspace_name(workspace.name)
logging.info("Current workspace shortname: '%s'" % name_parts['shortname'])
try:
# use zenity to show a text box asking the user for a new workspace name
prompt_title = "Rename Workspace:" if name_parts['shortname'] == None else "Rename Workspace '%s':" % name_parts['shortname']
response = proc.check_output(['zenity', '--entry', "--text=%s" % prompt_title])
new_shortname = response.decode('utf-8').strip()
logging.info("New name from user: '%s'" % new_shortname)
if ' ' in new_shortname:
msg = "No spaces allowed in workspace names"
logging.error(msg)
proc.check_call(['zenity', '--error', '--text=%s' % msg])
sys.exit(1)
except proc.CalledProcessError as e:
logging.info("Cancelled by user, exiting...")
name_parts['shortname'] = new_shortname
new_name = construct_workspace_name(name_parts)
# get the current workspace and rename it
workspace = [w for w in i3.get_workspaces() if w.focused][0]
res = i3.command('rename workspace "%s" to "%s"' % (workspace.name, new_name))
|
x
1 2 3 4 5 6 7 8 | #!/usr/bin/env sh
image_file=/tmp/screen_lock.png
resolution=$(xdpyinfo | grep dimensions | awk '{print $2}')
filters='noise=alls=20,scale=iw*.05:-1,scale=iw*20:-1:flags=neighbor'
ffmpeg -y -loglevel 0 -s "$resolution" -f x11grab -i $DISPLAY -vframes 1 \
-vf "$filters" "$image_file"
i3lock -e -i "$image_file"
|
x
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | # Config wireframe stolen from here: https://github.com/nim-/dotfiles/blob/master/.config/compton.conf
#make compton great again
vsync = "drm";
refresh-rate = 60;
# Shadow
shadow = true; # Enabled client-side shadows on windows.
no-dock-shadow = false; # Avoid drawing shadows on dock/panel windows.
no-dnd-shadow = true; # Don't draw shadows on DND windows.
clear-shadow = true; # Zero the part of the shadow's mask behind the window (experimental).
shadow-radius = 12; # The blur radius for shadows. (default 12)
shadow-offset-x = -15; # The left offset for shadows. (default -15)
shadow-offset-y = -15; # The top offset for shadows. (default -15)
# Exclude conditions for shadows.
# Fix dual shadow on some gtk3 powered applications: "_GTK_FRAME_EXTENTS@:c"
shadow-exclude = [
"n:e:Notification",
"class_g = 'Gnome-screenshot'",
"class_g = 'Gnome-control-center'",
"class_g = 'Nautilus'"
];
#"_GTK_FRAME_EXTENTS@:c"
shadow-ignore-shaped = false; # Avoid drawing shadow on all shaped windows (see also: --detect-rounded-corners)
# Opacity
shadow-opacity = 0.7; # The translucency for shadows. (default .75)
active-opacity = 1.0;
menu-opacity = 1.0; # The opacity for menus. (default 1.0)
inactive-opacity = 0.9; # Opacity of inactive windows. (0.1 - 1.0)
blur-background-exclude = [ "window_type = 'dock'", "window_type = 'desktop'" ]; # Exclude conditions for background blur.
# Fading
fading = true; # Fade windows during opacity changes.
fade-delta = 12; # The time between steps in a fade in milliseconds. (default 10).
fade-in-step = 0.05; # Opacity change between steps while fading in. (default 0.028).
fade-out-step = 0.05; # Opacity change between steps while fading out. (default 0.03).
no-fading-openclose = false; # Fade windows in/out when opening/closing.
# Other
mark-wmwin-focused = true; # Try to detect WM windows and mark them as active.
mark-ovredir-focused = true;
detect-rounded-corners = true;
# Window type settings
wintypes:
{
tooltip = { fade = true; shadow = false; opacity = 0.75; };
};
|
x
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | [global]
font = "Source Code Pro 8"
allow_markup = yes
format = "<b>%s</b>\n%b"
sort = yes
indicate_hidden = yes
alignment = center
bounce_freq = 0
show_age_threshold = 60
word_wrap = yes
ignore_newline = no
geometry = "200x5-6+30"
transparency = 0
idle_threshold = 120
monitor = 0
follow = keyboard
sticky_history = yes
line_height = 0
separator_height = 2
padding = 8
horizontal_padding = 8
separator_color = "#2aa198"
startup_notification = false
# https://github.com/knopwob/dunst/issues/26#issuecomment-36159395
#icon_position = left
#icon_folders = /usr/share/icons/elementary/actions/16/
dmenu = /usr/bin/dmenu -p dunst:
browser = /usr/bin/firefox -new-tab
[frame]
width = 1
color = "#2aa198"
[shortcuts]
close = ctrl+space
close_all = ctrl+shift+space
history = ctrl+grave
context = ctrl+shift+period
[urgency_low]
background = "#002b36"
foreground = "#93a1a1"
timeout = 5
[urgency_normal]
background = "#002b36"
foreground = "#93a1a1"
timeout = 20
[urgency_critical]
background = "#002b36"
foreground = "#93a1a1"
timeout = 20
|
x
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #define bg #32302f
#define fg #ebdbb2
#define blk #282828
#define bblk #928374
#define dred #cc241d
#define red #fb4934
#define dgrn #98971a
#define grn #b8bb26
#define dylw #d79921
#define ylw #fabd2f
#define dblu #458588
#define blu #83a598
#define dmag #b16286
#define mag #d3869b
#define dcyn #689d6a
#define cyn #8ec07c
#define dwht #a89984
#define wht #ebdbb2
rofi.bw: 2
rofi.color-enabled: true
rofi.columns: 1
rofi.eh: 1
rofi.font: Source Code Pro 12
rofi.fullscreen: no
rofi.hide-scrollbar: true
rofi.line-margin: 5
rofi.lines: 3
rofi.separator-style: none
rofi.sidebar-mode: false
rofi.terminal: terminator
rofi.ssh-client: ssh
rofi.ssh-command : {terminal} -e "{ssh-client} {host}"
rofi.color-normal: #20002b36, #839496, #20002b36, #40073642, #93a1a1
rofi.color-urgent: #BF002b36, #BF839496, #BF002b36, #BF073642, #BF93a1a1
rofi.color-active: #BF002b36, #BF839496, #BF002b36, #BF073642, #BF93a1a1
rofi.color-window: #E6002b36, #BF2aa198, #BF2aa198
|
x
Notes
austins dotfiles
requires:
- i3-gaps (or i3 if you disable the gaps lines)
- i3-blocks
- nitrogen
- nm-applet
- urxvt256c
- xcape
- compton
- pidgin
- clipit
- acpi
- dunst
- vimfx for firefox
- stylish for firefox
- rofi (dmenu line in i3 config commented if you like dmenu)
- ffmpeg (used in lock script)
- i3ipc (python2 and python3)
- fontawesome (python2, python3, and system)
- source code pro (system)
- urxvt keyboard-select plugin (install to /usr/lib/urxvt/perl)
- vundle for vim (:BundleInstall on the plugins)