aboutsummaryrefslogtreecommitdiffstats
path: root/i3wm
diff options
context:
space:
mode:
Diffstat (limited to 'i3wm')
-rw-r--r--i3wm/.config/i3/config22
-rw-r--r--i3wm/.config/polybar/config556
-rwxr-xr-xi3wm/.config/polybar/launch.sh19
-rwxr-xr-xi3wm/.local/bin/rofi_goto_workspace4
-rwxr-xr-xi3wm/.local/bin/rofi_moveto_workspace4
-rwxr-xr-xi3wm/.local/bin/rofi_workspace_prompt3
-rwxr-xr-xi3wm/.local/bin/spotifycl207
l---------i3wm/.local/share/config-files/polybar1
8 files changed, 14 insertions, 802 deletions
diff --git a/i3wm/.config/i3/config b/i3wm/.config/i3/config
index 6d27594..57cbaf2 100644
--- a/i3wm/.config/i3/config
+++ b/i3wm/.config/i3/config
@@ -9,8 +9,10 @@
#
# Please see https://i3wm.org/docs/userguide.html for a complete reference!
-exec_always --no-startup-id $HOME/.config/polybar/launch.sh
-exec_always --no-startup-id xautolock -locker "$HOME/.local/bin/lock.sh" -time 60 -detectsleep -notify 10
+exec_always --no-startup-id $HOME/.config/polybar/launch.sh i3
+exec_always --no-startup-id xset s 300 5
+exec_always --no-startup-id xss-lock -n /usr/bin/xsecurelock/dimmer -l -- xsecurelock
+#exec_always --no-startup-id xautolock -locker "$HOME/.local/bin/lock.sh" -time 60 -detectsleep -notify 10
exec --no-startup-id nm-applet
exec --no-startup-id picom
@@ -47,15 +49,16 @@ bindsym $mod+Return exec alacritty #kitty #i3-sensible-terminal
bindsym $mod+Shift+q kill
# start dmenu (a program launcher)
-bindsym $mod+d exec --no-startup-id rofi -show drun
-bindsym $mod+x exec --no-startup-id rofi -show run
+#bindsym $mod+d exec --no-startup-id rofi -show drun
+#bindsym $mod+x exec --no-startup-id rofi -show run
bindsym $mod+Tab exec --no-startup-id rofi -show window
# 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 dmenu_run
+bindsym $mod+d exec --no-startup-id i3-dmenu-desktop
+bindsym $mod+x exec --no-startup-id dmenu_run
# change focus
bindsym $mod+j focus left
@@ -66,14 +69,16 @@ bindsym $mod+semicolon focus right
# alternatively, you can use the cursor keys:
bindsym $mod+Left workspace prev_on_output
bindsym $mod+Shift+Left workspace prev
-bindsym $mod+Shift+j workspace prev
+bindsym $mod+Shift+j workspace prev_on_output
bindsym $mod+Shift+Control+Left move workspace to output left
bindsym $mod+Down focus down
bindsym $mod+Up focus up
+bindsym $mod+o focus output right
+
bindsym $mod+Right workspace next_on_output
bindsym $mod+Shift+Right workspace next
-bindsym $mod+Shift+semicolon workspace next
+bindsym $mod+Shift+semicolon workspace next_on_output
bindsym $mod+Shift+Control+Right move workspace to output right
bindsym $mod+b workspace back_and_forth
@@ -242,7 +247,8 @@ bindsym XF86AudioNext exec playerctl next
bindsym XF86AudioPrev exec playerctl previous
-bindsym $mod+Shift+l exec "xautolock -locknow"
+#bindsym $mod+Shift+l exec "xautolock -locknow"
+bindsym $mod+Shift+l exec "xset s activate"
diff --git a/i3wm/.config/polybar/config b/i3wm/.config/polybar/config
deleted file mode 100644
index ab31469..0000000
--- a/i3wm/.config/polybar/config
+++ /dev/null
@@ -1,556 +0,0 @@
-;==========================================================
-;
-;
-; ██████╗ ██████╗ ██╗ ██╗ ██╗██████╗ █████╗ ██████╗
-; ██╔══██╗██╔═══██╗██║ ╚██╗ ██╔╝██╔══██╗██╔══██╗██╔══██╗
-; ██████╔╝██║ ██║██║ ╚████╔╝ ██████╔╝███████║██████╔╝
-; ██╔═══╝ ██║ ██║██║ ╚██╔╝ ██╔══██╗██╔══██║██╔══██╗
-; ██║ ╚██████╔╝███████╗██║ ██████╔╝██║ ██║██║ ██║
-; ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝
-;
-;
-; To learn more about how to configure Polybar
-; go to https://github.com/jaagr/polybar
-;
-; The README contains alot of information
-;
-;==========================================================
-
-[colors]
-;background = ${xrdb:color0:#222}
-background = #222
-background-alt = #444
-;foreground = ${xrdb:color7:#222}
-foreground = #dfdfdf
-foreground-alt = #555
-primary = #ffb52a
-secondary = #e60053
-alert = #bd2c40
-
-[bar/topbar]
-monitor = ${env:MONITOR:eDP-1}
-width = 100%
-height = 40
-dpi = 96
-;offset-x = 1%
-;offset-y = 1%
-radius = 6.0
-fixed-center = false
-
-background = ${colors.background}
-foreground = ${colors.foreground}
-
-line-size = 3
-line-color = #f00
-
-border-size = 10
-border-bottom-size = 0
-border-color = #00000000
-
-padding-left = 2
-padding-right = 2
-
-font-0 = fixed:pixelsize=10;1
-font-1 = unifont:fontformat=truetype:size=8:antialias=false;0
-font-2 = siji:pixelsize=10;1
-font-3 = "Font Awesome 5 Brands:style=Regular:pixelsize=8;1"
-font-4 = "Font Awesome 5 Free:style=Regular:pixelsize=8;1"
-font-5 = "Font Awesome 5 Free:style=Solid:pixelsize=8;1"
-
-tray-position = right
-tray-padding = 2
-;tray-transparent = true
-;tray-background = #0063ff
-tray-scale = 1
-tray-detached = false
-
-wm-restack = i3
-override-redirect = false
-
-scroll-up = i3wm-wsnext
-scroll-down = i3wm-wsprev
-cursor-click = pointer
-cursor-scroll = ns-resize
-
-module-margin-left = 2
-module-margin-right = 2
-modules-left = hostname xwindow
-modules-center =
-modules-right = filesystem backlight pulseaudio xkeyboard memory cpu wlan eth ethvpn battery temperature
-
-[bar/topbar-second]
-monitor = ${env:MONITOR:eDP-1}
-width = 100%
-height = 40
-dpi = 96
-;offset-x = 1%
-offset-y = 50
-radius = 6.0
-fixed-center = true
-
-background = ${colors.background}
-foreground = ${colors.foreground}
-
-line-size = 3
-line-color = #f00
-
-border-size = 10
-border-top-size = 0
-border-bottom-size = 0
-border-color = #00000000
-
-padding-left = 2
-padding-right = 2
-
-font-0 = fixed:pixelsize=10;1
-font-1 = unifont:fontformat=truetype:size=8:antialias=false;0
-font-2 = siji:pixelsize=10;1
-font-3 = "Font Awesome 5 Brands:style=Regular:pixelsize=8;1"
-font-4 = "Font Awesome 5 Free:style=Regular:pixelsize=8;1"
-font-5 = "Font Awesome 5 Free:style=Solid:pixelsize=8;1"
-
-wm-restack = i3
-override-redirect = false
-
-scroll-up = i3wm-wsnext
-scroll-down = i3wm-wsprev
-cursor-click = pointer
-cursor-scroll = ns-resize
-
-module-margin-left = 2
-module-margin-right = 2
-modules-left = i3
-modules-center = spotify
-modules-right = date
-
-[module/hostname]
-type = custom/script
-interval = 256
-format = "<label> "
-"format-prefix = "  "
-format-prefix = " ƸӜƷ "
-format-prefix-foreground = ${colors.secondary}
-format-padding = 0
-exec = echo "$(uname -n)"
-
-[module/spotify]
-type = custom/script
-exec = spotifycl status
-tail = true
-format = <label>
-format-foreground = ${colors.foreground-alt}
-format-underline = ${colors.primary}
-click-right = playerctl play-pause
-click-left = playerctl play-pause
-click-middle = playerctl next
-scroll-up = playerctl next
-scroll-down = playerctl previous
-label-maxlen = 120
-label-ellipsis = true
-
-[module/xwindow]
-type = internal/xwindow
-label = %title:0:40:...%
-
-[module/xkeyboard]
-type = internal/xkeyboard
-blacklist-0 = num lock
-
-format = <label-layout>
-format-prefix = " "
-format-prefix-foreground = ${colors.foreground}
-format-prefix-underline = ${colors.secondary}
-
-label-layout = %name%
-label-layout-underline = ${colors.secondary}
-
-label-indicator-padding = 2
-label-indicator-margin = 1
-label-indicator-background = ${colors.secondary}
-label-indicator-underline = ${colors.secondary}
-
-[module/filesystem]
-type = internal/fs
-interval = 25
-
-mount-0 = /
-
-label-mounted =  %{F#0a81f5}%mountpoint%%{F-}: %percentage_used%%
-label-unmounted = %mountpoint% not mounted
-label-unmounted-foreground = ${colors.foreground-alt}
-
-[module/bspwm]
-type = internal/bspwm
-
-label-focused = %index%
-label-focused-background = ${colors.background-alt}
-label-focused-underline= ${colors.primary}
-label-focused-padding = 2
-
-label-occupied = %index%
-label-occupied-padding = 2
-
-label-urgent = %index%!
-label-urgent-background = ${colors.alert}
-label-urgent-padding = 2
-
-label-empty = %index%
-label-empty-foreground = ${colors.foreground-alt}
-label-empty-padding = 2
-
-; Separator in between workspaces
-; label-separator = |
-
-[module/i3]
-type = internal/i3
-; Only show workspaces on the same output as the bar
-pin-workspaces = true
-strip-wsnumbers = true
-format = <label-state> <label-mode>
-index-sort = true
-wrapping-scroll = false
-
-label-mode = %mode%
-label-mode-padding = 2
-label-mode-foreground = #000
-label-mode-background = ${colors.primary}
-
-; focused = Active workspace on focused monitor
-label-focused = %name%
-label-focused-background = ${module/bspwm.label-focused-background}
-label-focused-underline = ${module/bspwm.label-focused-underline}
-label-focused-padding = ${module/bspwm.label-focused-padding}
-
-; unfocused = Inactive workspace on any monitor
-label-unfocused = %name%
-label-unfocused-padding = ${module/bspwm.label-occupied-padding}
-
-; visible = Active workspace on unfocused monitor
-label-visible = %name%
-label-visible-background = ${self.label-focused-background}
-label-visible-underline = ${self.label-focused-underline}
-label-visible-padding = ${self.label-focused-padding}
-
-; urgent = Workspace with urgency hint set
-label-urgent = %name%
-label-urgent-background = ${module/bspwm.label-urgent-background}
-label-urgent-padding = ${module/bspwm.label-urgent-padding}
-
-; Separator in between workspaces
-; label-separator = |
-
-[module/line-l]
-type = custom/text
-content = "____[ "
-content-foreground = ${colors.primary}
-
-[module/line-r]
-type = custom/text
-content = " ]____"
-content-foreground = ${colors.primary}
-
-[module/mpd]
-type = internal/mpd
-format-online = <label-song> <icon-prev> <icon-stop> <toggle> <icon-next>
-
-icon-prev = 
-icon-stop = 
-icon-play = 
-icon-pause = 
-icon-next = 
-
-label-song-maxlen = 25
-label-song-ellipsis = true
-
-[module/backlight]
-type = internal/backlight
-card = intel_backlight
-format = <label> <ramp>
-label = ""
-
-ramp-0 = 🌕
-ramp-1 = 🌔
-ramp-2 = 🌓
-ramp-3 = 🌒
-ramp-4 = 🌑
-
-bar-width = 10
-bar-indicator = |
-bar-indicator-foreground = #fff
-bar-indicator-font = 2
-bar-fill = ─
-bar-fill-font = 2
-bar-fill-foreground = #9f78e1
-bar-empty = ─
-bar-empty-font = 2
-bar-empty-foreground = ${colors.foreground-alt}
-
-[module/xbacklight]
-type = internal/xbacklight
-
-format = <label> <bar>
-label = 
-
-bar-width = 10
-bar-indicator = |
-bar-indicator-foreground = #fff
-bar-indicator-font = 2
-bar-fill = ─
-bar-fill-font = 2
-bar-fill-foreground = #9f78e1
-bar-empty = ─
-bar-empty-font = 2
-bar-empty-foreground = ${colors.foreground-alt}
-
-[module/backlight-acpi]
-inherit = module/xbacklight
-type = internal/backlight
-card = intel_backlight
-
-[module/cpu]
-type = internal/cpu
-interval = 2
-format-prefix = " "
-format-prefix-foreground = ${colors.foreground}
-format-underline = #f90000
-label = %percentage:2%%
-
-[module/memory]
-type = internal/memory
-interval = 2
-format-prefix = " "
-format-prefix-foreground = ${colors.foreground}
-format-underline = #4bffdc
-label = %percentage_used%%
-
-[module/wlan]
-type = internal/network
-interface = wlp3s0
-interval = 3.0
-accumulate-stats = true
-
-format-connected-prefix = " "
-format-connected = <label-connected>
-format-connected-underline = #9f78e1
-label-connected = %essid% %local_ip% ↓%downspeed% ↑%upspeed% (%signal%)
-
-format-disconnected =
-;format-disconnected = <label-disconnected>
-;format-disconnected-underline = ${self.format-connected-underline}
-;label-disconnected = %ifname% disconnected
-;label-disconnected-foreground = ${colors.foreground-alt}
-
-ramp-signal-0 = 
-ramp-signal-foreground = ${colors.foreground-alt}
-
-[module/eth]
-type = internal/network
-interface = eno1
-interval = 3.0
-accumulate-stats = true
-
-format-connected-underline = #55aa55
-format-connected-prefix = " "
-format-connected-prefix-foreground = ${colors.foreground}
-label-connected = %local_ip% ↓%downspeed% ↑%upspeed% ↕%linkspeed%
-
-format-disconnected =
-;format-disconnected = <label-disconnected>
-;format-disconnected-underline = ${self.format-connected-underline}
-;label-disconnected = %ifname% disconnected
-;label-disconnected-foreground = ${colors.foreground-alt}
-
-[module/ethvpn]
-type = internal/network
-interface = tun0
-interval = 3.0
-accumulate-stats = true
-
-format-connected-underline = #55aa55
-format-connected-prefix = ""
-format-connected-prefix-foreground = ${colors.foreground}
-label-connected = %local_ip% %local_ip6%
-
-format-disconnected =
-;format-disconnected = <label-disconnected>
-;format-disconnected-underline = ${self.format-connected-underline}
-label-disconnected = %ifname% disconnected
-;label-disconnected-foreground = ${colors.foreground-alt}
-
-[module/date]
-type = internal/date
-interval = 1
-
-date =
-date-alt = " %Y-%m-%d"
-
-time = %H:%M:%S
-time-alt = %H:%M:%S
-
-format-prefix = 
-format-prefix-foreground = ${colors.foreground}
-format-underline = #0a6cf5
-
-label = %date% %time%
-
-[module/pulseaudio]
-type = internal/pulseaudio
-
-format-volume = <label-volume> <bar-volume>
-label-volume = %percentage%%
-label-volume-foreground = ${root.foreground}
-
-label-muted = 
-label-muted-foreground = #666
-
-bar-volume-width = 10
-bar-volume-foreground-0 = #55aa55
-bar-volume-foreground-1 = #55aa55
-bar-volume-foreground-2 = #55aa55
-bar-volume-foreground-3 = #55aa55
-bar-volume-foreground-4 = #55aa55
-bar-volume-foreground-5 = #f5a70a
-bar-volume-foreground-6 = #ff5555
-bar-volume-gradient = false
-bar-volume-indicator = |
-bar-volume-indicator-font = 2
-bar-volume-fill = ─
-bar-volume-fill-font = 2
-bar-volume-empty = ─
-bar-volume-empty-font = 2
-bar-volume-empty-foreground = ${colors.foreground-alt}
-
-ramp-volume-0 = 
-ramp-volume-1 = 
-
-[module/alsa]
-type = internal/alsa
-
-format-volume = <label-volume> <bar-volume>
-label-volume = VOL
-label-volume-foreground = ${root.foreground}
-
-format-muted-foreground = ${colors.foreground-alt}
-label-muted = 
-
-bar-volume-width = 10
-bar-volume-foreground-0 = #55aa55
-bar-volume-foreground-1 = #55aa55
-bar-volume-foreground-2 = #55aa55
-bar-volume-foreground-3 = #55aa55
-bar-volume-foreground-4 = #55aa55
-bar-volume-foreground-5 = #f5a70a
-bar-volume-foreground-6 = #ff5555
-bar-volume-gradient = false
-bar-volume-indicator = |
-bar-volume-indicator-font = 2
-bar-volume-fill = ─
-bar-volume-fill-font = 2
-bar-volume-empty = ─
-bar-volume-empty-font = 2
-bar-volume-empty-foreground = ${colors.foreground-alt}
-
-[module/battery]
-type = internal/battery
-time-format = %H:%M
-battery = BAT0
-adapter = AC
-full-at = 89
-
-format-charging = <animation-charging> <label-charging>
-format-charging-underline = #ffb52a
-label-charging = %percentage%% | %time%
-
-format-discharging = <animation-discharging> <label-discharging>
-format-discharging-underline = ${self.format-charging-underline}
-label-discharging = %percentage%% | %time%
-
-format-full = 
-format-full-foreground = ${colors.foreground}
-format-full-underline = ${self.format-charging-underline}
-
-ramp-capacity-0 = 
-ramp-capacity-1 = 
-ramp-capacity-2 = 
-ramp-capacity-3 = 
-ramp-capacity-4 = 
-ramp-capacity-foreground = ${colors.foreground-alt}
-
-animation-charging-0 = 
-animation-charging-1 = 
-animation-charging-2 = 
-animation-charging-3 = 
-animation-charging-4 = 
-animation-charging-foreground = ${colors.foreground}
-animation-charging-framerate = 750
-
-animation-discharging-0 = 
-animation-discharging-1 = 
-animation-discharging-2 = 
-animation-discharging-3 = 
-animation-discharging-4 = 
-animation-discharging-foreground = ${colors.foreground}
-animation-discharging-framerate = 1000
-
-[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}
-
-[module/powermenu]
-type = custom/menu
-
-expand-right = true
-
-format-spacing = 1
-
-label-open = 
-label-open-foreground = ${colors.secondary}
-label-close = cancel
-label-close-foreground = ${colors.secondary}
-label-separator = |
-label-separator-foreground = ${colors.foreground-alt}
-
-menu-0-0 = reboot
-menu-0-0-exec = menu-open-1
-menu-0-1 = power off
-menu-0-1-exec = menu-open-2
-menu-0-2 = sleep
-menu-0-2-exec = systemctl suspend
-
-menu-1-0 = cancel
-menu-1-0-exec = menu-open-0
-menu-1-1 = reboot
-menu-1-1-exec = sudo reboot
-
-menu-2-0 = power off
-menu-2-0-exec = sudo poweroff
-menu-2-1 = cancel
-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
diff --git a/i3wm/.config/polybar/launch.sh b/i3wm/.config/polybar/launch.sh
deleted file mode 100755
index c45e085..0000000
--- a/i3wm/.config/polybar/launch.sh
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/env sh
-
-# Terminate already running bar instances
-killall -q polybar
-
-# Wait until the processes have been shut down
-while pgrep -u $UID -x polybar >/dev/null; do sleep 1; done
-
-
-# Launch bar1 and bar2
-MONITOR=$(polybar -m|tail -n1|sed -e 's/:.*$//g') polybar topbar &
-sleep 1
-MONITORS=$(polybar -m|sed -e 's/:.*$//g')
-while read -r monitor; do
- MONITOR=$monitor polybar topbar-second &
- sleep 1
-done <<< $MONITORS
-
-echo "Bars launched..."
diff --git a/i3wm/.local/bin/rofi_goto_workspace b/i3wm/.local/bin/rofi_goto_workspace
deleted file mode 100755
index 35e8762..0000000
--- a/i3wm/.local/bin/rofi_goto_workspace
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/usr/bin/env bash
-
-NAME=`rofi_workspace_prompt`
-i3-msg workspace $NAME
diff --git a/i3wm/.local/bin/rofi_moveto_workspace b/i3wm/.local/bin/rofi_moveto_workspace
deleted file mode 100755
index 9cc0b9d..0000000
--- a/i3wm/.local/bin/rofi_moveto_workspace
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/usr/bin/env bash
-
-NAME=`rofi_workspace_prompt`
-i3-msg move container to workspace $NAME
diff --git a/i3wm/.local/bin/rofi_workspace_prompt b/i3wm/.local/bin/rofi_workspace_prompt
deleted file mode 100755
index f59d1fa..0000000
--- a/i3wm/.local/bin/rofi_workspace_prompt
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env bash
-
-echo `i3-msg -t get_workspaces | jq '.[].name' | sed 's/\"//g' | rofi -dmenu`
diff --git a/i3wm/.local/bin/spotifycl b/i3wm/.local/bin/spotifycl
deleted file mode 100755
index ffee9f0..0000000
--- a/i3wm/.local/bin/spotifycl
+++ /dev/null
@@ -1,207 +0,0 @@
-#!/usr/bin/env python
-
-# MIT License
-#
-# Copyright (c) 2018 Andreas Backx
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in all
-# copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-# SOFTWARE.
-
-
-import os
-import socket
-import sys
-import time
-import traceback
-from concurrent.futures import ThreadPoolExecutor
-
-import click
-import dbus
-import dbus.mainloop.glib
-import spotipy
-import spotipy.util as util
-from dbus.mainloop.glib import DBusGMainLoop
-from gi.repository import GLib
-from spotipy import SpotifyException
-from spotipy.oauth2 import SpotifyClientCredentials
-
-inactive_color = '%{F#6E6E6E}'
-active_color = '%{F#CECECE}'
-default_color = '%{F-}'
-
-server_address = '/tmp/spotifycl-socket'
-
-
-class Spotify:
-
- SPOTIFY_BUS = 'org.mpris.MediaPlayer2.spotify'
- SPOTIFYD_BUS = 'org.mpris.MediaPlayer2.spotifyd'
- SPOTIFY_OBJECT_PATH = '/org/mpris/MediaPlayer2'
-
- PLAYER_INTERFACE = 'org.mpris.MediaPlayer2.Player'
- PROPERTIES_INTERFACE = 'org.freedesktop.DBus.Properties'
-
- SAVE_REMOVE = b'save'
-
- def __init__(self):
- DBusGMainLoop(set_as_default=True)
- self.session_bus = dbus.SessionBus()
- self.last_output = ''
- self.empty_output = True
-
- # Last shown metadata
- self.last_title = None
- # Whether the current song is added to the library
- self.saved_track = False
- # Whether to ignore the update
- self.ignore = False
-
- def monitor(self):
- self.setup_properties_changed()
- self.freedesktop = self.session_bus.get_object(
- "org.freedesktop.DBus",
- "/org/freedesktop/DBus"
- )
- self.freedesktop.connect_to_signal(
- "NameOwnerChanged",
- self.on_name_owner_changed,
- arg0=self.SPOTIFYD_BUS
- )
-
- executor = ThreadPoolExecutor(max_workers=2)
- executor.submit(self._start_glib_loop)
- executor.submit(self._start_server)
-
- def _start_glib_loop(self):
- loop = GLib.MainLoop()
- loop.run()
-
- def _start_server(self):
- try:
- os.unlink(server_address)
- except OSError:
- if os.path.exists(server_address):
- raise
- sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
- sock.bind(server_address)
- sock.listen(5)
-
- @property
- def metadata_status(self):
- spotify_properties = dbus.Interface(
- self.spotify,
- dbus_interface=Spotify.PROPERTIES_INTERFACE
- )
- metadata = spotify_properties.Get(
- Spotify.PLAYER_INTERFACE,
- 'Metadata'
- )
- playback_status = spotify_properties.Get(
- Spotify.PLAYER_INTERFACE,
- 'PlaybackStatus'
- )
- return metadata, playback_status
-
- def output(self, line):
- if not line:
- self.empty_output = True
- if line != self.last_output:
- print(line, flush=True)
- self.last_output = line
-
- def setup_spotify(self):
- try:
- self.spotify = self.session_bus.get_object(
- Spotify.SPOTIFY_BUS,
- Spotify.SPOTIFY_OBJECT_PATH
- )
- except dbus.DBusException:
- self.spotify = self.session_bus.get_object(Spotify.SPOTIFYD_BUS, Spotify.SPOTIFY_OBJECT_PATH)
-
- def setup_properties_changed(self):
- try:
- self.setup_spotify()
- self.spotify.connect_to_signal(
- 'PropertiesChanged',
- self.on_properties_changed
- )
-
- if self.empty_output:
- metadata, playback_status = self.metadata_status
- self.output_playback_status(
- data={
- 'Metadata': metadata,
- 'PlaybackStatus': playback_status,
- }
- )
-
- except dbus.DBusException:
- self.output('')
-
- def output_playback_status(self, data, retry=False):
- if self.ignore:
- return
-
- metadata = data['Metadata']
- artists = metadata['xesam:artist']
- artist = artists[0] if artists else None
-
- if not artist:
- self.output('')
- return
-
- title = metadata['xesam:title']
- playback_status = data['PlaybackStatus']
- same_song = title == self.last_title
-
- color = active_color if playback_status == 'Playing' else inactive_color
- # divider = '+' if same_song and self.saved_track else '-'
- self.output(f'{color}{artist} - {title}{default_color}')
-
- if not same_song:
- self.last_title = title
-
- def on_properties_changed(self, interface, data, *args, **kwargs):
- self.output_playback_status(data)
-
- def on_name_owner_changed(self, name, old_owner, new_owner):
- if name == self.SPOTIFY_BUS:
- if new_owner:
- # Spotify was opened.
- self.setup_properties_changed()
- else:
- # Spotify was closed.
- self.spotify = None
- self.output('')
-
-
-@click.group()
-def cli():
- """Script for listening to Spotify over dbus and adding tracks to your library."""
- pass
-
-
-@cli.command()
-def status():
- """Follow the status of the currently playing song on Spotify."""
- spotify = Spotify()
- spotify.monitor()
-
-
-if __name__ == '__main__':
- cli()
diff --git a/i3wm/.local/share/config-files/polybar b/i3wm/.local/share/config-files/polybar
deleted file mode 120000
index 87fad9e..0000000
--- a/i3wm/.local/share/config-files/polybar
+++ /dev/null
@@ -1 +0,0 @@
-../../../.config/polybar/config \ No newline at end of file