Initial commit

This commit is contained in:
2026-07-02 15:56:21 +02:00
commit 4529a3c472
92 changed files with 13593 additions and 0 deletions
@@ -0,0 +1,14 @@
{
"window.menuBarVisibility": "toggle",
"security.workspace.trust.untrustedFiles": "open",
"diffEditor.ignoreTrimWhitespace": false,
"extensions.ignoreRecommendations": true,
"chat.commandCenter.enabled": false,
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"workbench.editor.enablePreview": false,
"diffEditor.maxComputationTime": 0,
"diffEditor.hideUnchangedRegions.enabled": true,
"claudeCode.preferredLocation": "panel",
}
+3
View File
@@ -0,0 +1,3 @@
--enable-features=UseOzonePlatform
--ozone-platform=wayland
--enable-wayland-ime
@@ -0,0 +1,3 @@
--enable-features=UseOzonePlatform
--ozone-platform=wayland
--enable-wayland-ime
@@ -0,0 +1,7 @@
file:///mnt/nase.meow/Data/Projects/Static/das_buero/lightcontrol lightcontrol
file:///mnt/nase.meow/Data/Projects/Static/huttinger_web huttinger_web
file:///mnt/nase.meow/Data/Projects/Static/tobiashuttinger tobiashuttinger
file:///mnt/nase.meow/Data
file:///mnt/nase.meow/Download
file:///mnt/nase.meow/Media
file:///mnt/nase.meow/Data/Projects
+461
View File
@@ -0,0 +1,461 @@
# https://wiki.hypr.land/Configuring/
# You can split this configuration into multiple files
# Create your files separately and then link them to this file like this:
# source = ~/.config/hypr/myColors.conf
################
### MONITORS ###
################
# See https://wiki.hypr.land/Configuring/Monitors/
monitorv2 {
output = DP-1
mode = 3840x2160@60
position = auto-left
scale = 1.5
bitdepth = 10
icc = /home/tobias/scripts/set_gamma/LG_1_2020_D6500_sRGB.icm
}
monitorv2 {
output = DP-2
mode = 3840x2160@60
position = auto-right
scale = 1.5
bitdepth = 10
icc = /home/tobias/scripts/set_gamma/LG_1_2020_D6500_sRGB.icm
}
# Assign Workspace 1 to correct monitor and set cursor to that workspace on start
#workspace=name:1, monitor:DP-2
#exec-once = hyprctl dispatch workspace 1
debug {
disable_logs = true
}
# unscale XWayland
xwayland {
force_zero_scaling = true
}
###################
### MY PROGRAMS ###
###################
# See https://wiki.hypr.land/Configuring/Keywords/
# Set programs that you use
$terminal = kitty
$fileManager = nautilus
$menu = wofi --show drun
#################
### AUTOSTART ###
#################
# Autostart necessary processes (like notifications daemons, status bars, etc.)
# Or execute your favorite apps at launch like this:
exec-once = hyprpaper & waybar & swaync & hyprsunset
exec-once = blueman-applet & nm-applet & pasystray
exec-once = localsend --hidden
exec-once = [workspace 1 silent] firefox
exec-once = [workspace 2 silent] evolution
# Screen sharing conf
exec-once=dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
#############################
### ENVIRONMENT VARIABLES ###
#############################
# See https://wiki.hypr.land/Configuring/Environment-variables/
# Cursor
env = XCURSOR_SIZE,24
env = HYPRCURSOR_SIZE,24
env = XCURSOR_THEME,default
# Theme options
env = ADWAITA_THEME,dark
env = COLOR_SCHEME,prefer-dark
env = GDK_BACKEND,wayland,x11,*
env = XDG_CURRENT_DESKTOP,Hyprland
env = XDG_SESSION_TYPE,wayland
env = XDG_SESSION_DESKTOP,Hyprland
env = QT_AUTO_SCREEN_SCALE_FACTOR,1
env = QT_QPA_PLATFORM,wayland;xcb
env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1
# Setting wayland for var toolkits
env = MOZ_ENABLE_WAYLAND,1
env = ELECTRON_OZONE_PLATFORM_HINT,wayland
env = CLUTTER_BACKEND,wayland
env = SDL_VIDEODRIVER,wayland
#env = QT_STYLE_OVERRIDE,Adwaita-Dark
# This makes qt apps get dark mode preference via xdg portal, however no dark icon theme is set at least in kid3
# disabled it for now because of a regression/bug in qt6 where dark theme isn't applied because prob. of this: https://bugreports.qt.io/browse/QTBUG-130884
# env = QT_QPA_PLATFORMTHEME,xdgdesktopportal
# as temp. fix, dont make qt apps ask xdg portal what theme/color scheme to use:
env = QT_QPA_PLATFORMTHEME,gtk3
###################
### PERMISSIONS ###
###################
# See https://wiki.hypr.land/Configuring/Permissions/
# Please note permission changes here require a Hyprland restart and are not applied on-the-fly
# for security reasons
# ecosystem {
# enforce_permissions = 1
# }
# permission = /usr/(bin|local/bin)/grim, screencopy, allow
# permission = /usr/(lib|libexec|lib64)/xdg-desktop-portal-hyprland, screencopy, allow
# permission = /usr/(bin|local/bin)/hyprpm, plugin, allow
#####################
### LOOK AND FEEL ###
#####################
# Refer to https://wiki.hypr.land/Configuring/Variables/
# https://wiki.hypr.land/Configuring/Variables/#general
general {
gaps_in = 5
gaps_out = 13
border_size = 2
# https://wiki.hypr.land/Configuring/Variables/#variable-types for info about colors
col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
#col.active_border = rgba(29dbffee)
col.inactive_border = rgba(595959aa)
# Set to true enable resizing windows by clicking and dragging on borders and gaps
resize_on_border = false
# Please see https://wiki.hypr.land/Configuring/Tearing/ before you turn this on
allow_tearing = false
layout = dwindle
}
# https://wiki.hypr.land/Configuring/Variables/#decoration
decoration {
rounding = 10
rounding_power = 2
# Change transparency of focused and unfocused windows
active_opacity = 1.0
inactive_opacity = 1.0
#shadow {
# enabled = true
# range = 4
# render_power = 3
# color = rgba(1a1a1aee)
#}
shadow {
enabled = true
range = 100
render_power = 3
color = rgba(00000050)
scale = 0.99
offset = 0 9
}
# https://wiki.hypr.land/Configuring/Variables/#blur
blur {
enabled = true
size = 8
passes = 2
vibrancy = 0.1696
}
layerrule = blur on, match:namespace waybar
layerrule = ignore_alpha 0, blur on, match:namespace wofi
layerrule = ignore_alpha .3, blur on, match:namespace swaync-control-center
layerrule = ignore_alpha .3, blur on, match:namespace swaync-notification-window
}
# https://wiki.hypr.land/Configuring/Variables/#animations
animations {
enabled = yes, please :)
#enabled = no
# Default animations, see https://wiki.hypr.land/Configuring/Animations/ for more
bezier = easeOutQuint,0.23,1,0.32,1
bezier = easeInOutCubic,0.65,0.05,0.36,1
bezier = linear,0,0,1,1
bezier = almostLinear,0.5,0.5,0.75,1.0
bezier = quick,0.15,0,0.1,1
bezier = smoothQuick,0.08,0.93,0,1
animation = global, 1, 10, default
animation = border, 1, 5.39, easeOutQuint
animation = windows, 1, 4.79, easeOutQuint
animation = windowsIn, 1, 4.1, easeOutQuint, popin 87%
animation = windowsOut, 1, 1.49, linear, popin 87%
animation = fadeIn, 1, 1.73, almostLinear
animation = fadeOut, 1, 1.46, almostLinear
animation = fade, 1, 3.03, quick
animation = layers, 1, 3.81, easeOutQuint
animation = layersIn, 1, 4, easeOutQuint, fade
animation = layersOut, 1, 1.5, linear, fade
animation = fadeLayersIn, 1, 1.79, almostLinear
animation = fadeLayersOut, 1, 1.39, almostLinear
animation = workspaces, 1, 3, smoothQuick, slide
animation = workspacesIn, 1, 3, smoothQuick, slide
animation = workspacesOut, 1, 3, smoothQuick, slide
}
# Ref https://wiki.hypr.land/Configuring/Workspace-Rules/
# "Smart gaps" / "No gaps when only"
# uncomment all if you wish to use that.
# workspace = w[tv1], gapsout:0, gapsin:0
# workspace = f[1], gapsout:0, gapsin:0
# windowrule = bordersize 0, floating:0, onworkspace:w[tv1]
# windowrule = rounding 0, floating:0, onworkspace:w[tv1]
# windowrule = bordersize 0, floating:0, onworkspace:f[1]
# windowrule = rounding 0, floating:0, onworkspace:f[1]
# See https://wiki.hypr.land/Configuring/Dwindle-Layout/ for more
dwindle {
preserve_split = true # You probably want this
}
# See https://wiki.hypr.land/Configuring/Master-Layout/ for more
master {
new_status = master
}
# https://wiki.hypr.land/Configuring/Variables/#misc
misc {
force_default_wallpaper = 0 # Set to 0 or 1 to disable the anime mascot wallpapers
disable_hyprland_logo = true # If true disables the random hyprland logo / anime girl background. :(
anr_missed_pings = 3
}
ecosystem {
no_update_news = true
no_donation_nag = true
}
#cursor {
# no_hardware_cursors = true
# min_refresh_rate = 60
#}
#############
### INPUT ###
#############
# https://wiki.hypr.land/Configuring/Variables/#input
input {
kb_layout = de
kb_variant =
kb_model =
kb_options =
kb_rules =
follow_mouse = 1
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
scroll_factor = 0.04
emulate_discrete_scroll = 1
touchpad {
natural_scroll = true
}
}
# For configuring gestures, see:
# https://wiki.hypr.land/Configuring/Gestures/
# Example per-device config
# See https://wiki.hypr.land/Configuring/Keywords/#per-device-input-configs for more
#device {
# name = mx-anywhere-3s-mouse
# scroll_factor = 0.08
#}
###################
### KEYBINDINGS ###
###################
# See https://wiki.hypr.land/Configuring/Keywords/
$mainMod = SUPER # Sets "Windows" key as main modifier
# Example binds, see https://wiki.hypr.land/Configuring/Binds/ for more
bind = $mainMod, T, exec, $terminal
bind = $mainMod, Q, killactive,
bind = $mainMod, M, exit,
bind = $mainMod, F, exec, $fileManager
bind = $mainMod, V, togglefloating,
bind = $mainMod, Y, exec, $menu
#bind = $mainMod, P, pseudo, # dwindle
bind = $mainMod, J, layoutmsg, togglesplit # dwindle
bind = $mainMod, N, exec,~/scripts/joplin.sh
bind = $mainMod, B, exec, firefox
bind = $mainMod, E, exec,~/scripts/display_sleep.sh
# Move focus with mainMod + arrow keys
bind = $mainMod, left, movefocus, l
bind = $mainMod, right, movefocus, r
bind = $mainMod, up, movefocus, u
bind = $mainMod, down, movefocus, d
# Switch workspaces with mainMod + [0-9]
bind = $mainMod, 1, workspace, 1
bind = $mainMod, 2, workspace, 2
bind = $mainMod, 3, workspace, 3
bind = $mainMod, 4, workspace, 4
bind = $mainMod, 5, workspace, 5
bind = $mainMod, 6, workspace, 6
bind = $mainMod, 7, workspace, 7
bind = $mainMod, 8, workspace, 8
bind = $mainMod, 9, workspace, 9
bind = $mainMod, 0, workspace, 10
# Move active window to a workspace with mainMod + SHIFT + [0-9]
bind = $mainMod SHIFT, 1, movetoworkspace, 1
bind = $mainMod SHIFT, 2, movetoworkspace, 2
bind = $mainMod SHIFT, 3, movetoworkspace, 3
bind = $mainMod SHIFT, 4, movetoworkspace, 4
bind = $mainMod SHIFT, 5, movetoworkspace, 5
bind = $mainMod SHIFT, 6, movetoworkspace, 6
bind = $mainMod SHIFT, 7, movetoworkspace, 7
bind = $mainMod SHIFT, 8, movetoworkspace, 8
bind = $mainMod SHIFT, 9, movetoworkspace, 9
bind = $mainMod SHIFT, 0, movetoworkspace, 10
# Resize windows with arrow keys
binde = $mainMod SHIFT, left, resizeactive, -40 0
binde = $mainMod SHIFT, right, resizeactive, 40 0
binde = $mainMod SHIFT, up, resizeactive, 0 -40
binde = $mainMod SHIFT, down, resizeactive, 0 40
# Example special workspace (scratchpad)
bind = $mainMod, S, togglespecialworkspace, magic
bind = $mainMod SHIFT, S, movetoworkspace, special:magic
# Scroll through existing workspaces with mainMod + scroll
#bind = $mainMod, mouse_down, workspace, e+1
#bind = $mainMod, mouse_up, workspace, e-1
# Move/resize windows with mainMod + LMB/RMB and dragging
bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod, mouse:273, resizewindow
# Laptop multimedia keys for volume and LCD brightness
bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+
bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
bindel = ,XF86MonBrightnessUp, exec, brightnessctl -e4 -n2 set 5%+
bindel = ,XF86MonBrightnessDown, exec, brightnessctl -e4 -n2 set 5%-
bindel = , code:238, exec, brightnessctl -d smc::kbd_backlight s +20
bindel = , code:237, exec, brightnessctl -d smc::kbd_backlight s 20-
# Requires playerctl
bindl = , XF86AudioNext, exec, playerctl next
bindl = , XF86AudioPause, exec, playerctl play-pause
bindl = , XF86AudioPlay, exec, playerctl play-pause
bindl = , XF86AudioPrev, exec, playerctl previous
# Screenshots with hyprshot
# Screenshot a window
bind = $mainMod, PRINT, exec, hyprshot -m window
# Screenshot a monitor
bind = , PRINT, exec, hyprshot -m region
# Screenshot a region
bind = $shiftMod, PRINT, exec, hyprshot -m output
# Hyprpicker
bind = $mainMod,P,exec,hyprpicker -a
##############################
### WINDOWS AND WORKSPACES ###
##############################
# See https://wiki.hypr.land/Configuring/Window-Rules/ for more
# See https://wiki.hypr.land/Configuring/Workspace-Rules/ for workspace rules
# workspacerules
workspace = name:1, monitor:DP-1, default:false
workspace = name:2, monitor:DP-1, default:false
workspace = name:3, monitor:DP-1, default:false
workspace = name:4, monitor:DP-1, default:false
workspace = name:5, monitor:DP-1, default:false
workspace = name:6, monitor:DP-2, default:false
workspace = name:7, monitor:DP-2, default:false
workspace = name:8, monitor:DP-2, default:false
workspace = name:9, monitor:DP-2, default:false
workspace = name:0, monitor:DP-2, default:false
# windowrules
windowrule = float on, size 1100 700, match:class ^(org.gnome.Nautilus)$
windowrule = float on, pin on, match:class ^(org.gnome.NautilusPreviewer)$
windowrule = float on, match:class ^(org.gnome.Loupe)$
windowrule = float on, match:class ^(org.rncbc.qpwgraph)$
windowrule = float on, scroll_mouse 0.2, match:class ^(org.keepassxc.KeePassXC)$
windowrule = float on, size 1400 900, scroll_mouse 0.05, match:class ^(@joplin/app-desktop)$
windowrule = float on, size 1200 750, scroll_mouse 0.2, match:class ^(ferdium)$
windowrule = float on, size 1200 750, match:class ^(Element)$
windowrule = float on, size 1200 750, match:class ^(org.gnome.Fractal)$
#windowrule = suppressevent[activatefocus activate],initialClass:^(photoshop.exe)$
windowrule = no_initial_focus on, match:initial_class ^(photoshop.exe)$
#windowrule = noblur,initialClass:^(photoshop.exe)$
#windowrule = noshadow,initialClass:^(photoshop.exe)$
#windowrule = noanim,initialClass:^(photoshop.exe)$
#windowrule = nodim,initialClass:^(photoshop.exe)$
#windowrule = nomaxsize,initialClass:^(photoshop.exe)$
# Per app scroll factor
windowrule = scroll_mouse 0.3, match:class ^(code)$
windowrule = scroll_mouse 0.2, match:class ^(org.gnome.Evolution)$
windowrule = scroll_mouse 0.4, match:class ^(libreoffice-.*)$
windowrule = scroll_mouse 0.2, match:class ^(virt-viewer)$
windowrule = scroll_mouse 0.2, match:class ^(RapidRAW)$
# Ignore maximize requests from apps. You'll probably like this.
windowrule = suppress_event maximize, match:class .*
# Fix some dragging issues with XWayland
windowrule = no_focus on, match:class ^$, match:title ^$, match:xwayland 1, match:float 1, match:fullscreen 0, match:pin 0
# Shadow only for floating windows
windowrule = no_shadow on, match:float 0
@@ -0,0 +1,12 @@
preload = /home/tobias/wall2.jpg
ipc = false
splash = false
wallpaper {
monitor = DP-1
path = /home/tobias/wall2.jpg
}
wallpaper {
monitor = DP-2
path = /home/tobias/wall2.jpg
}
@@ -0,0 +1,12 @@
max-gamma = 150
profile {
time = 8:00
identity = true
}
profile {
time = 22:00
temperature = 3500
gamma = 1.0
}
@@ -0,0 +1,62 @@
{
"$schema": "https://joplinapp.org/schema/settings.json",
"altInstanceId": "",
"editor.codeView": true,
"sync.target": 6,
"sync.6.path": "https://files.70b1.de/joplin",
"sync.6.username": "tobias",
"richTextBannerDismissed": true,
"locale": "de_DE",
"ocr.enabled": false,
"theme": 2,
"themeAutoDetect": false,
"layoutButtonSequence": 1,
"notes.sortOrder.field": "user_updated_time",
"notes.sortOrder.reverse": true,
"notes.perFieldReverse": {
"user_updated_time": true,
"user_created_time": true,
"title": false,
"order": false,
"todo_due": true,
"todo_completed": true
},
"notes.listRendererId": "compact",
"markdown.plugin.softbreaks": false,
"markdown.plugin.typographer": false,
"showTrayIcon": true,
"style.editor.fontSize": 15,
"style.editor.fontFamily": "SF Mono",
"style.editor.monospaceFontFamily": "SF Mono",
"style.editor.contentMaxWidth": 0,
"ui.layout": {
"key": "root",
"children": [
{
"key": "sideBar",
"width": 224,
"visible": true
},
{
"key": "noteList",
"width": 297,
"visible": true
},
{
"key": "editor",
"visible": true
}
],
"visible": true
},
"noteVisiblePanes": [
"editor"
],
"editor.inlineRendering": true,
"editor.imageRendering": true,
"api.token": "51dcd22d8da20ca9f2d709e9660c03893fbabc387b19d904c10bd1d5d2f77211bc9477baffbe500ac1eaa77aaaf1005280fce282bd72de36ef7a43626bacad4e",
"spellChecker.languages": [
"de"
],
"windowContentZoomFactor": 100
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,33 @@
[General]
ConfigVersion=2
UpdateCheckMessageShown=true
[Browser]
CustomProxyLocation=
Enabled=true
[GUI]
ApplicationTheme=dark
CheckForUpdates=false
CompactMode=false
HidePreviewPanel=true
MinimizeOnClose=true
ShowTrayIcon=true
TrayIconAppearance=monochrome-light
[KeeShare]
Active="<?xml version=\"1.0\"?><KeeShare><Active/></KeeShare>\n"
Own="<?xml version=\"1.0\"?><KeeShare><PrivateKey>MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCqbx6OoGAa2vC/qTRfKeu4TG0fVZTiiVZe3QsGgUYrHoexwLgqOr0bysWr2fMi5v2FVEeEs7zGRAXYtZJXscVRjK62BdIg8rJfg+bCD3Mzwf+FtNniT4eQOczR1csNNJ4ZvtVRO5znJ9ZGrOZIi+lEIsvEqFpDUcIE3YieYCx8/rsc2hdo8aksjs58yFv5xdfnSmcN3sL4mGGHOS+DHFCpWDqYORgRwBVJIo53zo4/ZDj3Ng8Kbi2KcaMS+yRqbSiLsOy0FCh9xTis0ZLIzsonT80rUBxMchs2rKFKXvoF0RGvCns3y6EsfLijdTQhQLAhgtvKTlBkPdoPfCdf3VidAgMBAAECggEACrw1EIbJhueDgo8F3XimgFVQCkk5t4svBYqmxyIdaVni8i9RaleI0ddT3B8+UVR7Y4qLdrBbk6F1PNEzBpML+rcByjVTpv+ifKGyR0bx2rC9h458quSXhV4eqJju0UYfLz/178fxeh3oQUtite8aIlCOxTRVeygLMINDt7YXF0hZ74f7LmjANYGIGTkzAdMfQdF4jZBrBZlsFdCFUeo7HfxQscSr89XwIDcvOSxawoexatiRzUtuMJjITM6lAtCVwO2Ldke6MBkkvZF6+RX0qp1a3P95K78ZEBof69LQ9/4LFDhVM2Xc7u4SZklk032m3wajHM4Bx56fHhO8o+brgQKBgQDNefwDmWxMdww/lgg/RBdSz6a/iIzdseAVSYUQj/2yFldfjOMQEpCHBd5tZz6h2hfFAlmvRnDmAJIEPAeXj5/bgbu08sGSCPAnhGtwJ+6dw0toNLoS3dAheK9wafpwm1WZDuVNCmXZHxXLayAVhg+Z4oA9JLKToOqbZJWyak8vhwKBgQDUV1Z3oaI5GKB5Za1+QjNp/sm1eNtJHsEfox+V3k9sc8hhHdsiQoqYy7414TViitoZgSQGGX6NPgfAOrzdIuOXXRonpFmBIkTkFyUcBQj+tj+W7QPLN4vZDC3PRHCkh1GbNsFfD++u8uvOMKfHe0lAIGeyR0Z95wVugA55cluXuwKBgB9HCk2h9RJOrNahB/BZdRNt+Hv/VTIJ+YpD/rVetcd+Dx7EW2v+53EmO417wdTxVdzvVqePmW/pdlCesqkne7X2MZSBv2VzZtsdFR2ldnUdXUUngYuNqDjwHgSGnVC21HjQA6eOhaJfUPn9/IxKM+XAzLSB+YzvWcb9sKvP8u3RAoGBALcNJ6Rv+bpA6a5dogfTKCF7HQZNTrUlRxVv+X2oLU3wLlDSfSN2u6ZnFe263Nu7mbMc6iI7/iXi0Km9uSzls8+72h1MiEBTe5IqBbq2+H8kO4NvhbK9itissB0bAgREB2zH8kFyKozmK7QPq8PDG22lwd8lpLZK3xrYWCIIHL+bAoGBAKVogLExSXSFHuIDqZGRKYQmMX3ta2eEHNSzVOn26+o3okkj1a9gZnOYC2gfvhSNrCLVtmC+2N/yOOhRqSZVfTaCNCWE//+l60aQD/N/RskDMB8WcnrrE3kQGmv1LSg0iiO5mQJeSoUO33/hr+A8FikOHnn7oj2yPYcOvkpYWhbQ</PrivateKey><PublicKey><Signer>tobias</Signer><Key>MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCqbx6OoGAa2vC/qTRfKeu4TG0fVZTiiVZe3QsGgUYrHoexwLgqOr0bysWr2fMi5v2FVEeEs7zGRAXYtZJXscVRjK62BdIg8rJfg+bCD3Mzwf+FtNniT4eQOczR1csNNJ4ZvtVRO5znJ9ZGrOZIi+lEIsvEqFpDUcIE3YieYCx8/rsc2hdo8aksjs58yFv5xdfnSmcN3sL4mGGHOS+DHFCpWDqYORgRwBVJIo53zo4/ZDj3Ng8Kbi2KcaMS+yRqbSiLsOy0FCh9xTis0ZLIzsonT80rUBxMchs2rKFKXvoF0RGvCns3y6EsfLijdTQhQLAhgtvKTlBkPdoPfCdf3VidAgMBAAECggEACrw1EIbJhueDgo8F3XimgFVQCkk5t4svBYqmxyIdaVni8i9RaleI0ddT3B8+UVR7Y4qLdrBbk6F1PNEzBpML+rcByjVTpv+ifKGyR0bx2rC9h458quSXhV4eqJju0UYfLz/178fxeh3oQUtite8aIlCOxTRVeygLMINDt7YXF0hZ74f7LmjANYGIGTkzAdMfQdF4jZBrBZlsFdCFUeo7HfxQscSr89XwIDcvOSxawoexatiRzUtuMJjITM6lAtCVwO2Ldke6MBkkvZF6+RX0qp1a3P95K78ZEBof69LQ9/4LFDhVM2Xc7u4SZklk032m3wajHM4Bx56fHhO8o+brgQKBgQDNefwDmWxMdww/lgg/RBdSz6a/iIzdseAVSYUQj/2yFldfjOMQEpCHBd5tZz6h2hfFAlmvRnDmAJIEPAeXj5/bgbu08sGSCPAnhGtwJ+6dw0toNLoS3dAheK9wafpwm1WZDuVNCmXZHxXLayAVhg+Z4oA9JLKToOqbZJWyak8vhwKBgQDUV1Z3oaI5GKB5Za1+QjNp/sm1eNtJHsEfox+V3k9sc8hhHdsiQoqYy7414TViitoZgSQGGX6NPgfAOrzdIuOXXRonpFmBIkTkFyUcBQj+tj+W7QPLN4vZDC3PRHCkh1GbNsFfD++u8uvOMKfHe0lAIGeyR0Z95wVugA55cluXuwKBgB9HCk2h9RJOrNahB/BZdRNt+Hv/VTIJ+YpD/rVetcd+Dx7EW2v+53EmO417wdTxVdzvVqePmW/pdlCesqkne7X2MZSBv2VzZtsdFR2ldnUdXUUngYuNqDjwHgSGnVC21HjQA6eOhaJfUPn9/IxKM+XAzLSB+YzvWcb9sKvP8u3RAoGBALcNJ6Rv+bpA6a5dogfTKCF7HQZNTrUlRxVv+X2oLU3wLlDSfSN2u6ZnFe263Nu7mbMc6iI7/iXi0Km9uSzls8+72h1MiEBTe5IqBbq2+H8kO4NvhbK9itissB0bAgREB2zH8kFyKozmK7QPq8PDG22lwd8lpLZK3xrYWCIIHL+bAoGBAKVogLExSXSFHuIDqZGRKYQmMX3ta2eEHNSzVOn26+o3okkj1a9gZnOYC2gfvhSNrCLVtmC+2N/yOOhRqSZVfTaCNCWE//+l60aQD/N/RskDMB8WcnrrE3kQGmv1LSg0iiO5mQJeSoUO33/hr+A8FikOHnn7oj2yPYcOvkpYWhbQ</Key></PublicKey></KeeShare>\n"
QuietSuccess=true
[PasswordGenerator]
AdditionalChars=
ExcludedChars=
Length=20
LowerCase=true
SpecialChars=false
UpperCase=true
[Security]
ClearClipboard=false
LockDatabaseIdle=false
@@ -0,0 +1,2 @@
background_opacity .7
window_margin_width 5
+39
View File
@@ -0,0 +1,39 @@
[Default Applications]
image/jpeg=org.gnome.Loupe.desktop
image/png=org.gnome.Loupe.desktop
x-scheme-handler/tonsite=org.telegram.desktop._bed96f4b363d7710ea902a60dee70952.desktop
hoppscotch=hoppscotch-handler.desktop
x-scheme-handler/http=firefox.desktop
application/xhtml+xml=firefox.desktop
text/html=firefox.desktop
x-scheme-handler/https=firefox.desktop
application/x-desktop=code.desktop
inode/directory=org.gnome.Nautilus.desktop
text/plain=code.desktop
audio/flac=mpv.desktop
image/heif=org.gnome.Loupe.desktop
image/webp=org.gnome.Loupe.desktop
text/csv=libreoffice-calc.desktop
audio/x-opus+ogg=mpv.desktop
text/markdown=code.desktop
[Added Associations]
image/jpeg=org.gnome.Loupe.desktop;
image/png=org.gnome.Loupe.desktop;
x-scheme-handler/tonsite=org.telegram.desktop._bed96f4b363d7710ea902a60dee70952.desktop;
x-scheme-handler/http=firefox.desktop;
application/xhtml+xml=firefox.desktop;
text/html=firefox.desktop;
x-scheme-handler/https=firefox.desktop;
application/x-desktop=code.desktop;
text/plain=code.desktop;
audio/flac=mpv.desktop;
image/heif=org.gnome.Loupe.desktop;
application/octet-stream=code.desktop;
image/webp=org.gnome.Loupe.desktop;
text/csv=libreoffice-calc.desktop;
application/sketch=lunacy.desktop;
audio/x-opus+ogg=mpv.desktop;
application/lunacy=lunacy.desktop;
application/gzip=org.gnome.FileRoller.desktop;
text/markdown=code.desktop;
+1
View File
@@ -0,0 +1 @@
hwdec=auto
@@ -0,0 +1,6 @@
context.modules = [
{
name = libpipewire-module-raop-discover
args = { }
}
]
@@ -0,0 +1,17 @@
context.modules = [
{ name = libpipewire-module-roc-sink
args = {
fec.code = rs8m
#fec.code = disable
remote.ip = 192.168.1.235
remote.source.port = 10001
remote.repair.port = 10002
remote.control.port = 10003
sink.name = "Studio Raspi"
sink.props = {
node.name = "studio-raspi-roc-sink"
node.description = "Studio Raspi"
}
}
}
]
+349
View File
@@ -0,0 +1,349 @@
* {
all: unset;
font-size: 14px;
font-family: "SF Pro Display";
transition: 200ms;
}
trough highlight {
background: #cdd6f4;
}
scale trough {
margin: 0rem 1rem;
background-color: #313244;
min-height: 8px;
min-width: 70px;
}
slider {
background-color: #89b4fa;
}
.floating-notifications.background .notification-row .notification-background {
box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.8), inset 0 0 0 1px #313244;
border-radius: 10px;
margin: 18px;
background-color: rgba(21, 18, 27, .6);
color: #cdd6f4;
padding: 0;
}
.floating-notifications.background .notification-row .notification-background .notification {
padding: 7px;
border-radius: 10px;
}
.floating-notifications.background .notification-row .notification-background .notification.critical {
box-shadow: inset 0 0 7px 0 #f38ba8;
}
.floating-notifications.background .notification-row .notification-background .notification .notification-content {
margin: 7px;
}
.floating-notifications.background .notification-row .notification-background .notification .notification-content .summary {
color: #cdd6f4;
font-weight: bold;
margin-left: 5px;
}
.floating-notifications.background .notification-row .notification-background .notification .notification-content .time {
color: #a6adc8;
}
.floating-notifications.background .notification-row .notification-background .notification .notification-content .body {
color: #cdd6f4;
margin-left: 5px;
}
.floating-notifications.background .notification-row .notification-background .notification > *:last-child > * {
min-height: 3.4em;
}
.floating-notifications.background .notification-row .notification-background .notification > *:last-child > * .notification-action {
border-radius: 10px;
color: #cdd6f4;
background-color: #313244;
box-shadow: inset 0 0 0 1px #45475a;
margin: 7px;
}
.floating-notifications.background .notification-row .notification-background .notification > *:last-child > * .notification-action:hover {
box-shadow: inset 0 0 0 1px #45475a;
background-color: #313244;
color: #cdd6f4;
}
.floating-notifications.background .notification-row .notification-background .notification > *:last-child > * .notification-action:active {
box-shadow: inset 0 0 0 1px #45475a;
background-color: #74c7ec;
color: #cdd6f4;
}
.floating-notifications.background .notification-row .notification-background .close-button {
margin: 7px;
padding: 2px;
border-radius: 6px;
color: #1e1e2e;
background-color: #f38ba8;
}
.floating-notifications.background .notification-row .notification-background .close-button:hover {
background-color: #eba0ac;
color: #1e1e2e;
}
.floating-notifications.background .notification-row .notification-background .close-button:active {
background-color: #f38ba8;
color: #1e1e2e;
}
.control-center {
box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.8), inset 0 0 0 1px #313244;
border-radius: 10px;
margin: 18px;
background-color: rgba(21, 18, 27, .6);
color: #cdd6f4;
padding: 14px;
}
.control-center .widget-title > label {
color: #cdd6f4;
font-size: 1.3em;
font-weight: bold;
}
.control-center .widget-title button {
border-radius: 10px;
color: #cdd6f4;
background-color: #313244;
box-shadow: inset 0 0 0 1px #45475a;
padding: 8px;
}
.control-center .widget-title button:hover {
box-shadow: inset 0 0 0 1px #45475a;
background-color: #585b70;
color: #cdd6f4;
}
.control-center .widget-title button:active {
box-shadow: inset 0 0 0 1px #45475a;
background-color: #74c7ec;
color: #1e1e2e;
}
.control-center .notification-row .notification-background {
border-radius: 10px;
color: #cdd6f4;
background-color: #313244;
box-shadow: inset 0 0 0 1px #45475a;
margin-top: 14px;
}
.control-center .notification-row .notification-background .notification {
padding: 7px;
border-radius: 10px;
}
.control-center .notification-row .notification-background .notification.critical {
box-shadow: inset 0 0 7px 0 #f38ba8;
}
.control-center .notification-row .notification-background .notification .notification-content {
margin: 7px;
}
.control-center .notification-row .notification-background .notification .notification-content .summary {
color: #cdd6f4;
font-weight: bold;
margin-left: 5px;
}
.control-center .notification-row .notification-background .notification .notification-content .time {
color: #a6adc8;
}
.control-center .notification-row .notification-background .notification .notification-content .body {
color: #cdd6f4;
margin-left: 5px;
}
.control-center .notification-row .notification-background .notification > *:last-child > * {
min-height: 3.4em;
}
.control-center .notification-row .notification-background .notification > *:last-child > * .notification-action {
border-radius: 10px;
color: #cdd6f4;
background-color: #11111b;
box-shadow: inset 0 0 0 1px #45475a;
margin: 7px;
}
.control-center .notification-row .notification-background .notification > *:last-child > * .notification-action:hover {
box-shadow: inset 0 0 0 1px #45475a;
background-color: #313244;
color: #cdd6f4;
}
.control-center .notification-row .notification-background .notification > *:last-child > * .notification-action:active {
box-shadow: inset 0 0 0 1px #45475a;
background-color: #74c7ec;
color: #cdd6f4;
}
.control-center .notification-row .notification-background .close-button {
margin: 7px;
padding: 2px;
border-radius: 6.3px;
color: #1e1e2e;
background-color: #eba0ac;
}
.close-button {
border-radius: 6.3px;
}
.control-center .notification-row .notification-background .close-button:hover {
background-color: #f38ba8;
color: #1e1e2e;
}
.control-center .notification-row .notification-background .close-button:active {
background-color: #f38ba8;
color: #1e1e2e;
}
.control-center .notification-row .notification-background:hover {
box-shadow: inset 0 0 0 1px #45475a;
background-color: #3f4054;
color: #cdd6f4;
}
.control-center .notification-row .notification-background:active {
box-shadow: inset 0 0 0 1px #45475a;
background-color: #74c7ec;
color: #cdd6f4;
}
.notification.critical progress {
background-color: #f38ba8;
}
.notification.low progress,
.notification.normal progress {
background-color: #89b4fa;
}
.control-center-dnd {
margin-top: 5px;
border-radius: 10px;
background: #313244;
border: 1px solid #45475a;
box-shadow: none;
}
.control-center-dnd:checked {
background: #313244;
}
.control-center-dnd slider {
background: #45475a;
border-radius: 8px;
}
.widget-dnd {
margin: 0px;
font-size: 1.1rem;
}
.widget-dnd > switch {
font-size: initial;
border-radius: 8px;
background: #313244;
border: 1px solid #45475a;
box-shadow: none;
}
.widget-dnd > switch:checked {
background: #313244;
}
.widget-dnd > switch slider {
background: #45475a;
border-radius: 8px;
border: 1px solid #6c7086;
}
.widget-mpris .widget-mpris-player {
background: #313244;
padding: 7px;
}
.widget-mpris .widget-mpris-title {
font-size: 1.2rem;
}
.widget-mpris .widget-mpris-subtitle {
font-size: 0.8rem;
}
.widget-menubar > box > .menu-button-bar > button > label {
font-size: 3rem;
padding: 0.5rem 2rem;
}
.widget-menubar > box > .menu-button-bar > :last-child {
color: #f38ba8;
}
.power-buttons button:hover,
.powermode-buttons button:hover,
.screenshot-buttons button:hover {
background: #313244;
}
.control-center .widget-label > label {
color: #cdd6f4;
font-size: 2rem;
}
.widget-buttons-grid {
padding-top: 1rem;
}
.widget-buttons-grid > flowbox > flowboxchild > button label {
font-size: 2.5rem;
}
.widget-volume {
padding-top: 1rem;
}
.widget-volume label {
font-size: 1.5rem;
color: #74c7ec;
}
.widget-volume trough highlight {
background: #74c7ec;
}
.widget-backlight trough highlight {
background: #f9e2af;
}
.widget-backlight label {
font-size: 1.5rem;
color: #f9e2af;
}
.widget-backlight .KB {
padding-bottom: 1rem;
}
.image {
padding-right: 0.5rem;
}
@@ -0,0 +1,15 @@
[Unit]
Description=Shairport Sync - AirPlay Audio Receiver
After=sound.target
#Requires=avahi-daemon.service
#After=avahi-daemon.service
Wants=network-online.target
After=network.target network-online.target
[Service]
ExecStart=/usr/bin/shairport-sync --log-to-syslog
#User=shairport-sync
#Group=shairport-sync
[Install]
WantedBy=default.target
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,217 @@
{
"layer": "top",
"position": "top",
"mod": "dock",
"exclusive": true,
"passthrough": false,
"gtk-layer-shell": true,
"height": 28,
"modules-left": [
"clock",
"custom/weather",
"hyprland/workspaces",
"custom/apps",
"custom/files"
],
"modules-center": [
"hyprland/window"
],
"modules-right": [
"tray",
"custom/network",
"temperature",
"cpu",
"memory",
"battery",
"custom/studio-sound",
"bluetooth",
"wireplumber",
"custom/hyprsunset",
"custom/notificationbar",
"privacy"
],
"privacy": {
"icon-spacing": 4,
"icon-size": 13,
"transition-duration": 250,
"modules": [
{
"type": "screenshare",
"tooltip": true,
"tooltip-icon-size": 24
},
{
"type": "audio-in",
"tooltip": true,
"tooltip-icon-size": 24
}
],
"ignore-monitor": true
},
"hyprland/workspaces": {
"format": "{icon}",
"on-scroll-up": "hyprctl dispatch workspace e+1",
"on-scroll-down": "hyprctl dispatch workspace e-1",
"format-icons": {
"1": "1",
"2": "2",
"3": "3",
"4": "4",
"5": "5"
},
"persistent_workspaces": {
"*": 1
}
},
"hyprland/window": {
"format": "{}",
"separate-outputs": true
},
"custom/apps": {
"format": "Apps",
"tooltip": false,
"on-click": "wofi --show drun"
},
"custom/files": {
"format": "Files",
"tooltip": false,
"on-click": "nautilus"
},
"custom/weather": {
"tooltip": true,
"format": "{}",
"interval": 3600,
"exec": "~/.config/waybar/scripts/waybar-wttr.py",
"return-type": "json"
},
"temperature": {
"thermal-zone": 2,
"hwmon-path": "/sys/class/hwmon/hwmon5/temp1_input",
"critical-threshold": 80,
"format-critical": " {temperatureC}°C",
"format": " {temperatureC}°C",
"interval": 2,
"tooltip": true
},
"cpu": {
"format": " {usage}%",
"tooltip": true,
"interval": 2,
"states": {
"warning": 70,
"critical": 90
}
},
"memory": {
"format": " {}%",
"format-alt": " {used:0.1f}G/{total:0.1f}G",
"tooltip": true,
"tooltip-format": "Used: {used:0.2f}GB ({percentage}%)\nAvailable: {avail:0.2f}GB\nTotal: {total:0.2f}GB",
"interval": 2,
"states": {
"warning": 70,
"critical": 90
}
},
"tray": {
"icon-size": 16,
"spacing": 25,
"icons": {
"blueman": "/usr/share/icons/WhiteSur-dark/devices@2x/32/network-bluetooth.svg",
"nm-applet": "/usr/share/icons/WhiteSur-dark/devices@2x/24/network-wired.svg",
"pasystray": "/usr/share/icons/WhiteSur-dark/devices@2x/16/audio-speakers.svg"
}
},
"custom/notificationbar": {
"format": "",
"on-click": "swaync-client -t"
},
"clock": {
"timezone": "Europe/Berlin",
"format": "{:%H:%M %a, %b %e}",
"tooltip-format": "<big>{:%Y %B}</big>\n<tt>{calendar}</tt>"
},
"backlight": {
"device": "intel_backlight",
"format": "{icon} {percent}%",
"format-icons": [
"󰃞",
"󰃟",
"󰃠"
],
"on-scroll-up": "brightnessctl -q set 1%+",
"on-scroll-down": "brightnessctl -q set 1%-"
},
"battery": {
"states": {
"good": 95,
"warning": 20,
"critical": 10
},
"format": "{icon} {capacity}%",
"format-charging": " {capacity}%",
"format-plugged": " {capacity}%",
"format-alt": "{time} {icon}",
"format-icons": [
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
""
]
},
"wireplumber": {
"format": " {volume}%",
"format-muted": "",
"on-click": "qpwgraph",
"max-volume": 100,
"scroll-step": 0.2
},
"custom/network": {
"exec": "~/.config/waybar/scripts/network.sh",
"return-type": "json",
"interval": 2,
"format": "{}"
//"on-click": "nmcli device wifi list",
//"on-click-right": "nm-connection-editor"
},
"custom/hyprsunset": {
"format": "{}",
"exec": "~/.config/waybar/scripts/hyprsunset.sh",
"on-click": "~/.config/waybar/scripts/hyprsunset.sh toggle",
"signal": 8,
"tooltip": true,
"return-type": "json"
},
"custom/studio-sound": {
"format": "{}",
"exec": "~/.config/waybar/scripts/studio-sound.py",
"on-click": "~/.config/waybar/scripts/studio-sound.py toggle",
"interval": 30,
"return-type": "json",
"tooltip": true
},
"bluetooth": {
"format": " {status}",
"format-disabled": "",
"format-connected": " {num_connections}",
"tooltip-format": "{device_alias}",
"tooltip-format-connected": " {device_enumerate}",
"tooltip-format-enumerate-connected": "{device_alias}"
}
}
+63
View File
@@ -0,0 +1,63 @@
#!/bin/bash
# Waybar Hyprsunset Module Script
# Place this in ~/.config/waybar/scripts/hyprsunset.sh
# Make executable: chmod +x ~/.config/waybar/scripts/hyprsunset.sh
TEMP=3500 # Default temperature when enabled
STATE_FILE="/tmp/hyprsunset_state"
# Initialize state file if it doesn't exist
if [ ! -f "$STATE_FILE" ]; then
echo "disabled" > "$STATE_FILE"
fi
get_status() {
# Check if hyprsunset is currently active
if [ -f "$STATE_FILE" ]; then
state=$(cat "$STATE_FILE" 2>/dev/null)
if [ "$state" = "enabled" ]; then
echo "enabled"
else
echo "disabled"
fi
else
echo "disabled"
fi
}
toggle_hyprsunset() {
current_status=$(get_status)
if [ "$current_status" = "enabled" ]; then
# Disable hyprsunset
hyprctl hyprsunset identity
echo "disabled" > "$STATE_FILE"
else
# Enable hyprsunset
hyprctl hyprsunset temperature "$TEMP"
echo "enabled" > "$STATE_FILE"
fi
# Signal Waybar to update the module
pkill -SIGRTMIN+8 waybar
}
output_json() {
status=$(get_status)
if [ "$status" = "enabled" ]; then
printf '{"text":"","tooltip":"Sunset: ON (%sK)","class":"enabled"}\n' "$TEMP"
else
printf '{"text":"","tooltip":"Sunset: OFF","class":"disabled"}\n'
fi
}
case "$1" in
"toggle")
toggle_hyprsunset
;;
*)
output_json
;;
esac
+112
View File
@@ -0,0 +1,112 @@
#!/bin/bash
INTERFACE="br0"
TEMP_FILE="/tmp/waybar_network_$INTERFACE"
MAX_AGE=10
# Function to format bytes/s to human readable with max 2 digits
format_rate() {
local rate=$1
local unit="K"
local value
# Convert to KB/s first
value=$(( (rate * 10) / 1024 ))
# If KB/s would be >= 1000 (100.0K), convert to MB/s
if [ $value -ge 1000 ]; then
unit="M"
value=$(( (rate * 10) / 1048576 )) # 1024*1024
# If MB/s would be >= 1000 (100.0M), convert to GB/s
if [ $value -ge 1000 ]; then
unit="G"
value=$(( (rate * 10) / 1073741824 )) # 1024*1024*1024
fi
fi
# Split into whole and decimal parts
local whole=$((value / 10))
local decimal=$((value % 10))
# Format with appropriate spacing
if [ $whole -lt 10 ]; then
printf "%d.%d%s" "$whole" "$decimal" "$unit"
else
printf "%2d%s" "$whole" "$unit"
fi
}
# Check if interface exists
if [ ! -d "/sys/class/net/$INTERFACE" ]; then
echo '{"text":"󰈀 No Interface","tooltip":"Interface '$INTERFACE' not found"}'
exit 1
fi
# Get current values
RX_BYTES=$(cat /sys/class/net/$INTERFACE/statistics/rx_bytes)
TX_BYTES=$(cat /sys/class/net/$INTERFACE/statistics/tx_bytes)
CURRENT_TIME=$(date +%s)
# Check if temp file exists and is recent
TEMP_FILE_VALID=0
if [ -f "$TEMP_FILE" ]; then
read PREV_RX PREV_TX PREV_TIME < "$TEMP_FILE"
TIME_DIFF=$((CURRENT_TIME - PREV_TIME))
# Accept temp file if it's recent (0 seconds is OK, negative or too old is not)
if [ $TIME_DIFF -ge 0 ] && [ $TIME_DIFF -le $MAX_AGE ]; then
TEMP_FILE_VALID=1
fi
fi
# If no valid temp file, initialize
if [ $TEMP_FILE_VALID -eq 0 ]; then
echo "$RX_BYTES $TX_BYTES $CURRENT_TIME" > "$TEMP_FILE"
echo '{"text":"'${INTERFACE}' ↑0.0K ↓0.0K","tooltip":"Upload: 0.0 KB/s\\nDownload: 0.0 KB/s"}'
exit 0
fi
# If TIME_DIFF is 0, return the last calculated result without updating temp file
if [ $TIME_DIFF -eq 0 ]; then
# Try to read cached result from a secondary file
CACHE_FILE="/tmp/waybar_network_cache_$INTERFACE"
if [ -f "$CACHE_FILE" ]; then
cat "$CACHE_FILE"
exit 0
else
# No cache, show 0.0K
echo '{"text":"'${INTERFACE}' ↑0.0K ↓0.0K","tooltip":"Upload: 0.0 KB/s\\nDownload: 0.0 KB/s"}'
exit 0
fi
fi
# Calculate rates (bytes per second)
RX_RATE=$(( (RX_BYTES - PREV_RX) / TIME_DIFF ))
TX_RATE=$(( (TX_BYTES - PREV_TX) / TIME_DIFF ))
# Handle negative values (counter reset) or unrealistic high values
if [ $RX_RATE -lt 0 ] || [ $RX_RATE -gt 1073741824 ]; then RX_RATE=0; fi
if [ $TX_RATE -lt 0 ] || [ $TX_RATE -gt 1073741824 ]; then TX_RATE=0; fi
# Format rates with auto-scaling
TX_FORMATTED=$(format_rate $TX_RATE)
RX_FORMATTED=$(format_rate $RX_RATE)
# Calculate tooltip values (always in KB/s for consistency)
RX_KB_TENTHS=$(( (RX_RATE * 10) / 1024 ))
TX_KB_TENTHS=$(( (TX_RATE * 10) / 1024 ))
RX_WHOLE=$((RX_KB_TENTHS / 10))
RX_DECIMAL=$((RX_KB_TENTHS % 10))
TX_WHOLE=$((TX_KB_TENTHS / 10))
TX_DECIMAL=$((TX_KB_TENTHS % 10))
# Format output with auto-scaled units
RESULT=$(printf '{"text":"'${INTERFACE}' ↑%4s ↓%4s","tooltip":"Upload: %d.%d KB/s\\nDownload: %d.%d KB/s"}' \
"$TX_FORMATTED" "$RX_FORMATTED" \
"$TX_WHOLE" "$TX_DECIMAL" "$RX_WHOLE" "$RX_DECIMAL")
echo "$RESULT"
# Store current values for next iteration AND cache the result
echo "$RX_BYTES $TX_BYTES $CURRENT_TIME" > "$TEMP_FILE"
echo "$RESULT" > "/tmp/waybar_network_cache_$INTERFACE"
+78
View File
@@ -0,0 +1,78 @@
#!/bin/bash
INTERFACE="br0"
TEMP_FILE="/tmp/waybar_network_$INTERFACE"
MAX_AGE=10
# Check if interface exists
if [ ! -d "/sys/class/net/$INTERFACE" ]; then
echo '{"text":"󰈀 No Interface","tooltip":"Interface '$INTERFACE' not found"}'
exit 1
fi
# Get current values
RX_BYTES=$(cat /sys/class/net/$INTERFACE/statistics/rx_bytes)
TX_BYTES=$(cat /sys/class/net/$INTERFACE/statistics/tx_bytes)
CURRENT_TIME=$(date +%s)
# Check if temp file exists and is recent
TEMP_FILE_VALID=0
if [ -f "$TEMP_FILE" ]; then
read PREV_RX PREV_TX PREV_TIME < "$TEMP_FILE"
TIME_DIFF=$((CURRENT_TIME - PREV_TIME))
# Accept temp file if it's recent (0 seconds is OK, negative or too old is not)
if [ $TIME_DIFF -ge 0 ] && [ $TIME_DIFF -le $MAX_AGE ]; then
TEMP_FILE_VALID=1
fi
fi
# If no valid temp file, initialize
if [ $TEMP_FILE_VALID -eq 0 ]; then
echo "$RX_BYTES $TX_BYTES $CURRENT_TIME" > "$TEMP_FILE"
echo '{"text":"'${INTERFACE}' ↑ 0.0K ↓ 0.0K","tooltip":"Upload: 0.0 KB/s\\nDownload: 0.0 KB/s"}'
exit 0
fi
# If TIME_DIFF is 0, return the last calculated result without updating temp file
if [ $TIME_DIFF -eq 0 ]; then
# Try to read cached result from a secondary file
CACHE_FILE="/tmp/waybar_network_cache_$INTERFACE"
if [ -f "$CACHE_FILE" ]; then
cat "$CACHE_FILE"
exit 0
else
# No cache, show 0.0K
echo '{"text":"'${INTERFACE}' ↑ 0.0K ↓ 0.0K","tooltip":"Upload: 0.0 KB/s\\nDownload: 0.0 KB/s"}'
exit 0
fi
fi
# Calculate rates (bytes per second)
RX_RATE=$(( (RX_BYTES - PREV_RX) / TIME_DIFF ))
TX_RATE=$(( (TX_BYTES - PREV_TX) / TIME_DIFF ))
# Handle negative values (counter reset) or unrealistic high values
if [ $RX_RATE -lt 0 ] || [ $RX_RATE -gt 1073741824 ]; then RX_RATE=0; fi
if [ $TX_RATE -lt 0 ] || [ $TX_RATE -gt 1073741824 ]; then TX_RATE=0; fi
# Convert to KB/s with one decimal place
RX_KB_TENTHS=$(( (RX_RATE * 10) / 1024 ))
TX_KB_TENTHS=$(( (TX_RATE * 10) / 1024 ))
# Split into whole and decimal parts
RX_WHOLE=$((RX_KB_TENTHS / 10))
RX_DECIMAL=$((RX_KB_TENTHS % 10))
TX_WHOLE=$((TX_KB_TENTHS / 10))
TX_DECIMAL=$((TX_KB_TENTHS % 10))
# Format output with fixed width
RESULT=$(printf '{"text":"'${INTERFACE}' ↑%2d.%dK ↓%2d.%dK","tooltip":"Upload: %d.%d KB/s\\nDownload: %d.%d KB/s"}' \
"$TX_WHOLE" "$TX_DECIMAL" "$RX_WHOLE" "$RX_DECIMAL" \
"$TX_WHOLE" "$TX_DECIMAL" "$RX_WHOLE" "$RX_DECIMAL")
echo "$RESULT"
# Store current values for next iteration AND cache the result
echo "$RX_BYTES $TX_BYTES $CURRENT_TIME" > "$TEMP_FILE"
echo "$RESULT" > "/tmp/waybar_network_cache_$INTERFACE"
+76
View File
@@ -0,0 +1,76 @@
#!/usr/bin/env python3
"""
Waybar module for controlling Studio Sound power outlet
Toggles power on click and shows current status
"""
import json
import requests
import sys
import os
STATUS_URL = 'http://192.168.1.75/cm?cmnd=status'
TOGGLE_URL = 'http://192.168.1.75/ay?o=1'
CACHE_FILE = '/tmp/studio_sound_status.json'
TIMEOUT = 2 # seconds
def get_status():
"""Fetch the current power status from the device"""
try:
response = requests.get(STATUS_URL, timeout=TIMEOUT)
response.raise_for_status()
data = response.json()
return data.get('Status', {}).get('Power', 0) == 1
except:
# Return cached status if available
if os.path.exists(CACHE_FILE):
try:
with open(CACHE_FILE, 'r') as f:
cached = json.load(f)
return cached.get('power', False)
except:
pass
return False
def toggle_power():
"""Toggle the power state"""
try:
requests.get(TOGGLE_URL, timeout=TIMEOUT)
# Give device time to process
import time
time.sleep(0.5)
return get_status()
except:
return False
def save_cache(power_state):
"""Save current state to cache file"""
try:
with open(CACHE_FILE, 'w') as f:
json.dump({'power': power_state}, f)
except:
pass
def main():
# Check if this is a click event
if len(sys.argv) > 1 and sys.argv[1] == 'toggle':
power_state = toggle_power()
else:
power_state = get_status()
# Save to cache
save_cache(power_state)
# Output JSON for waybar
output = {
"text": "Studio " if power_state else "Studio ",
"tooltip": f"Studio Sound: {'ON' if power_state else 'OFF'}",
"class": "studio-sound-on" if power_state else "studio-sound-off",
"alt": "on" if power_state else "off"
}
print(json.dumps(output))
sys.stdout.flush()
if __name__ == "__main__":
main()
+213
View File
@@ -0,0 +1,213 @@
* {
border: none;
border-radius: 0;
/*font-family: "SF Pro Display", "FontAwesome";*/
font-family: "SF Mono", "FontAwesome";
font-weight: 600;
font-size: 13px;
min-height: 0;
}
window#waybar {
background: rgba(21, 18, 27, 0.36);
}
#privacy-item, #privacy-item > * {
color: #ffae00;
}
tooltip {
background: #1e1e2e;
border-radius: 10px;
border-width: 2px;
border-style: solid;
border-color: #11111b;
}
.modules-left {
margin-left: 10px;
}
.modules-right {
margin-right: 10px;
}
#workspaces {
margin-left: 10px;
padding-right: 0px;
padding-left: 5px;
}
#workspaces button {
padding: 2px 10px;
}
#workspaces button.active {
background-color: rgba(0,0,0,0.3);
}
#workspaces button:hover {
box-shadow: none;
text-shadow: none;
background: none;
background-color: rgba(255,255,255,0.1);
}
#custom-power_profile,
#custom-weather,
#custom-moon,
#custom-wallpaper,
#custom-studio-sound,
#custom-apps,
#custom-files,
#custom-hyprsunset,
#window,
#clock,
#battery,
#pulseaudio,
#custom-network,
#bluetooth,
#temperature,
#cpu,
#memory,
#wireplumber,
#workspaces,
#tray,
#custom-notificationbar,
#backlight,
#privacy {
opacity: 0.95;
padding: 0px 10px;
margin: 0px;
margin-top: 0px;
/*border: 2px solid red;*/
}
#custom-files {
border-radius: 0px 10px 10px 0px;
}
#wireplumber {
min-width: 50px;
}
#custom-network {
min-width: 110px;
border-radius: 10px 0px 0px 10px;
}
#custom-studio-sound {
border-radius: 10px 0px 0px 10px;
min-width: 62px;
}
#memory {
min-width: 45px;
color: #eba0ac;
border-radius: 0px 10px 10px 0px;
}
#cpu {
min-width: 50px;
color: #c3eba0;
}
#temperature {
min-width: 50px;
color: #89b4fa;
}
#backlight {
border-radius: 10px 0px 0px 10px;
}
#tray {
border-radius: 10px;
margin-right: 10px;
}
#tray > .active,
#tray > .passive {
margin-right: 100px;
padding-left: 100px;
}
#custom-power_profile {
color: #a6e3a1;
border-left: 0px;
border-right: 0px;
}
#window {
border-radius: 10px;
margin-left: 60px;
margin-right: 60px;
}
#clock {
border-radius: 10px 0px 0px 10px;
border-right: 0px;
}
#network {
border-radius: 10px 0px 0px 10px;
border-left: 0px;
border-right: 0px;
}
#bluetooth {
min-width: 17px;
}
#battery {
margin-right: 0px;
padding: 0 10px;
border-left: 0px;
}
#battery.warning {
color: #FFA500;
}
#battery.critical {
color: #F00;
}
/* Menu styling */
menu {
border-radius: 8px;
background: rgba(43, 48, 59, 0.95);
color: #ffffff;
/*border: 1px solid rgba(100, 114, 125, 0.3);*/
border-style: none;
padding: 4px 0;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
}
window decoration{
border-style: none;
box-shadow: none;
}
menuitem {
border-radius: 4px;
padding: 8px 16px;
margin: 2px 4px;
transition: background-color 0.2s ease;
}
menuitem:hover {
background-color: rgba(100, 114, 125, 0.3);
}
menuitem:selected {
background-color: #64727D;
}
/* Separator styling */
separator {
background-color: rgba(100, 114, 125, 0.3);
margin: 4px 8px;
}
@@ -0,0 +1,167 @@
* {
border: none;
border-radius: 0;
font-family: "SF Display";
font-weight: bold;
font-size: 12px;
min-height: 0;
}
window#waybar {
background: rgba(21, 18, 27, 0);
color: #cdd6f4;
}
tooltip {
background: #1e1e2e;
border-radius: 10px;
border-width: 2px;
border-style: solid;
border-color: #11111b;
}
#workspaces button {
padding: 2px 5px;
color: #636777;
margin-right: 5px;
}
#workspaces button.active {
background-color: #000;
}
#workspaces button.focused {
color: #a6adc8;
background: #eba0ac;
border-radius: 10px;
}
#workspaces button.urgent {
color: #11111b;
background: #a6e3a1;
border-radius: 10px;
}
#workspaces button:hover {
background: #11111b;
color: #11111b;
border-radius: 5px;
}
#custom-power_profile,
#custom-weather,
#custom-moon,
#custom-wallpaper,
#window,
#clock,
#battery,
#pulseaudio,
#network,
#bluetooth,
#temperature,
#cpu,
#memory,
#workspaces,
#tray,
#backlight {
background: #1e1e2e;
opacity: 0.8;
padding: 0px 10px;
/* margin: 3px 0px; */
margin: 0px;
margin-top: 10px;
border: 1px solid #181825;
}
#memory {
color: #eba0ac;
}
#temperature {
border-radius: 10px 0px 0px 10px;
}
#custom-temperature.critical {
color: #f00;
}
#backlight {
border-radius: 10px 0px 0px 10px;
}
#tray {
border-radius: 10px;
margin-right: 10px;
}
#workspaces {
background: #1e1e2e;
border-radius: 10px;
margin-left: 10px;
padding-right: 0px;
padding-left: 5px;
}
#custom-power_profile {
color: #a6e3a1;
border-left: 0px;
border-right: 0px;
}
#window {
border-radius: 10px;
margin-left: 60px;
margin-right: 60px;
}
#clock {
color: #fab387;
border-radius: 10px 0px 0px 10px;
margin-left: 10px;
border-right: 0px;
}
#network {
color: #f9e2af;
border-radius: 10px 0px 0px 10px;
border-left: 0px;
border-right: 0px;
}
#bluetooth {
color: #89b4fa;
border-radius: 0px 10px 10px 0px;
margin-right: 10px
}
#pulseaudio {
color: #89b4fa;
border-left: 0px;
border-right: 0px;
}
#pulseaudio.microphone {
color: #cba6f7;
border-left: 0px;
border-right: 0px;
border-radius: 0px 10px 10px 0px;
margin-right: 10px;
}
#battery {
color: #a6e3a1;
border-radius: 0 10px 10px 0;
margin-right: 10px;
border-left: 0px;
}
#battery.warning {
color: #FFA500;
}
#battery.critical {
color: #F00;
}
#custom-moon {
border-radius: 0px 10px 10px 0px;
border-right: 0px;
margin-left: 0px;
}
+2
View File
@@ -0,0 +1,2 @@
mode=drun
insensitive=true
+54
View File
@@ -0,0 +1,54 @@
window {
margin: 0px;
border: 2px solid #bd93f9;
background-color: rgba(40,42,54,.5);
border-radius: 13px;
font-family: "SF Pro Display";
}
#input {
margin: 5px;
border: none;
color: #f8f8f2;
background-color: #44475a;
}
#inner-box {
margin: 5px;
border: none;
background-color: rgba(40,42,54,.5);
}
#outer-box {
margin: 5px;
border: none;
background-color: rgba(40,42,54,.5);
}
#scroll {
margin: 0px;
border: none;
}
#text {
margin: 5px;
border: none;
color: #f8f8f2;
}
#entry.activatable #text {
color: #282a36;
}
#entry > * {
color: #f8f8f2;
}
#entry:selected {
background-color: #44475a;
border-radius: 6px;
}
#entry:selected #text {
font-weight: bold;
}
@@ -0,0 +1,9 @@
[Desktop Entry]
Name=Joplin
Comment=Joplin - a note taking and to-do application with synchronization capabilities for Windows, macOS, Linux, Android and iOS.
Exec=env XDG_CURRENT_DESKTOP=GNOME /opt/Joplin/joplin %U --enable-features=UseOzonePlatform --ozone-platform=wayland --enable-wayland-ime
Icon=/usr/share/joplin-desktop/resources/build/icons/128x128.png
Terminal=false
Type=Application
Categories=Application;Office;
StartupWMClass=Joplin
@@ -0,0 +1,8 @@
[Desktop Entry]
Type=Application
Name=Open Stage Control
Comment=Libre and modular OSC / MIDI controller
Exec=open-stage-control
Icon=/opt/open-stage-control/resources/app/assets/logo.png
Categories=Audio;AudioVideo;
Terminal=false
+2
View File
@@ -0,0 +1,2 @@
# openframeworks
export PG_OF_PATH=/home/tobias/ofx/of_v0.12.0_linux64gcc6_release
+3
View File
@@ -0,0 +1,3 @@
if [[ -z $WAYLAND_DISPLAY && $XDG_VTNR == 1 && $(tty) == /dev/tty1 ]]; then
exec ~/scripts/start_hyprland.sh
fi
+46
View File
@@ -0,0 +1,46 @@
# git display, add ${vcs_info_msg_0_} to PROMPT
#autoload -Uz vcs_info
#zstyle ':vcs_info:*' enable git svn
#precmd() {
# vcs_info
#}
export CLICOLOR=1
export LSCOLORS=ExGxBxDxCxEgEdxbxgxcxd
export TERM=xterm-256color
# prompt format and color
PROMPT='%B%F{136}%n@%m%f%b %F{039}%.%f '
#PROMPT='%B%F{002}%m%f%b:%F{039}%.%f %F{039}%f '
# autocompletion case insensitivity
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}'
autoload -Uz compinit && compinit -i
# plugins
source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh
source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
# print all 256 color numbers to use in {}:
# for code in {000..255}; do print -P -- "$code: %F{$code}Color%f"; done
# write a history file
HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=10000
setopt SHARE_HISTORY
setopt HIST_IGNORE_SPACE
alias ls='ls --color=auto'
alias grep='grep --color=auto'
#alias data="cd /volumes/data"
#alias proj="cd /volumes/data/Data/Projects"
# enable jumping by words with ctrl+arrow keys
#bindkey ";5C" forward-word
#bindkey ";5D" backward-word
bindkey "^[[1;5C" forward-word
bindkey "^[[1;5D" backward-word
+30
View File
@@ -0,0 +1,30 @@
#!/bin/zsh
# This script puts the monitors to sleep via dpms.
# Sth in hyprland crashes and creates high gpu usage, if hyprpaper is running
# when a monitor is being turned off and on again.
# Therefore, we kill hyprpaper when turning the monitor off and start it again when turning it on.
export STATUS_FILE="$XDG_RUNTIME_DIR/display.status"
enable_display() {
printf "true" >"$STATUS_FILE"
hyprctl dispatch dpms on
sleep 1
exec hyprpaper
}
disable_display() {
killall hyprpaper
printf "false" >"$STATUS_FILE"
hyprctl dispatch dpms off
}
if ! [ -f "$STATUS_FILE" ]; then
disable_display
else
if [ $(cat "$STATUS_FILE") = "true" ]; then
disable_display
elif [ $(cat "$STATUS_FILE") = "false" ]; then
enable_display
fi
fi
+8
View File
@@ -0,0 +1,8 @@
#!/bin/zsh
JOPLIN_DEST=$(busctl --user list | grep "joplin" | awk '{print $1}' | sort -V | sed -n -e '2p')
if [ -n "$JOPLIN_DEST" ]; then
busctl --user call "$JOPLIN_DEST" /StatusNotifierItem org.kde.StatusNotifierItem Activate ii 0 0
else
exec gtk-launch joplin.desktop
fi
+5
View File
@@ -0,0 +1,5 @@
#!/bin/zsh
#source ~/scripts/set_gamma/set_gamma_table.sh
exec start-hyprland