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.

    • KISSmyOS@feddit.deOP
      link
      fedilink
      arrow-up
      5
      ·
      edit-2
      8 months ago
      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"
          }
      }
      
      • KISSmyOS@feddit.deOP
        link
        fedilink
        arrow-up
        6
        ·
        edit-2
        8 months ago
        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.)