Revamp host output config; add swaylock config

This commit is contained in:
Adam Gausmann 2023-05-12 02:33:45 -05:00
parent 813953cb28
commit a5c53506c6
8 changed files with 106 additions and 44 deletions

View file

@ -1,15 +1,31 @@
is-virtual = false
base16-scheme = "seti"
wireless = ["wlp5s0"] wireless = ["wlp5s0"]
ethernet = ["enp6s0"] ethernet = ["enp6s0"]
disks = ["/"]
# hwmon2 = k10temp, temp1 = Tctl # hwmon2 = k10temp, temp1 = Tctl
temperature-path = "/sys/class/hwmon/hwmon2/temp1_input" temperature-path = "/sys/class/hwmon/hwmon2/temp1_input"
outputs = [ [[outputs]]
"\"ASUSTek COMPUTER INC VG258 M1LMQS004947\" position 0 1080 mode 1920x1080@165Hz bg ~/.local/share/backgrounds/adventurer/l.jpg fill", match = "*"
"\"BNQ BenQ GL2580 46J02196SL0\" position 1920 1080 mode 1920x1080@60Hz bg ~/.local/share/backgrounds/adventurer/r.jpg fill", background = ["~/.local/share/backgrounds/adventurer/full.jpg", "fill"]
"\"BNQ BenQ GL2580 46J02151SL0\" position 960 0 mode 1920x1080@60Hz bg ~/.local/share/backgrounds/adventurer/t.jpg fill ",
"\"Pioneer Electronic Corporation AV Receiver Unknown\" mode 3840x2160@60Hz scale 2.0 bg ~/.local/share/backgrounds/adventurer/full.jpg fill", [[outputs]]
] match = "ASUSTek COMPUTER INC VG258 M1LMQS004947"
default-background = false position = [0, 1080]
mode = "1920x1080@165Hz"
background = ["~/.local/share/backgrounds/adventurer/l.jpg", "fill"]
[[outputs]]
match = "BNQ BenQ GL2580 46J02196SL0"
position = [1920, 1080]
mode = "1920x1080@60Hz"
background = ["~/.local/share/backgrounds/adventurer/r.jpg", "fill"]
[[outputs]]
match = "BNQ BenQ GL2580 46J02151SL0"
position = [960, 0]
mode = "1920x1080@60Hz"
background = ["~/.local/share/backgrounds/adventurer/t.jpg", "fill"]
[[outputs]]
match = "Pioneer Electronic Corporation AV Receiver Unknown"
mode = "3840x2160@60Hz"
scale = 2

View file

@ -1,11 +1,11 @@
is-virtual = false
base16-scheme = "seti"
wireless = ["wlp0s20f3"] wireless = ["wlp0s20f3"]
ethernet = ["eno1"] ethernet = ["eno1"]
disks = ["/"]
outputs = [ [[outputs]]
"* bg ~/.local/share/backgrounds/concord/full.jpg fill", match = "*"
"\"Pioneer Electronic Corporation AV Receiver Unknown\" mode 3840x2160@60Hz scale 2.0", background = ["~/.local/share/backgrounds/concord/full.jpg", "fill"]
]
default-background = false [[outputs]]
match = "Pioneer Electronic Corporation AV Receiver Unknown"
mode = "3840x2160@60Hz"
scale = 2

10
hosts/default.toml Normal file
View file

@ -0,0 +1,10 @@
is-virtual = false
base16-scheme = "seti"
disks = ["/"]
system-font = "Fira Sans"
system-mono-font = "Fira Mono"
#temperature-path = ""
[[outputs]]
match = "*"
background = ["~/.local/share/backgrounds/sway-dark-1920x1080.png", "fill"]

View file

@ -1,10 +1,7 @@
base16-scheme = "seti"
wireless = ["wlp4s0"] wireless = ["wlp4s0"]
ethernet = ["enp2s0"] ethernet = ["enp2s0"]
disks = ["/"]
temperature-path = "/sys/class/hwmon/hwmon5/temp1_input" temperature-path = "/sys/class/hwmon/hwmon5/temp1_input"
outputs = [ [[outputs]]
"* bg ~/.local/share/backgrounds/faithful/full.jpg fill", match = "*"
] background = ["~/.local/share/backgrounds/faithful/full.jpg", "fill"]
default-background = false

View file

@ -1,10 +0,0 @@
base16-scheme = "seti"
wireless = ["wlan0"]
ethernet = ["eth0"]
disks = ["/"]
outputs = [
"HDMI-A-1 mode 3840x2160@30Hz scale 2.0",
#TODO when HDMI cable arrives
#"name HDMI-A-1 mode 3840x2160@60Hz scale 2.0",
]

View file

@ -4,6 +4,7 @@ import argparse
import os import os
import shutil import shutil
import socket import socket
import subprocess
import sys import sys
from functools import partial from functools import partial
from pathlib import Path from pathlib import Path
@ -79,15 +80,48 @@ def main():
raw_dir = args.dotfiles / 'raw' raw_dir = args.dotfiles / 'raw'
templates_dir = args.dotfiles / 'templates' templates_dir = args.dotfiles / 'templates'
include_dir = args.dotfiles / 'include' include_dir = args.dotfiles / 'include'
default_host_filename = args.dotfiles / 'hosts' / 'default.toml'
host_filename = args.dotfiles / 'hosts' / '{}.toml'.format(args.hostname) host_filename = args.dotfiles / 'hosts' / '{}.toml'.format(args.hostname)
with open(default_host_filename) as host_file:
host_config = toml.load(host_file)
if host_filename.exists(): if host_filename.exists():
with open(host_filename) as host_file: with open(host_filename) as host_file:
host_config = toml.load(host_file) host_config.update(toml.load(host_file))
else:
host_config = {}
host_config['name'] = args.hostname host_config['name'] = args.hostname
# Preprocess output configs for sway
for output in host_config['outputs']:
# Generate config lines for sway template
lines = []
for key in output:
if key == 'match':
continue
if isinstance(output[key], list):
val = ' '.join(repr(elem) for elem in output[key])
else:
val = repr(output[key])
lines.append(f'{key} {val}')
output['sway-lines'] = lines
# Attempt to resolve device names for swaylock template
# (Workaround https://github.com/swaywm/swaylock/issues/114)
#
# This will only work if this is run on the target host
# and if sway is running, but that is usually the case...
if output['match'] != '*':
get_outputs = subprocess.check_output(
['swaymsg', '-t', 'get_outputs', '-p'],
).decode('utf-8')
for line in get_outputs.splitlines():
# Line format: Output <device> '<match identifier>'
if line.startswith('Output') and output['match'] in line:
output['device'] = line.split()[1]
break
lookup = mako.lookup.TemplateLookup( lookup = mako.lookup.TemplateLookup(
directories=[ directories=[
str(templates_dir), str(templates_dir),

View file

@ -38,12 +38,12 @@ client.placeholder $base01 $base01 $base05 $base01 $base01
client.background $base07 client.background $base07
% for output in host.get('outputs', []): % for output in host.get('outputs', []):
output ${output} output ${repr(output['match'])} {
% for line in output['sway-lines']:
${line}
% endfor
}
% endfor % endfor
% if host.get('default-background', True):
output * bg ${home}/.local/share/backgrounds/sway-dark-1920x1080.png fill
% endif
gaps inner 8 gaps inner 8
@ -63,7 +63,7 @@ exec swayidle
exec dunst exec dunst
exec udiskie exec udiskie
font pango:Fira Mono 8 font pango:${host['system-mono-font']} 8
focus_follows_mouse no focus_follows_mouse no
floating_modifier $mod floating_modifier $mod
@ -155,7 +155,7 @@ bindsym XF86AudioMute exec pactl set-sink-mute @DEFAULT_SINK@ toggle
bar { bar {
tray_output none tray_output none
status_command i3status status_command i3status
font pango:Fira Mono 10 font pango:${host['system-mono-font']} 10
${get_base16('i3', 'bar-colors')} ${get_base16('i3', 'bar-colors')}

View file

@ -0,0 +1,15 @@
ignore-empty-password
indicator-idle-visible
color=000000
scaling=fill
font=${host['system-font']}
% for output in host['outputs']:
% if 'background' in output and (output['match'] == '*' or 'device' in output):
% if output['match'] == '*':
image=${output['background'][0]}
% else:
image=${output['device']}:${output['background'][0]}
% endif
% endif
% endfor