Also eigentlich fand ich kachelnde Fensterführungskräfte immer affig. Aber genauso affig finde ich das manuelle rumschieben und rumziehen von Fenstern mit der Maus, das durchklicken von Dutzenden Einstellungsmenüs in KDE, oder das merkwürdige Verhalten von Gnom.
Gestern war mir dann mal übelst langweilig und ich hab Hyprland ausprobiert. Erstmal eigentlich gar nicht mein Ding:
Anime Tapete als Standard ✅
kantige Sprüche auf dem Schreibtisch, die im Quellkot hartkodiert sind ✅
fette bunte Abstände um alle Fenster die viel zu viel Bildschirmimmobilien verschwenden ✅
richtig miese voreingestelle Gestaltung ✅
Konfiguration über 3 Dateien, eine in Hyprland-Syntax, eine in Jason, 1-n in CSS ✅
kein Autoreittier, keine Sitzungsverwaltung, keine Medientastenfunktion, keine Energieverwaltung, kein Netzwerkverwaltungsknopf, etc. aus dem Karton ✅
diverse AUR-Pakete nötig für grundlegende Funktionalität ✅
Aber wie gesagt, mir war langweilig. Über den Tag hab ich dann nebenher alles eingestellt, installiert, nötige Skripte geschrieben, …
Und jetzt…hab ich den perfekten Schreibtisch. Sieht gut und modern aus, lässt sich komplett mit der Tastatur bedienen (VIM Tastenbindungen), keine Ladezeiten (Hass geht raus an die KDE Zeiger-Animationen), automatische Arbeitsplatzverwaltung, automatische Bildschirmskalierung für eingebauten und neu angeschlossene Bildschirme, etc. etc.
Eigentlich bin ich ja zu alt für den Scheiß, aber mein Schoßoben hat sich noch nie so gut benommen wie jetzt.
War es das wert? Fick Nein! Jedenfalls wenn man einfach nur mit dem Rechner arbeiten will statt an ihm. Aber jetzt hab ich eine Konfiguration die mir genau passt und die ich auch auf jeden anderen Rechner übertragen kann. Und nebenbei hab ich ein Bisschen mehr Jason, CSS und Schlag Schriften gelernt.
Das sieht sehr spannend aus. Und der Nutzername ist wohl doppeldeutiges Programm?
Erstmal eigentlich gar nicht mein Ding:
Anime Tapete als Standard ✅
Wenn du nicht als Jungfrau sterben möchtest, wieso benutzt du dann überhaupt Bogen?
Sarkasmus aus: Weil es die stabilste (nicht im Sinn von “ändert sich nicht” sondern im Sinn von “zerbricht nicht”), hochqualitativste und am einfachsten zu administrierende Distribution ist, die ich bisher ausprobiert habe.
Bisher langfristig ausprobiert habe ich ansonsten: Ubuntu (alle Geschmäcker), Minze, LMDE, Debian (alle Zweige), OffenSUSE (SPRUNG, Taumelkraut und Langsamroller), Filzhut, MX und Schlaffware.
Gut, ich bin verkauft!
deleted by creator
Witzig, genau das Video habe ich mir gestern auch wieder angesehen.
That’s a nice watch you have there. You want me to turn that into a webserver?
Fühl ich einfach.
Die ganze Reihe dieser Videos ist überwiegend großartig, besonders Javascript und Rust.
Und ja, das mit dem Webserver auf der Uhr ist wirklich sehr nachfühlbar.
Danke für’s Teilen der Erfahrungen und deiner Konfiguration! Ich hab lustigerweise die Tage etwas ähnliches gemacht. Es zieht mich immer wieder zu gekachelten Fenster-Verwaltern, aber es hält mich nie lange dort. Hyprland mochte ich aufgrund der Animationen, was jetzt vielleicht erstmal albern wirkt, aber ich finde, sie helfen beim Nachvollziehen der Änderungen, wenn sich die Auslegung ändert.
Am Ende lass ich es dann aber meistens nach einer Stunde oder so wieder sein, weil ich dann doch irgendwie immer besseres zu tun finde als das. Aber der Tag wird kommen.
Magst du deine Punktdateien teilen? Ich wäre sehr interessiert.
hyprland.conf:
monitor=,preferred,auto,auto xwayland { force_zero_scaling =true } env = GDK_SCALE,2 env = XCURSOR_SIZE,32 env = QT_QPA_PLATFORMTHEME,qt6ct exec-once = waybar exec-once = nm-applet --indicator exec-once = /usr/lib/polkit-kde-authentication-agent-1 input { kb_layout = de follow_mouse = 1 touchpad { natural_scroll = yes } sensitivity = 0 # -1.0 to 1.0, 0 means no modification. } general { gaps_in = 0 gaps_out = 0 border_size = 1 col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg col.inactive_border = rgba(595959aa) layout = dwindle allow_tearing = false } decoration { rounding = 0 blur { enabled = true size = 3 passes = 1 } drop_shadow = yes shadow_range = 4 shadow_render_power = 3 col.shadow = rgba(1a1a1aee) } animations { enabled = yes bezier = myBezier, 0.05, 0.9, 0.1, 1.05 animation = windows, 1, 7, myBezier animation = windowsOut, 1, 7, default, popin 80% animation = border, 1, 10, default animation = borderangle, 1, 8, default animation = fade, 1, 7, default animation = workspaces, 1, 6, default } dwindle { pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below preserve_split = yes # you probably want this } master { new_is_master = true } gestures { workspace_swipe = on } misc { force_default_wallpaper = 3 # Set to 0 or 1 to disable the anime mascot wallpapers disable_splash_rendering = true } device { name = epic-mouse-v1 sensitivity = -0.5 } # windowrule = float,class:^(kitty)$ windowrulev2 = suppressevent maximize, class:.* # You'll probably like this. $mainMod = SUPER # Keyboard backlight bind = , xf86KbdBrightnessUp, exec, brightnessctl -d *::kbd_backlight set +33% bind = , xf86KbdBrightnessDown, exec, brightnessctl -d *::kbd_backlight set 33%- # Volume and Media Control bind = , XF86AudioRaiseVolume, exec, pamixer -i 5 bind = , XF86AudioLowerVolume, exec, pamixer -d 5 bind = , XF86AudioMicMute, exec, pamixer --default-source -m bind = , XF86AudioMute, exec, pamixer -t bind = , XF86AudioPlay, exec, playerctl play-pause bind = , XF86AudioPause, exec, playerctl play-pause bind = , XF86AudioNext, exec, playerctl next bind = , XF86AudioPrev, exec, playerctl previous # Screen brightness bind = , XF86MonBrightnessUp, exec, brightnessctl s +5% bind = , XF86MonBrightnessDown, exec, brightnessctl s 5%- # Screenlock bind = SUPER, L, exec, swaylock -f -c 000000 # Clipboard exec-once = wl-paste --type text --watch cliphist store exec-once = wl-paste --type image --watch cliphist store bind = SUPER, V, exec, cliphist list | wofi --dmenu | cliphist decode | wl-copy bind = $mainMod, left, movefocus, l bind = $mainMod, right, movefocus, r bind = $mainMod, up, movefocus, u bind = $mainMod, down, movefocus, d bind = $mainMod, h, movefocus, l bind = $mainMod, l, movefocus, r bind = $mainMod, k, movefocus, u bind = $mainMod, j, movefocus, d 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 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 bindm = $mainMod, mouse:272, movewindow bindm = $mainMod, mouse:273, resizewindow bind = $mainMod SHIFT, Q, killactive, bind = $mainMod CTRL, X, exec, systemctl poweroff bind = $mainMod CTRL, R, exec, systemctl reboot bind = $mainMod, F, togglefloating, bind = $mainMod, P, pseudo, # dwindle bind = $mainMod, S, togglesplit, # dwindle bind = $mainMod, D, exec, bemenu.sh bind = $mainMod, Return, exec, xfce4-terminal bind = $mainMod CTRL, F, workspace, 2 bind = $mainMod CTRL, F, exec, firefox bind = $mainMod CTRL, M, workspace, 3 bind = $mainMod CTRL, M, exec, thunderbird bind = $mainMod CTRL, D, workspace, 4 bind = $mainMod CTRL, D, exec, dolphin bind = $mainMod CTRL, G, workspace, 5 bind = $mainMod CTRL, G, exec, gimp
Waybar config.json:
{ "layer": "top", // Waybar at top layer "position": "top", // Waybar position (top|bottom|left|right) "height": 24, // Waybar height (to be removed for auto height) "spacing": 16, // Gaps between modules (16px) // Choose the order of the modules "modules-left": ["hyprland/workspaces"], "modules-right": ["idle_inhibitor", "pulseaudio", "battery", "clock", "tray"], // Modules configuration "hyprland/workspaces": { "disable-scroll": false, "all-outputs": true, "warp-on-scroll": false, "format": "{name}: {icon}", "format-icons": { "1": "", "2": "", "3": "🖂", "4": "🖿", "5": "", "urgent": "", "focused": "", "default": "" } }, "idle_inhibitor": { "format": "{icon}", "format-icons": { "activated": "", "deactivated": "" } }, "tray": { // "icon-size": 21, "spacing": 10 }, "clock": { // "timezone": "America/New_York", "tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>", "format-alt": "{:%Y-%m-%d}" }, "battery": { "states": { // "good": 95, "warning": 30, "critical": 15 }, "format": "{icon} {capacity}%", "format-charging": " {capacity}%", "format-plugged": " {capacity}%", "format-alt": "{icon} {time}", // "format-good": "", // An empty format will hide the module // "format-full": "", "format-icons": ["", "", "", "", ""] }, "pulseaudio": { "scroll-step": 1, // %, can be a float "format": "{icon} {volume}% {format_source}", "format-bluetooth": " {icon} {volume}% {format_source}", "format-bluetooth-muted": " {icon} {format_source}", "format-muted": " {format_source}", "format-source": " {volume}%", "format-source-muted": "", "format-icons": { "headphone": "", "default": ["", "", ""] }, "on-click": "pavucontrol" } }
Waybar style.css:
* { /* `otf-font-awesome` is required to be installed for icons */ font-family: "Noto Sans CJK KR Regular"; font-size: 13px; min-height: 0; } window#waybar { background: #000000; background-color: #000000; /* border-bottom: 3px solid rgba(100, 114, 125, 0.5); */ color: #ffffff; transition-property: background-color; transition-duration: .5s; } window#waybar.hidden { opacity: 1.0; } #waybar.empty #window { background-color: #000000; } #workspaces { } #window { margin: 2; padding-left: 8; padding-right: 8; background-color: rgba(0,0,0,0.3); font-size:14px; font-weight: bold; } button { /* Use box-shadow instead of border so the text isn't offset */ box-shadow: inset 0 -3px transparent; /* Avoid rounded borders under each button name */ border: none; border-radius: 0; } /* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */ button:hover { background: inherit; border-top: 2px solid #c9545d; } #workspaces button { padding: 0 4px; color:#ffffff; background-color:#000000; } #workspaces button:hover { padding: 0 4px; color:#ffffff; background-color:#000000; } #workspaces button.focused { box-shadow:#000000; background-color:#000000; color:#ffffff; } #workspaces button.urgent { background-color: #eb4d4b; } #mode { background-color: #ffffff; border-bottom: 3px solid #ffffff; } #clock, #battery, #pulseaudio, #tray, #idle_inhibitor /* If workspaces is the leftmost module, omit left margin */ .modules-left > widget:first-child > #workspaces { margin-left: 0; } /* If workspaces is the rightmost module, omit right margin */ .modules-right > widget:last-child > #workspaces { margin-right: 0; } #clock { font-size:14px; font-weight: bold; } #battery icon { color: red; } #battery.charging, #battery.plugged { color: #ffffff; background-color: #000000; } @keyframes blink { to { background-color: #ffffff; color: #000000; } } #battery.warning:not(.charging) { background-color: #000000; color: #ffffff; animation-name: blink; animation-duration: 0.5s; animation-timing-function: linear; animation-iteration-count: infinite; animation-direction: alternate; } #battery.critical:not(.charging) { background-color: #000000; color: #ffffff; animation-name: blink; animation-duration: 0.5s; animation-timing-function: linear; animation-iteration-count: infinite; animation-direction: alternate; } label:focus { background-color: #000000; } #idle_inhibitor.activated { background-color: #000000; color: #ffffff; } #tray > .passive { -gtk-icon-effect: dim; } #tray > .needs-attention { -gtk-icon-effect: highlight; background-color: #eb4d4b; }
~/.scripts/bemenu.sh (notwendig, damit bemenu mit mehreren Optionen aus Hyprland heraus startet:
#!/bin/bash bemenu-run -i -p 'Menu' --hp 8 --tf "#33CCFF" --hf "#33CCFF" --sf "#33CCFF" --auto-select
.bash_profile:
# # ~/.bash_profile # [[ -f ~/.bashrc ]] && . ~/.bashrc [[ -d $HOME/.scripts ]] && export PATH=$HOME/.scripts:$PATH if [ "$(tty)" = "/dev/tty1" ];then exec Hyprland fi
Abhängigkeiten: pipewire-pulse, waybar, otf-font-awesome, noto-fonts, noto-fonts-extra, noto-fonts-emoji, pavucontrol, networkmanager, polkit, polkit-kde-agent, brightnessctl, pamixer, playerctl, swaylock, cliphist, wofi, bemenu, dolphin, xfce4-terminal, firefox, thunderbird, gimp
Bonus: Mein Update-Skript: ~/scripts/update.sh
#!/bin/bash echo -e "\n...READING NEWS...\n" yay -Pw echo -e "\n...UPDATING MIRRORS...\n" sudo cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.backup sudo reflector --country Germany --latest 5 --sort rate --save /etc/pacman.d/mirrorlist echo -e "\n...UPDATING REPO PACKAGES...\n" sudo pacman -Syu echo -e "\n...UPDATING AUR...\n" yay -Syu echo -e "\n...ORPHANED PACKAGES...\n" pacman -Qtd echo -e "\n...PACKAGES NOT IN ARCH REPO...\n" pacman -Qm echo -e "\n...NEW CONFIG FILES...\n" sudo find /etc -name *.pac* echo "DONE 😊"
Abhängigkeiten: yay, reflector, rsync, noto-fonts-emoji
(Anmerkung: Ich hab nur gesagt, dass die Konfiguration mich einen Tag gekostet hat, nicht dass ich gut darin bin.)