1
0
Fork 0

feat: add all configs

This commit is contained in:
Oliver Ladner 2025-10-05 14:14:45 +02:00
commit 0267199f6e
23 changed files with 1673 additions and 0 deletions

View file

@ -0,0 +1,63 @@
{
"$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
"logo": {
"source": "arch_small", // fastfetch --list-logos or --print-logos
"width": 5,
"padding": {
"top": 1
}
},
"display": {
"separator": " "
},
"modules": [
"break",
// "title",
{
"type": "terminal",
"key": "TERM",
// "keyColor": "33"
},
{
"type": "kernel",
"key": "KRNL",
// "keyColor": "33"
},
// {
// "type": "host",
// "format": "MINIX {2} {3}",
// "key": "host ",
// // "keyColor": "33"
// },
{
"type": "wifi",
"format": "{7} ({4}, {13} GHz)",
"key": "WIFI",
// "keyColor": "33"
},
{
"type": "packages",
"format": "{}",
"key": "PKGS",
// "keyColor": "33"
},
{
"type": "uptime",
// "format": "{1}d{2}h{3}m",
"format": "{10}",
"key": "UPTM",
// "keyColor": "33"
},
{
"type": "memory",
"key": "MEMR",
// "keyColor": "33"
},
{
"type": "swap",
"key": "SWAP",
// "keyColor": "33" // = color3
},
"break"
]
}

View file

@ -0,0 +1,24 @@
<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
<alias>
<family>sans-serif</family>
<prefer>
<family>SF Pro Text</family>
</prefer>
</alias>
<alias>
<family>serif</family>
<prefer>
<family>SF Pro Text</family>
</prefer>
</alias>
<alias>
<family>monospace</family>
<prefer>
<family>BerkeleyMono Nerd Font Mono</family>
</prefer>
</alias>
</fontconfig>

View file

@ -0,0 +1,64 @@
# Beware! This file is rewritten by htop when settings are changed in the interface.
# The parser is also very primitive, and not human-friendly.
htop_version=3.4.1-3.4.1
config_reader_min_version=3
fields=0 48 17 18 38 39 40 2 46 47 49 1
hide_kernel_threads=1
hide_userland_threads=0
hide_running_in_container=0
shadow_other_users=1
show_thread_names=0
show_program_path=1
highlight_base_name=1
highlight_deleted_exe=1
shadow_distribution_path_prefix=0
highlight_megabytes=1
highlight_threads=1
highlight_changes=0
highlight_changes_delay_secs=5
find_comm_in_cmdline=1
strip_exe_from_cmdline=1
show_merged_command=0
header_margin=1
screen_tabs=1
detailed_cpu_time=0
cpu_count_from_one=0
show_cpu_usage=1
show_cpu_frequency=1
show_cpu_temperature=1
degree_fahrenheit=0
show_cached_memory=1
update_process_names=0
account_guest_in_cpu_meter=0
color_scheme=0
enable_mouse=1
delay=15
hide_function_bar=0
header_layout=two_50_50
column_meters_0=AllCPUs Memory Swap
column_meter_modes_0=1 1 1
column_meters_1=Tasks LoadAverage GPU
column_meter_modes_1=2 2 1
tree_view=1
sort_key=46
tree_sort_key=46
sort_direction=-1
tree_sort_direction=-1
tree_view_always_by_pid=0
all_branches_collapsed=0
screen:Main=PID USER PRIORITY NICE M_VIRT M_RESIDENT M_SHARE STATE PERCENT_CPU PERCENT_MEM TIME Command
.sort_key=PERCENT_CPU
.tree_sort_key=PERCENT_CPU
.tree_view_always_by_pid=0
.tree_view=1
.sort_direction=-1
.tree_sort_direction=-1
.all_branches_collapsed=0
screen:I/O=PID USER IO_PRIORITY IO_RATE IO_READ_RATE IO_WRITE_RATE PERCENT_SWAP_DELAY PERCENT_IO_DELAY Command
.sort_key=IO_READ_RATE
.tree_sort_key=PID
.tree_view_always_by_pid=0
.tree_view=0
.sort_direction=-1
.tree_sort_direction=1
.all_branches_collapsed=0

View file

@ -0,0 +1,29 @@
sort=-time
layer=top
background-color=#162422
text-color=#53847d
border-color=#000055
border-size=4
border-radius=0
padding=15
width=450
icons=0
markup=1
default-timeout=7000
ignore-timeout=1
font=BerkeleyMono Nerd Font Mono 12
format=<b>%s</b> <i>%a</i>\n%b
[urgency=low]
background-color=#5a5a5a
text-color=#a3a3a3
border-color=#00000000
[urgency=critical]
background-color=#720000
text-color=#f0f0f0
border-color=#00000000
# highlight notifications from scripts
[app-name=script]
border-color=#000099

View file

@ -0,0 +1,371 @@
# Daemon config file for PipeWire version "1.4.8" #
#
# Copy and edit this file in /etc/pipewire for system-wide changes
# or in ~/.config/pipewire for local changes.
#
# It is also possible to place a file with an updated section in
# /etc/pipewire/pipewire.conf.d/ for system-wide changes or in
# ~/.config/pipewire/pipewire.conf.d/ for local changes.
#
context.properties = {
## Configure properties in the system.
#library.name.system = support/libspa-support
#context.data-loop.library.name.system = support/libspa-support
#support.dbus = true
#link.max-buffers = 64
link.max-buffers = 16 # version < 3 clients can't handle more
#mem.warn-mlock = false
#mem.allow-mlock = true
#mem.mlock-all = false
#clock.power-of-two-quantum = true
#log.level = 2
#cpu.zero.denormals = false
#loop.rt-prio = -1 # -1 = use module-rt prio, 0 disable rt
#loop.class = data.rt
#thread.affinity = [ 0 1 ] # optional array of CPUs
#context.num-data-loops = 1 # -1 = num-cpus, 0 = no data loops
#
#context.data-loops = [
# { loop.rt-prio = -1
# loop.class = [ data.rt audio.rt ]
# #library.name.system = support/libspa-support
# thread.name = data-loop.0
# #thread.affinity = [ 0 1 ] # optional array of CPUs
# }
#]
core.daemon = true # listening for socket connections
core.name = pipewire-0 # core name and socket name
## Properties for the DSP configuration.
#default.clock.rate = 48000
#default.clock.allowed-rates = [ 48000 ]
#default.clock.quantum = 1024
#default.clock.min-quantum = 32
#default.clock.max-quantum = 2048
#default.clock.quantum-limit = 8192
#default.clock.quantum-floor = 4
#default.video.width = 640
#default.video.height = 480
#default.video.rate.num = 25
#default.video.rate.denom = 1
#
#settings.check-quantum = false
#settings.check-rate = false
}
context.properties.rules = [
{ matches = [ { cpu.vm.name = !null } ]
actions = {
update-props = {
# These overrides are only applied when running in a vm.
default.clock.min-quantum = 1024
}
}
}
]
context.spa-libs = {
#<factory-name regex> = <library-name>
#
# Used to find spa factory names. It maps an spa factory name
# regular expression to a library name that should contain
# that factory.
#
audio.convert.* = audioconvert/libspa-audioconvert
avb.* = avb/libspa-avb
api.alsa.* = alsa/libspa-alsa
api.v4l2.* = v4l2/libspa-v4l2
api.libcamera.* = libcamera/libspa-libcamera
api.bluez5.* = bluez5/libspa-bluez5
api.vulkan.* = vulkan/libspa-vulkan
api.jack.* = jack/libspa-jack
support.* = support/libspa-support
video.convert.* = videoconvert/libspa-videoconvert
#filter.graph = filter-graph/libspa-filter-graph
#videotestsrc = videotestsrc/libspa-videotestsrc
#audiotestsrc = audiotestsrc/libspa-audiotestsrc
}
context.modules = [
#{ name = <module-name>
# ( args = { <key> = <value> ... } )
# ( flags = [ ( ifexists ) ( nofail ) ] )
# ( condition = [ { <key> = <value> ... } ... ] )
#}
#
# Loads a module with the given parameters.
# If ifexists is given, the module is ignored when it is not found.
# If nofail is given, module initialization failures are ignored.
# If condition is given, the module is loaded only when the context
# properties all match the match rules.
#
# Uses realtime scheduling to boost the audio thread priorities. This uses
# RTKit if the user doesn't have permission to use regular realtime
# scheduling. You can also clamp utilisation values to improve scheduling
# on embedded and heterogeneous systems, e.g. Arm big.LITTLE devices.
# use module.rt.args = { ... } to override the arguments.
{ name = libpipewire-module-rt
args = {
nice.level = -11
rt.prio = 88
#rt.time.soft = -1
#rt.time.hard = -1
#uclamp.min = 0
#uclamp.max = 1024
}
flags = [ ifexists nofail ]
condition = [ { module.rt = !false } ]
}
# The native communication protocol.
{ name = libpipewire-module-protocol-native
args = {
# List of server Unix sockets, and optionally permissions
#sockets = [ { name = "pipewire-0" }, { name = "pipewire-0-manager" } ]
}
}
# The profile module. Allows application to access profiler
# and performance data. It provides an interface that is used
# by pw-top and pw-profiler.
# use module.profiler.args = { ... } to override the arguments.
{ name = libpipewire-module-profiler
args = {
#profile.interval.ms = 0
}
condition = [ { module.profiler = !false } ]
}
# Allows applications to create metadata objects. It creates
# a factory for Metadata objects.
{ name = libpipewire-module-metadata
condition = [ { module.metadata = !false } ]
}
# Creates a factory for making devices that run in the
# context of the PipeWire server.
{ name = libpipewire-module-spa-device-factory
condition = [ { module.spa-device-factory = !false } ]
}
# Creates a factory for making nodes that run in the
# context of the PipeWire server.
{ name = libpipewire-module-spa-node-factory
condition = [ { module.spa-node-factory = !false } ]
}
# Allows creating nodes that run in the context of the
# client. Is used by all clients that want to provide
# data to PipeWire.
{ name = libpipewire-module-client-node
condition = [ { module.client-node = !false } ]
}
# Allows creating devices that run in the context of the
# client. Is used by the session manager.
{ name = libpipewire-module-client-device
condition = [ { module.client-device = !false } ]
}
# The portal module monitors the PID of the portal process
# and tags connections with the same PID as portal
# connections.
{ name = libpipewire-module-portal
flags = [ ifexists nofail ]
condition = [ { module.portal = !false } ]
}
# The access module can perform access checks and block
# new clients.
{ name = libpipewire-module-access
args = {
# Socket-specific access permissions
#access.socket = { pipewire-0 = "default", pipewire-0-manager = "unrestricted" }
# Deprecated legacy mode (not socket-based),
# for now enabled by default if access.socket is not specified
#access.legacy = true
}
condition = [ { module.access = !false } ]
}
# Makes a factory for wrapping nodes in an adapter with a
# converter and resampler.
{ name = libpipewire-module-adapter
condition = [ { module.adapter = !false } ]
}
# Makes a factory for creating links between ports.
# use module.link-factory.args = { ... } to override the arguments.
{ name = libpipewire-module-link-factory
args = {
#allow.link.passive = false
}
condition = [ { module.link-factory = !false } ]
}
# Provides factories to make session manager objects.
{ name = libpipewire-module-session-manager
condition = [ { module.session-manager = !false } ]
}
# Use libcanberra to play X11 Bell
{ name = libpipewire-module-x11-bell
args = {
#sink.name = "@DEFAULT_SINK@"
#sample.name = "bell-window-system"
#x11.display = null
#x11.xauthority = null
}
flags = [ ifexists nofail ]
condition = [ { module.x11.bell = !false } ]
}
# The JACK DBus detection module. When jackdbus is started, this
# will automatically make PipeWire become a JACK client.
# use module.jackdbus-detect.args = { ... } to override the arguments.
{ name = libpipewire-module-jackdbus-detect
args = {
#jack.library = libjack.so.0
#jack.server = null
#jack.client-name = PipeWire
#jack.connect = true
#tunnel.mode = duplex # source|sink|duplex
source.props = {
#audio.channels = 2
#midi.ports = 1
#audio.position = [ FL FR ]
# extra sink properties
}
sink.props = {
#audio.channels = 2
#midi.ports = 1
#audio.position = [ FL FR ]
# extra sink properties
}
}
flags = [ ifexists nofail ]
condition = [ { module.jackdbus-detect = !false } ]
}
]
context.objects = [
#{ factory = <factory-name>
# ( args = { <key> = <value> ... } )
# ( flags = [ ( nofail ) ] )
# ( condition = [ { <key> = <value> ... } ... ] )
#}
#
# Creates an object from a PipeWire factory with the given parameters.
# If nofail is given, errors are ignored (and no object is created).
# If condition is given, the object is created only when the context properties
# all match the match rules.
#
#{ factory = spa-node-factory args = { factory.name = videotestsrc node.name = videotestsrc node.description = videotestsrc node.param.Props = { patternType = 1 } } }
#{ factory = spa-device-factory args = { factory.name = api.jack.device foo=bar } flags = [ nofail ] }
#{ factory = spa-device-factory args = { factory.name = api.alsa.enum.udev } }
#{ factory = spa-node-factory args = { factory.name = api.alsa.seq.bridge node.name = Internal-MIDI-Bridge } }
#{ factory = adapter args = { factory.name = audiotestsrc node.name = my-test node.description = audiotestsrc node.param.Props = { live = false }} }
#{ factory = spa-node-factory args = { factory.name = api.vulkan.compute.source node.name = my-compute-source } }
# A default dummy driver. This handles nodes marked with the "node.always-process"
# property when no other driver is currently active. JACK clients need this.
{ factory = spa-node-factory
args = {
factory.name = support.node.driver
node.name = Dummy-Driver
node.group = pipewire.dummy
node.sync-group = sync.dummy
priority.driver = 200000
#clock.id = monotonic # realtime | tai | monotonic-raw | boottime
#clock.name = "clock.system.monotonic"
}
condition = [ { factory.dummy-driver = !false } ]
}
{ factory = spa-node-factory
args = {
factory.name = support.node.driver
node.name = Freewheel-Driver
priority.driver = 190000
node.group = pipewire.freewheel
node.sync-group = sync.dummy
node.freewheel = true
#freewheel.wait = 10
}
condition = [ { factory.freewheel-driver = !false } ]
}
# This creates a new Source node. It will have input ports
# that you can link, to provide audio for this source.
#{ factory = adapter
# args = {
# factory.name = support.null-audio-sink
# node.name = "my-mic"
# node.description = "Microphone"
# media.class = "Audio/Source/Virtual"
# audio.position = "FL,FR"
# monitor.passthrough = true
# }
#}
# This creates a single PCM source device for the given
# alsa device path hw:0. You can change source to sink
# to make a sink in the same way.
#{ factory = adapter
# args = {
# factory.name = api.alsa.pcm.source
# node.name = "alsa-source"
# node.description = "PCM Source"
# media.class = "Audio/Source"
# api.alsa.path = "hw:0"
# api.alsa.period-size = 1024
# api.alsa.headroom = 0
# api.alsa.disable-mmap = false
# api.alsa.disable-batch = false
# audio.format = "S16LE"
# audio.rate = 48000
# audio.channels = 2
# audio.position = "FL,FR"
# }
#}
# Use the metadata factory to create metadata and some default values.
#{ factory = metadata
# args = {
# metadata.name = my-metadata
# metadata.values = [
# { key = default.audio.sink value = { name = somesink } }
# { key = default.audio.source value = { name = somesource } }
# ]
# }
#}
]
context.exec = [
#{ path = <program-name>
# ( args = "<arguments>" | [ <arg1> <arg2> ... ] )
# ( condition = [ { <key> = <value> ... } ... ] )
#}
#
# Execute the given program with arguments.
# If condition is given, the program is executed only when the context
# properties all match the match rules.
#
# You can optionally start the session manager here,
# but it is better to start it as a systemd service.
# Run the session manager with -h for options.
#
#{ path = "/usr/bin/pipewire-media-session" args = ""
# condition = [ { exec.session-manager = !false } ] }
#
# You can optionally start the pulseaudio-server here as well
# but it is better to start it as a systemd service.
# It can be interesting to start another daemon here that listens
# on another address with the -a option (eg. -a tcp:4713).
#
#{ path = "/usr/bin/pipewire" args = [ "-c" "pipewire-pulse.conf" ]
# condition = [ { exec.pipewire-pulse = !false } ] }
]

View file

@ -0,0 +1,222 @@
# Mod1 = Alt
# Mod4 = Windows key
set $mod Mod1
set $left h
set $down j
set $up k
set $right l
set $term alacritty
set $browser firefox
set $menu wmenu-run -i -p '>' -l 4 -f "BerkeleyMono Nerd Font Mono 12"
set $file thunar
set $ws1 1 web
set $ws2 2 term
set $ws3 3 file
set $ws4 4 blog
set $ws5 5 media
set $ws7 6 other
default_border pixel 5
default_floating_border pixel 5
gaps inner 8
# Hide border when only 1 window
hide_edge_borders smart
set {
$bg #243936
#$focused #ffde21
$text #c0c8c6
$active #66ac9f
}
# border background text indicator childborder
client.focused $bg $bg $text $active $active
output * bg ~/data/local/wallpaper/abstract.jpg fill
# output HDMI-A-1 resolution 1920x1080 position 1920,0
# You can get the names of your outputs by running: swaymsg -t get_outputs
# BSP-style window tiling
exec_always autotiling
# This will lock your screen after 300 seconds of inactivity, then turn off
# your displays after another 300 seconds, and turn your screens back on when
# resumed. It will also lock your screen before your computer goes to sleep.
exec swayidle -w \
timeout 300 'swaylock -f -c 000000' \
timeout 330 'swaymsg "output * power off"' resume 'swaymsg "output * power on"' \
before-sleep 'swaylock -f -c 000000'
# Clipboard manager
#exec wl-paste -t text --watch clipman store --no-persist
exec wl-paste --watch cliphist store
bindsym $mod+ctrl+v exec cliphist list | wmenu -l 3 | cliphist decode | wl-copy && wl-paste --no-newline | xargs -I {} wtype {}
# Notifications
### Input configuration
input type:keyboard {
xkb_layout "us"
xkb_variant intl
repeat_delay 250
repeat_rate 50
}
input type:pointer {
#accel_profile "flat" # disable mouse acceleration (enabled by default; to set it manually, use "adaptive" instead of "flat")
accel_profile "adaptive" # disable mouse acceleration (enabled by default; to set it manually, use "adaptive" instead of "flat")
pointer_accel -0.85 # set mouse sensitivity (between -1 and 1)
}
# Read `man 5 sway-input` for more information about this section.
### Key bindings
bindsym $mod+Return exec $term
bindsym $mod+G exec $browser
bindsym $mod+T exec $file
# Kill focused window
bindsym $mod+Shift+q kill
# Start your launcher
bindsym $mod+d exec $menu
# Drag floating windows by holding down $mod and left mouse button.
# Resize them with right mouse button + $mod.
# Despite the name, also works for non-floating windows.
# Change normal to inverse to use left mouse button for resizing and right
# mouse button for dragging.
floating_modifier $mod normal
# Reload the configuration file
bindsym $mod+Shift+c reload
# Exit sway (logs you out of your Wayland session)
bindsym $mod+Shift+e exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -B 'Yes, exit sway' 'swaymsg exit'
# Lock screen
bindsym $mod+o exec 'swaylock -f'
# Focus window
bindsym $mod+$left focus left
bindsym $mod+$down focus down
bindsym $mod+$up focus up
bindsym $mod+$right focus right
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+$left move left
bindsym $mod+Shift+$down move down
bindsym $mod+Shift+$up move up
bindsym $mod+Shift+$right move right
bindsym $mod+Shift+Left move left
bindsym $mod+Shift+Down move down
bindsym $mod+Shift+Up move up
bindsym $mod+Shift+Right move right
# Switch workspace
bindsym $mod+1 workspace $ws1
bindsym $mod+2 workspace $ws2
bindsym $mod+3 workspace $ws3
bindsym $mod+4 workspace $ws4
bindsym $mod+5 workspace $ws5
bindsym $mod+6 workspace $ws6
bindsym $mod+7 workspace $ws7
# Move focused container to workspace
bindsym $mod+Shift+1 move container to workspace $ws1
bindsym $mod+Shift+2 move container to workspace $ws2
bindsym $mod+Shift+3 move container to workspace $ws3
bindsym $mod+Shift+4 move container to workspace $ws4
bindsym $mod+Shift+5 move container to workspace $ws5
bindsym $mod+Shift+6 move container to workspace $ws6
bindsym $mod+Shift+7 move container to workspace $ws7
bindsym ctrl+alt+shift+n workspace next
bindsym ctrl+alt+shift+p workspace prev
# LAYOUT
# You can "split" the current object of your focus with
# $mod+b or $mod+v, for horizontal and vertical splits
# respectively.
bindsym $mod+b splith
bindsym $mod+v splitv
# Switch the current container between different layout styles
#bindsym $mod+s layout stacking
#bindsym $mod+w layout tabbed
#bindsym $mod+e layout toggle split
# Make the current focus fullscreen
bindsym $mod+f fullscreen
# Zen mode
bindsym $mod+z floating toggle; resize set width 1750 height 1000; move position center
# Toggle the current focus between tiling and floating mode
bindsym $mod+Shift+space floating toggle
# Swap focus between the tiling area and the floating area
bindsym $mod+space focus mode_toggle
# Move focus to the parent container
# XXX: what is this for
#bindsym $mod+a focus parent
# Sway has a "scratchpad", which is a bag of holding for windows.
# You can send windows there and get them back later.
# Move the currently focused window to the scratchpad
bindsym $mod+Shift+minus move scratchpad
# Show the next scratchpad window or hide the focused scratchpad window.
# If there are multiple scratchpad windows, this command cycles through them.
bindsym $mod+minus scratchpad show
bindsym ctrl+alt+shift+a resize shrink width 10px
bindsym ctrl+alt+shift+s resize grow height 10px
bindsym ctrl+alt+shift+w resize shrink height 10px
bindsym ctrl+alt+shift+d resize grow width 10px
# Resizing containers:
mode "RESIZE" {
bindsym $left resize shrink width 80px
bindsym $down resize grow height 20px
bindsym $up resize shrink height 20px
bindsym $right resize grow width 80px
# Return to default mode
bindsym Return mode "default"
bindsym Escape mode "default"
}
bindsym ctrl+alt+shift+r mode "RESIZE"
# Volume control with PipeWire
# https://github.com/xkbcommon/libxkbcommon/blob/master/include/xkbcommon/xkbcommon-keysyms.h
# Get the device ID with `wpctl status` or use @DEFAULT_AUDIO_SINK@
bindsym --locked XF86AudioMute exec wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
bindsym --locked XF86AudioLowerVolume exec wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.01-
bindsym --locked XF86AudioRaiseVolume exec wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.01+
# FIXME: https://wiki.archlinux.org/title/MPRIS
# bindsym --locked XF86AudioPause exec wpctl set-mute 48 toggle
# Screenshot
bindsym Mod4+Shift+4 exec grimshot --notify save area
bindsym Mod4+Shift+Space exec grimshot --notify save window
# man 5 sway-bar
bar {
position bottom
font BerkeleyMono Nerd Font Mono
status_command ~/.config/sway/status.sh
colors {
statusline #869795
background #ffffff00
inactive_workspace #32323200 #32323200 #6c7e7c
focused_workspace #2d4844 #2d4844 #d5dad9
urgent_workspace #b4b479 #b4b479 #121c1b
}
}
for_window [title="galculator"] floating enable
include /etc/sway/config.d/*

184
home/oli/.config/sway/status.sh Executable file
View file

@ -0,0 +1,184 @@
#!/usr/bin/env bash
#
# Status bar for Sway
# Needs a .env.homeassistant with an API token in ~/.config/sway/.env.homeassistant
# XXX is it possible to display a motd, but keep it longer than the rest in here?
# TODO:
# - HA optimize API calls: https://community.home-assistant.io/t/get-limited-number-of-states-entities-when-using-api-states/830323
# man 7 swaybar-protocol
homeassistant_url="http://10.7.1.11:8123/api/states"
common() {
bg_ok="#66ac9f"
bg_ok_trans="#00000000"
text_dark="#36454f"
text_light="#c0c8c6"
warn1="#facc15"
warn2="#cc8d22"
crit="#710f3d"
. ~/.config/sway/.env.homeassistant
echo -n "{"
echo -n "\"separator_block_width\":10,"
echo -n "\"separator\":false,"
echo -n "\"color\":\"$fg\","
echo -n "\"background\":\"$bg\","
echo -n "\"name\":\"$name\","
echo -n "\"full_text\":\" $stat\","
echo -n "},"
}
temp_cpu() {
local name="cpu"
local cpu=$(expr $(cat /sys/class/thermal/thermal_zone2/temp) / 1000)
if [[ $(echo "$cpu >= 55" | bc -l ) == "1" ]] && [[ $(echo "$cpu < 65" | bc -l ) == "1" ]]; then
local bg=$warn1
local fg=$text_dark
elif [[ $(echo "$cpu >= 65" | bc -l ) == "1" ]] && [[ $(echo "$cpu < 75" | bc -l ) == "1" ]]; then
local bg=$warn2
local fg=$text_dark
elif [[ $(echo "$cpu >= 75" | bc -l ) == "1" ]]; then
local bg=$crit
local fg=$text_light
else
local bg=$bg_ok_trans
local fg=$text_light
fi
icon="󰍛"
local stat=$icon\ $cpu\ °C" "
common
}
mem(){
local name="mem"
local memused=$(free | grep Mem | awk '{printf "%.1f\n", $3/$2 * 100.0}')
local memproc=$(basename "$(ps --no-headers -A --sort -rss -o cmd | head -1 | awk {'print $1'})")
if [[ $(echo "$memused >= 50" | bc -l ) == "1" ]] && [[ $(echo "$memused < 60" | bc -l ) == "1" ]]; then
local bg=$warn1
local fg=$text_dark
elif [[ $(echo "$memused >= 60" | bc -l ) == "1" ]] && [[ $(echo "$memused < 70" | bc -l ) == "1" ]]; then
local bg=$warn2
local fg=$text_dark
elif [[ $(echo "$memused >= 70" | bc -l ) == "1" ]]; then
local bg=$crit
local fg=$text_light
else
local bg=$bg_ok_trans
local fg=$text_light
fi
icon=""
local stat=$icon\ $memused\ %\ [$memproc]" "
common
}
wifi() {
local name="wifi"
# orig = negative number
local wifidbm_orig=$(iwctl station wlan0 show | awk '/[[:space:]]RSSI/{print $2}')
local wifidbm=$((wifidbm_orig * -1))
if [[ $(echo "$wifidbm >= 50" | bc -l ) == "1" ]] && [[ $(echo "$wifidbm < 60" | bc -l ) == "1" ]]; then
local bg=$warn1
local fg=$text_dark
elif [[ $(echo "$wifidbm >= 60" | bc -l ) == "1" ]] && [[ $(echo "$wifidbm < 70" | bc -l ) == "1" ]]; then
local bg=$warn2
local fg=$text_dark
elif [[ $(echo "$wifidbm >= 70" | bc -l ) == "1" ]]; then
local bg=$crit
local fg=$text_light
else
local bg=$bg_ok_trans
local fg=$text_light
fi
icon=""
local stat=$icon\ -$wifidbm\ dBm" "
common
}
mydate() {
local bg=$bg_ok_trans
local fg=$bg_ok
local name="id_time"
local icon=""
local stat=$icon\ $(date +'%A, %d %B %R %Z')
common
}
loadavg() {
local bg=$bg_ok_trans
local fg=$text_light
local name="loadavg"
icon="󰍛"
local stat=$icon\ $(awk {'print $1,$2,$3'} /proc/loadavg)
common
}
temp_indoor() {
local bg=$bg_ok_trans
local fg=$text_light
local name="temp_indoor"
local ha_indoor=$(curl -s -H "Authorization: Bearer $ha_token" -H "Content-Type: application/json" $homeassistant_url/sensor.vindstyrka_oli_temperature | jq -r '.state')
icon=""
local stat=$icon\ $ha_indoor\ °C" "
common
}
humid_indoor() {
local bg=$bg_ok_trans
local fg=$text_light
local name="temp_indoor"
local ha_indoor=$(curl -s -H "Authorization: Bearer $ha_token" -H "Content-Type: application/json" $homeassistant_url/sensor.vindstyrka_oli_humidity | jq -r '.state')
icon=""
local stat=$icon\ $ha_indoor\ %" "
common
}
powerdraw() {
local bg=$bg_ok_trans
local fg=$text_light
local name="temp_indoor"
local ha_indoor=$(curl -s -H "Authorization: Bearer $ha_token" -H "Content-Type: application/json" $homeassistant_url/sensor.inspelning_oli_power | jq -r '.state')
icon=""
local stat=$icon\ $ha_indoor\ W" "
common
}
audio_volume() {
local name="audio"
local volume=$(wpctl get-volume @DEFAULT_AUDIO_SINK@ | awk {'print $NF*100'})
if [[ $(echo "$volume >= 50" | bc -l ) == "1" ]] && [[ $(echo "$volume < 60" | bc -l ) == "1" ]]; then
local bg=$warn1
local fg=$text_dark
elif [[ $(echo "$volume >= 60" | bc -l ) == "1" ]] && [[ $(echo "$volume < 70" | bc -l ) == "1" ]]; then
local bg=$warn2
local fg=$text_dark
elif [[ $(echo "$volume >= 70" | bc -l ) == "1" ]]; then
local bg=$crit
local fg=$text_light
else
local bg=$bg_ok_trans
local fg=$text_light
fi
icon=""
local stat=$icon\ $volume\ %" "
common
}
# header
echo '{ "version": 1 , "click_events":false}'
echo '[[],'
while :
do
echo -n "["
mydate
loadavg
temp_indoor
humid_indoor
powerdraw
temp_cpu
mem
wifi
audio_volume
echo -n "],"
sleep 5
done

View file

@ -0,0 +1,268 @@
# Any of these options can be overridden using the --config argument
# on the command line, for instance:
# $ swayimg --config="general.mode=gallery"
################################################################################
# General configuration
################################################################################
[general]
# Mode at startup (viewer/slideshow/gallery)
mode = viewer
# Window size (fullscreen/image, or absolute size)
size = 1280,720
# Sway/Hyprland only: Window position (auto or absolute coordinates, e.g. 10,20)
position = auto
# Sway/Hyprland only: create floating window above the currently focused one
overlay = no
# Use window decoration (yes/no)
decoration = no
# Action performed by SIGUSR1 signal (same format as for key bindings)
sigusr1 = reload
# Action performed by SIGUSR2 signal (same format as for key bindings)
sigusr2 = next_file
# Application ID and window class name
app_id = swayimg
################################################################################
# Viewer mode configuration
################################################################################
[viewer]
# Window background color (auto/extend/mirror/RGBA)
window = #00000000
# Background for transparent images (grid/RGBA)
transparency = grid
# Default image scale (optimal/width/height/fit/fill/real/keep)
scale = optimal
# Initial image position on the window (center/top/bottom/free/...)
position = center
# Anti-aliasing mode (none/box/bilinear/bicubic/mks13)
antialiasing = mks13
# Loop image list: jump to first image when end of list is reached (yes/no)
loop = yes
# Number of previously viewed images to store in cache
history = 1
# Number of preloaded images (read ahead)
preload = 1
################################################################################
# Slideshow mode configuration
################################################################################
[slideshow]
# Slideshow image display time (seconds)
time = 3
# Window background color (auto/extend/mirror/RGBA)
window = auto
# Background for transparent images (grid/RGBA)
transparency = #000000ff
# Default image scale (optimal/width/height/fit/fill/real)
scale = fit
# Initial image position on the window (center/top/bottom/free/...)
position = center
# Anti-aliasing mode (none/box/bilinear/bicubic/mks13)
antialiasing = mks13
################################################################################
# Gallery mode configuration
################################################################################
[gallery]
# Height and width of each thumbnail (pixels)
size = 200
# Max number of invisible thumbnails stored in memory cache
cache = 500
# Load not only visible but also adjacent thumbnails
preload = yes
# Enable/disable storing thumbnails in persistent storage (yes/no)
pstore = yes
# Fill the entire tile with thumbnail (yes/no)
fill = yes
# Anti-aliasing mode for thumbnails (none/box/bilinear/bicubic/mks13)
antialiasing = mks13
# Background color of the window (RGBA)
window = #00000000
# Background color of non-selected tiles (RGBA)
background = #202020ff
# Background color of the selected tile (RGBA)
select = #404040ff
# Border color of the selected tile (RGBA)
border = #000000ff
# Shadow color of the selected tile (RGBA)
shadow = #000000ff
################################################################################
# Image list configuration
################################################################################
[list]
# Default order (none/alpha/numeric/mtime/size/random)
order = alpha
# Reverse order (yes/no)
reverse = no
# Read directories recursively (yes/no)
recursive = no
# Add files from the same directory as the first file (yes/no)
all = no
# Enable file system monitoring for adding new images to the list (yes/no)
fsmon = yes
################################################################################
# Font configuration
################################################################################
[font]
# Font name
name = monospace
# Font size (pt)
size = 14
# Font color (RGBA)
color = #ccccccff
# Shadow color (RGBA)
shadow = #000000d0
# Background color (RGBA)
background = #00000000
################################################################################
# Image meta info scheme (format, size, EXIF, etc.)
################################################################################
[info]
# Show on startup (yes/no)
show = no
# Timeout to hide info (seconds, 0 to always show)
info_timeout = 0
# Timeout to hide status message (seconds)
status_timeout = 3
# Display scheme for viewer mode (position = content)
[info.viewer]
top_left = +name,+format,+filesize,+imagesize,+exif
top_right = index
bottom_left = scale,frame
bottom_right = status
# Display scheme for slideshow mode (position = content)
[info.slideshow]
top_left = none
top_right = none
bottom_left = none
bottom_right = dir,status
# Display scheme for gallery mode (position = content)
[info.gallery]
top_left = none
top_right = index
bottom_left = none
bottom_right = name,status
################################################################################
# Viewer mode key binding configuration: key = action [parameters]
################################################################################
[keys.viewer]
F1 = help
Home = first_file
End = last_file
Prior = prev_file
Next = next_file
Space = next_file
Shift+r = rand_file
Shift+d = prev_dir
d = next_dir
Shift+o = prev_frame
o = next_frame
c = skip_file
s = mode slideshow
n = animation
f = fullscreen
Return = mode gallery
g = mode gallery
Left = prev_file
Right = next_file
Up = step_up 10
Down = step_down 10
Equal = zoom +10
Plus = zoom +10
Minus = zoom -10
w = zoom width
Shift+w = zoom height
z = zoom fit
Shift+z = zoom fill
0 = zoom real
BackSpace = zoom optimal
j = prev_file
k = next_file
Alt+s = zoom
bracketleft = rotate_left
bracketright = rotate_right
m = flip_vertical
Shift+m = flip_horizontal
a = antialiasing
r = reload
i = info
Shift+Delete = exec rm -f '%' && echo "File removed: %"; skip_file
Escape = exit
q = exit
# Mouse related
ScrollLeft = step_right 5
ScrollRight = step_left 5
ScrollUp = prev_file
ScrollDown = next_file
Ctrl+ScrollUp = zoom +10
Ctrl+ScrollDown = zoom -10
Shift+ScrollUp = prev_file
Shift+ScrollDown = next_file
Alt+ScrollUp = prev_frame
Alt+ScrollDown = next_frame
MouseLeft = drag
MouseSide = prev_file
MouseExtra = next_file
MouseRight = info
################################################################################
# Slideshow mode key binding configuration: key = action [parameters]
################################################################################
[keys.slideshow]
F1 = help
Home = first_file
End = last_file
Prior = prev_file
Next = next_file
Shift+r = rand_file
Shift+d = prev_dir
d = next_dir
Space = pause
i = info
f = fullscreen
Return = mode
Escape = exit
q = exit
################################################################################
# Gallery mode key binding configuration: key = action [parameters]
################################################################################
[keys.gallery]
F1 = help
Home = first_file
End = last_file
Left = step_left
Right = step_right
Up = step_up
Down = step_down
Prior = page_up
Next = page_down
c = skip_file
s = mode slideshow
f = fullscreen
Return = mode viewer
a = antialiasing
r = reload
i = info
Equal = thumb +20
Plus = thumb +20
Minus = thumb -20
Shift+Delete = exec rm -f '%' && echo "File removed: %"; skip_file
Escape = exit
q = exit
# Mouse related
ScrollLeft = step_right
ScrollRight = step_left
ScrollUp = step_up
ScrollDown = step_down
Ctrl+ScrollUp = thumb +20
Ctrl+ScrollDown = thumb -20
MouseLeft = mode viewer

View file

@ -0,0 +1,5 @@
color=123524
#show-keyboard-layout
indicator-idle-visible
indicator-radius=75
indicator-thickness=45

View file

@ -0,0 +1,7 @@
use_relative_paths=true
address=0.0.0.0
enable_auth=true
username=foo
password=bar
# ssh-keygen -m pem -f ~/.config/wayvnc/rsa_key.pem -t rsa -N ""
rsa_private_key_file=rsa_key.pem

12
home/oli/bin/alert.sh Executable file
View file

@ -0,0 +1,12 @@
#!/usr/bin/env bash
#
# Send notifications to mako
# Priorities: low, normal, critical
# FIXME: this totally ignores escaping strings
app=script
prio=$1
title=$2
msg=$3
notify-send -a $app -u "$prio" "$title" "$msg"

7
home/oli/bin/vnc.sh Normal file
View file

@ -0,0 +1,7 @@
#!/usr/bin/env bash
export WLR_BACKENDS=headless
export WLR_RENDERER=pixman
export WLR_LIBINPUT_NO_DEVICES=1
nohup sway &
WAYLAND_DISPLAY=wayland-1 wayvnc 0.0.0.0