diff --git a/.config/alacritty/alacritty.toml b/.config/alacritty/alacritty.toml index 35b5c57..245a751 100644 --- a/.config/alacritty/alacritty.toml +++ b/.config/alacritty/alacritty.toml @@ -25,4 +25,5 @@ columns = 120 lines = 45 [window.padding] -x = 3 +x = 10 +y = 7 diff --git a/.config/dolphinrc b/.config/dolphinrc index 6780b51..073d5e4 100644 --- a/.config/dolphinrc +++ b/.config/dolphinrc @@ -7,18 +7,17 @@ update_info=dolphin_detailsmodesettings.upd:rename-leading-padding,dolphin_detai ExpandableFolders=false PreviewSize=16 -[ExtractDialog] -2 screens: Height=720 -2 screens: Width=1576 -DirHistory[$e]=$HOME/Downloads/protondrive/ - [General] EditableUrl=true OpenExternallyCalledFolderInNewTab=true ShowFullPath=true +ShowStatusBar=FullWidth Version=202 ViewPropsTimestamp=2024,8,26,16,47,20.342 +[InformationPanel] +dateFormat=ShortFormat + [KFileDialog Settings] Places Icons Auto-resize=false Places Icons Static Size=22 diff --git a/.config/hypr/hyprland.conf b/.config/hypr/hyprland.conf new file mode 100644 index 0000000..56d9b04 --- /dev/null +++ b/.config/hypr/hyprland.conf @@ -0,0 +1,327 @@ +# This is an example Hyprland config file. +# Refer to the wiki for more information. +# https://wiki.hypr.land/Configuring/ + +# Please note not all available settings / options are set here. +# For a full list, see the wiki + +# 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/ +monitor=,preferred,auto,1.0 + + +################# +### AUTOSTART ### +################# + +# Autostart necessary processes (like notifications daemons, status bars, etc.) +# Or execute your favorite apps at launch like this: + +exec-once = systemctl --user start hyprpolkitagent +exec-once = uwsm app -- swaync +exec-once = uwsm app -- waybar +exec-once = uwsm app -- pasystray + + +################### +### 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 = 10 + gaps_out = 20 + + border_size = 1 + + # https://wiki.hypr.land/Configuring/Variables/#variable-types for info about colors + # col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg + col.active_border = rgba(a0a8b7aa) + # col.active_border = rgba(ffffffaa) + 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) + } + + # https://wiki.hypr.land/Configuring/Variables/#blur + blur { + enabled = true + size = 3 + passes = 1 + + vibrancy = 0.1696 + } +} + +# https://wiki.hypr.land/Configuring/Variables/#animations +animations { + enabled = true + + # 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 + + 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, 1.94, almostLinear, fade + animation = workspacesIn, 1, 1.21, almostLinear, fade + animation = workspacesOut, 1, 1.94, almostLinear, fade +} + +# 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 { + pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below + preserve_split = true # You probably want this + force_split = 2 +} + +# 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 = -1 # Set to 0 or 1 to disable the anime mascot wallpapers + disable_hyprland_logo = false # If true disables the random hyprland logo / anime girl background. :( +} + + +############# +### INPUT ### +############# + +# https://wiki.hypr.land/Configuring/Variables/#input +input { + kb_layout = eu + kb_variant = + kb_model = + kb_options = + kb_rules = + + follow_mouse = 2 + + sensitivity = 0 # -1.0 - 1.0, 0 means no modification. + + touchpad { + natural_scroll = true + } +} + +cursor { + no_warps = true +} + +# https://wiki.hypr.land/Configuring/Variables/#gestures +gestures { + workspace_swipe = false +} + +# Example per-device config +# See https://wiki.hypr.land/Configuring/Keywords/#per-device-input-configs for more +# device { +# name = epic-mouse-v1 +# sensitivity = -0.5 +# } + + +################### +### KEYBINDINGS ### +################### + +$mod = SUPER + +# General +bind = $mod, Return, exec, uwsm app -- Alacritty.desktop +bind = $mod, E, exec, uwsm app -- org.kde.dolphin.desktop +bind = $mod, D, exec, rofi -show drun +bind = $mod, F2, exec, rofi -show run +bind = $mod, W, togglegroup, # dwindle +bind = $mod, slash, togglesplit, # dwindle +bind = $mod SHIFT, Q, killactive, +bind = $mod SHIFT, X, exec, uwsm stop +bind = $mod SHIFT, Space, togglefloating, +bind = $mod, F, fullscreen, 1 +bind = $mod SHIFT, F, fullscreen, 0 + +# Change focus +bind = $mod, H, movefocus, l +bind = $mod, L, movefocus, r +bind = $mod, K, movefocus, u +bind = $mod, J, movefocus, d +bind = $mod, N, changegroupactive, f +bind = $mod, P, changegroupactive, b +bind = $mod CTRL, L, focusmonitor, r +bind = $mod CTRL, H, focusmonitor, l + +# Move window +bind = $mod SHIFT, H, movewindoworgroup, l +bind = $mod SHIFT, L, movewindoworgroup, r +bind = $mod SHIFT, K, movewindoworgroup, u +bind = $mod SHIFT, J, movewindoworgroup, d + +# Move active window to a workspace with mainMod + SHIFT + [0-9] +bind = $mod SHIFT, 1, movetoworkspacesilent, 1 +bind = $mod SHIFT, 2, movetoworkspacesilent, 2 +bind = $mod SHIFT, 3, movetoworkspacesilent, 3 +bind = $mod SHIFT, 4, movetoworkspacesilent, 4 +bind = $mod SHIFT, 5, movetoworkspacesilent, 5 +bind = $mod SHIFT, 6, movetoworkspacesilent, 6 +bind = $mod SHIFT, 7, movetoworkspacesilent, 7 +bind = $mod SHIFT, 8, movetoworkspacesilent, 8 +bind = $mod SHIFT, 9, movetoworkspacesilent, 9 +bind = $mod SHIFT, 0, movetoworkspacesilent, 10 + +# Move current workspace +bind = $mod CTRL SHIFT, L, movecurrentworkspacetomonitor, r +bind = $mod CTRL SHIFT, H, movecurrentworkspacetomonitor, l + +# Resize +bind = $mod SHIFT, R, submap, resize +submap = resize +bind = , H, resizeactive, -10 0 +bind = , L, resizeactive, 10 0 +bind = , K, resizeactive, 0 -10 +bind = , J, resizeactive, 0 10 +bind = SHIFT, H, resizeactive, -50 0 +bind = SHIFT, L, resizeactive, 50 0 +bind = SHIFT, K, resizeactive, 0 -50 +bind = SHIFT, J, resizeactive, 0 50 +bind = , R, splitratio, exact 1.0 +bind = , Return, submap, reset +bind = , Escape, submap, reset +submap = reset + +# Switch workspaces with mainMod + [0-9] +bind = $mod, 1, workspace, 1 +bind = $mod, 2, workspace, 2 +bind = $mod, 3, workspace, 3 +bind = $mod, 4, workspace, 4 +bind = $mod, 5, workspace, 5 +bind = $mod, 6, workspace, 6 +bind = $mod, 7, workspace, 7 +bind = $mod, 8, workspace, 8 +bind = $mod, 9, workspace, 9 +bind = $mod, 0, workspace, 10 + +# Special workspace (scratchpad) +bind = $mod, S, togglespecialworkspace, magic +bind = $mod SHIFT, S, movetoworkspace, special:magic + +# Scroll through existing workspaces +bind = $mod, Tab, workspace, m+1 +bind = $mod SHIFT, Tab, workspace, m-1 +bind = ALT, Tab, workspace, previous_per_monitor +bind = $mod, Right, focusmonitor, r +bind = $mod, Left, focusmonitor, l + +# Move/resize windows with mad + LMB/RMB and dragging +bindm = $mod, mouse:272, movewindow +bindm = $mod, 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%- + +# Requires playerctl +bindl = , XF86AudioNext, exec, playerctl next +bindl = , XF86AudioPause, exec, playerctl play-pause +bindl = , XF86AudioPlay, exec, playerctl play-pause +bindl = , XF86AudioPrev, exec, playerctl previous + +# Reload +bind = $mod, R, exec, hyperctl reload + +############################## +### WINDOWS AND WORKSPACES ### +############################## + +# See https://wiki.hypr.land/Configuring/Window-Rules/ for more +# See https://wiki.hypr.land/Configuring/Workspace-Rules/ for workspace rules + +# Example windowrule +# windowrule = float,class:^(kitty)$,title:^(kitty)$ + +# Ignore maximize requests from apps. You'll probably like this. +windowrule = suppressevent maximize, class:.* + +# Fix some dragging issues with XWayland +windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0 diff --git a/.config/kdeglobals b/.config/kdeglobals new file mode 100644 index 0000000..1dfb24a --- /dev/null +++ b/.config/kdeglobals @@ -0,0 +1,152 @@ +[ColorEffects:Disabled] +ChangeSelectionColor= +Color=56,56,56 +ColorAmount=0 +ColorEffect=0 +ContrastAmount=0.65 +ContrastEffect=1 +Enable= +IntensityAmount=0.1 +IntensityEffect=2 + +[ColorEffects:Inactive] +ChangeSelectionColor=true +Color=112,111,110 +ColorAmount=0.025 +ColorEffect=2 +ContrastAmount=0.1 +ContrastEffect=2 +Enable=false +IntensityAmount=0 +IntensityEffect=0 + +[Colors:Button] +BackgroundAlternate=30,87,116 +BackgroundNormal=41,44,48 +DecorationFocus=61,174,233 +DecorationHover=61,174,233 +ForegroundActive=61,174,233 +ForegroundInactive=161,169,177 +ForegroundLink=29,153,243 +ForegroundNegative=218,68,83 +ForegroundNeutral=246,116,0 +ForegroundNormal=252,252,252 +ForegroundPositive=39,174,96 +ForegroundVisited=155,89,182 + +[Colors:Complementary] +BackgroundAlternate=30,87,116 +BackgroundNormal=32,35,38 +DecorationFocus=61,174,233 +DecorationHover=61,174,233 +ForegroundActive=61,174,233 +ForegroundInactive=161,169,177 +ForegroundLink=29,153,243 +ForegroundNegative=218,68,83 +ForegroundNeutral=246,116,0 +ForegroundNormal=252,252,252 +ForegroundPositive=39,174,96 +ForegroundVisited=155,89,182 + +[Colors:Header] +BackgroundAlternate=32,35,38 +BackgroundNormal=41,44,48 +DecorationFocus=61,174,233 +DecorationHover=61,174,233 +ForegroundActive=61,174,233 +ForegroundInactive=161,169,177 +ForegroundLink=29,153,243 +ForegroundNegative=218,68,83 +ForegroundNeutral=246,116,0 +ForegroundNormal=252,252,252 +ForegroundPositive=39,174,96 +ForegroundVisited=155,89,182 + +[Colors:Header][Inactive] +BackgroundAlternate=41,44,48 +BackgroundNormal=32,35,38 +DecorationFocus=61,174,233 +DecorationHover=61,174,233 +ForegroundActive=61,174,233 +ForegroundInactive=161,169,177 +ForegroundLink=29,153,243 +ForegroundNegative=218,68,83 +ForegroundNeutral=246,116,0 +ForegroundNormal=252,252,252 +ForegroundPositive=39,174,96 +ForegroundVisited=155,89,182 + +[Colors:Selection] +BackgroundAlternate=30,87,116 +BackgroundNormal=61,174,233 +DecorationFocus=61,174,233 +DecorationHover=61,174,233 +ForegroundActive=252,252,252 +ForegroundInactive=161,169,177 +ForegroundLink=253,188,75 +ForegroundNegative=176,55,69 +ForegroundNeutral=198,92,0 +ForegroundNormal=252,252,252 +ForegroundPositive=23,104,57 +ForegroundVisited=155,89,182 + +[Colors:Tooltip] +BackgroundAlternate=32,35,38 +BackgroundNormal=41,44,48 +DecorationFocus=61,174,233 +DecorationHover=61,174,233 +ForegroundActive=61,174,233 +ForegroundInactive=161,169,177 +ForegroundLink=29,153,243 +ForegroundNegative=218,68,83 +ForegroundNeutral=246,116,0 +ForegroundNormal=252,252,252 +ForegroundPositive=39,174,96 +ForegroundVisited=155,89,182 + +[Colors:View] +BackgroundAlternate=29,31,34 +BackgroundNormal=20,22,24 +DecorationFocus=61,174,233 +DecorationHover=61,174,233 +ForegroundActive=61,174,233 +ForegroundInactive=161,169,177 +ForegroundLink=29,153,243 +ForegroundNegative=218,68,83 +ForegroundNeutral=246,116,0 +ForegroundNormal=252,252,252 +ForegroundPositive=39,174,96 +ForegroundVisited=155,89,182 + +[Colors:Window] +BackgroundAlternate=41,44,48 +BackgroundNormal=32,35,38 +DecorationFocus=61,174,233 +DecorationHover=61,174,233 +ForegroundActive=61,174,233 +ForegroundInactive=161,169,177 +ForegroundLink=29,153,243 +ForegroundNegative=218,68,83 +ForegroundNeutral=246,116,0 +ForegroundNormal=252,252,252 +ForegroundPositive=39,174,96 +ForegroundVisited=155,89,182 + +[General] +ColorSchemeHash=8ff306d9a93379c74540e00506966df24df1798b + +[KDE] +LookAndFeelPackage=org.kde.breezedark.desktop +ShowDeleteCommand=false + +[PreviewSettings] +EnableRemoteFolderThumbnail=false +MaximumRemoteSize=0 + +[WM] +activeBackground=39,44,49 +activeBlend=252,252,252 +activeForeground=252,252,252 +inactiveBackground=32,36,40 +inactiveBlend=161,169,177 +inactiveForeground=161,169,177 diff --git a/.config/uwsm/default-id b/.config/uwsm/default-id new file mode 100644 index 0000000..1dd96b8 --- /dev/null +++ b/.config/uwsm/default-id @@ -0,0 +1 @@ +hyprland-uwsm.desktop diff --git a/.config/uwsm/env b/.config/uwsm/env new file mode 100644 index 0000000..e70bfc1 --- /dev/null +++ b/.config/uwsm/env @@ -0,0 +1,5 @@ +export XCURSOR_SIZE=24 +export XCURSOR_THEME=breeze_cursors +export GTK_THEME=Adwaita:dark +export QT_QPA_PLATFORM=wayland +export QT_QPA_PLATFORMTHEME=kde diff --git a/.config/waybar/config.jsonc b/.config/waybar/config.jsonc new file mode 100644 index 0000000..e647bea --- /dev/null +++ b/.config/waybar/config.jsonc @@ -0,0 +1,80 @@ +{ + "height": 30, + "reload_style_on_change": true, + "modules-left": [ + "hyprland/workspaces", + "hyprland/submap" + ], + "modules-center": [ + "clock" + ], + "modules-right": [ + "pulseaudio", + "network", + "battery", + "tray", + ], + "clock": { + "format": "{:%H:%M}", + "tooltip-format": "{calendar}", + "calendar": { + "mode" : "month", + "mode-mon-col" : 3, + "weeks-pos" : "left", + "on-scroll" : 1, + "format": { + "months": "{}", + "days": "{}", + "weeks": "{}", + "weekdays": "{}", + "today": "{}" + } + }, + "actions": { + "on-click-right": "mode", + "on-scroll-up": "tz_up", + "on-scroll-down": "tz_down", + "on-scroll-up": "shift_up", + "on-scroll-down": "shift_down" + } + }, + "pulseaudio": { + // "scroll-step": 1, // %, can be a float + "format": "{volume}% {icon} {format_source}", + "format-bluetooth": "{volume}% {icon} {format_source}", + "format-bluetooth-muted": " {icon} {format_source}", + "format-muted": " {format_source}", + "format-source": "{volume}% ", + "format-source-muted": "", + "format-icons": { + "headphone": "", + "hands-free": "", + "headset": "", + "phone": "", + "portable": "", + "car": "", + "default": ["", "", ""] + }, + "on-click": "pavucontrol" + }, + "network": { + "format-wifi": "{icon}", + "format-ethernet": "", + "format-linked": "", + "format-disconnected": "󰤮", + "tooltip-format": "{ifname}: {ipaddr}", + "format-icons": ["󰤯", "󰤟", "󰤢", "󰤥", "󰤨"] + }, + "battery": { + "states": { + "warning": 30, + "critical": 15 + }, + "format": "{icon}", + "format-full": "{icon}", + "format-charging": "{capacity}% 󰂄", + "format-plugged": "{capacity}% ", + "format-alt": "{time} {icon}", + "format-icons": ["", "", "", "", ""] + } +} diff --git a/.config/waybar/style.css b/.config/waybar/style.css new file mode 100644 index 0000000..db3e50e --- /dev/null +++ b/.config/waybar/style.css @@ -0,0 +1,59 @@ +* { + /* `otf-font-awesome` is required to be installed for icons */ + font-family: FontAwesome, Roboto, Helvetica, Arial, sans-serif; + font-size: 14px; +} + +window#waybar { + background-color: #1f2329; + color: #ffffff; +} + +.module { + margin-right: 10px; +} + +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; + box-shadow: inset 0 -3px #a0a8b7; +} + +#workspaces button { + padding: 0 5px; +} + +#workspaces button.active { + border-radius: 0px; + box-shadow: inset 0 -3px #a0a8b7; +} + +#workspaces button.urgent { + background-color: #e2b86b; +} + +#battery.critical:not(.charging) { + color: #f53c3c; +} + +#temperature.critical { + color: #e55561; +} + +#tray > .passive { + -gtk-icon-effect: dim; +} + +#tray > .needs-attention { + -gtk-icon-effect: highlight; + background-color: #e2b86b; +} + diff --git a/.config/xdg-desktop-portal/hyprland-portals.conf b/.config/xdg-desktop-portal/hyprland-portals.conf new file mode 100644 index 0000000..62f3d56 --- /dev/null +++ b/.config/xdg-desktop-portal/hyprland-portals.conf @@ -0,0 +1,3 @@ +[preferred] +default = hyprland;gtk +org.freedesktop.impl.portal.FileChooser = kde diff --git a/.local/share/kxmlgui5/dolphin/dolphinui.rc b/.local/share/kxmlgui5/dolphin/dolphinui.rc new file mode 100644 index 0000000..965e283 --- /dev/null +++ b/.local/share/kxmlgui5/dolphin/dolphinui.rc @@ -0,0 +1,189 @@ + + + + + &File + + + + + + + + + + + + + + + + + + + + + + + + + &Edit + + + + + + + + + + + + + + + + + + + + + + + + + + + + &View + + + + + + + + + + + + + + + + + + + + + + + + + + Location Bar + + + + + + + + &Go + + + + + + + + + + + &Tools + + + + + + + + &Settings + + + + + + + + + + + + &Help + + + + + + + + + + + + + + Main Toolbar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.zprofile b/.zprofile new file mode 100644 index 0000000..a1a21ea --- /dev/null +++ b/.zprofile @@ -0,0 +1,3 @@ +if uwsm check may-start && uwsm select; then + exec uwsm start default +fi diff --git a/setup.sh b/setup.sh index 3770037..f6124df 100755 --- a/setup.sh +++ b/setup.sh @@ -21,18 +21,30 @@ ERROR=false typeset -a PKGS PKGS=( "alacritty" - "dunst" - "fish" - "i3" - "i3lock" - "i3status" - "jq" - "lf" - "picom" - "rofi" - "startx" "tmux" "zsh" + "hyprland" + "uwsm" + "swaync" + "pipewire" + "wireplumber" + "hyprpolkitagent" + "qt5-wayland" + "qt6-wayland" + "hyprlock" + "xdg-desktop-portal-hyprland" + "xdg-desktop-portal-gtk" + "hyprland-qt-support" + "waybar" + "rofi" + "wl-clipboard" + "dolphin" + "pasystray" + "playerctl" + "brightnessctl" + "breeze" + "pavucontrol" + "otf-font-awesome" ) # Define paths to symlink @@ -45,10 +57,12 @@ SYMLINKS=( ".config/foot" ".config/frogminer" ".config/ghostty" + ".config/hypr" ".config/i3" ".config/i3status" ".config/lf" ".config/kde-mimeapps.list" + ".config/kdeglobals" ".config/kglobalshortcutsrc" ".config/klipperrc" ".config/kwinrc" @@ -56,16 +70,21 @@ SYMLINKS=( ".config/rofi" ".config/strawberry" ".config/tmux" + ".config/uwsm" + ".config/waybar" ".config/wezterm" + ".config/xdg-desktop-portal" ".config/yay" ".config/zed" ".local/bin" ".local/share/fonts" ".local/share/konsole" + ".local/share/kxmlgui5/dolphin/dolphinui.rc" ".vimrc" ".xinit-scripts" ".xinitrc" ".Xresources" + ".zprofile" ) typeset -a COPIES @@ -79,17 +98,31 @@ typeset -A SYMLINK_MAP SYMLINK_MAP[zsh/rc]=".zshrc" error() { - msg="$1" + msg="$@" ERROR=true echo "Error: $msg" >&2 } check_packages_installed() { + local -a missing + for pkg in "${PKGS[@]}"; do - if ! type "$pkg" >/dev/null; then - error "missing $pkg" + local -a cmd + + if [ $DISTRO = "Arch Linux" ]; then + cmd=(pacman -Qi "$pkg") + else + cmd=(type "$pkg") + fi + + if ! eval "$cmd[@]" >/dev/null 2>&1; then + missing+=($pkg) fi done + + if [ ${#missing[@]} -gt 0 ]; then + error "missing ${#missing[@]} packages:" "${missing[@]}" + fi } remove_symlink() {