From 40192af6e2e8b45aee1589599bfa22452f6e4e95 Mon Sep 17 00:00:00 2001 From: Brad Anderson Date: Tue, 12 Mar 2024 15:25:33 -0700 Subject: [PATCH] Set up laptop, add support for i3+plasma, clean up configs --- bin/startplasma-sway-wayland | 3 + config/i3/autostart.conf | 129 ------ config/i3/config | 45 ++- config/i3/config.d/autostart-local.conf | 40 ++ config/i3/config.d/autostart.conf | 63 +++ config/i3/{ => config.d}/keybindings.conf | 37 +- config/i3/{ => config.d}/theme.conf | 52 ++- config/i3/{ => config.d}/workspace.conf | 30 +- config/i3/scripts/keyhint-2 | 2 +- config/libinput-gestures.conf | 7 + config/picom-extended.conf | 101 +++++ config/picom.conf | 459 +++------------------- config/systemd/user/plasma-i3.service | 11 - install.sh | 99 ++++- packages/arch.global | 15 + packages/aur.global | 1 + wayland-sessions/plasma-sway.desktop | 7 + xsessions/plasma-i3.desktop | 6 + 18 files changed, 469 insertions(+), 638 deletions(-) create mode 100755 bin/startplasma-sway-wayland delete mode 100644 config/i3/autostart.conf create mode 100644 config/i3/config.d/autostart-local.conf create mode 100644 config/i3/config.d/autostart.conf rename config/i3/{ => config.d}/keybindings.conf (84%) rename config/i3/{ => config.d}/theme.conf (81%) rename config/i3/{ => config.d}/workspace.conf (53%) create mode 100644 config/libinput-gestures.conf create mode 100644 config/picom-extended.conf delete mode 100644 config/systemd/user/plasma-i3.service create mode 100644 wayland-sessions/plasma-sway.desktop create mode 100644 xsessions/plasma-i3.desktop diff --git a/bin/startplasma-sway-wayland b/bin/startplasma-sway-wayland new file mode 100755 index 0000000..ce98e7e --- /dev/null +++ b/bin/startplasma-sway-wayland @@ -0,0 +1,3 @@ +#!/bin/sh +export KDEWM=/usr/bin/sway +/usr/bin/startplasma-wayland diff --git a/config/i3/autostart.conf b/config/i3/autostart.conf deleted file mode 100644 index 298cb7c..0000000 --- a/config/i3/autostart.conf +++ /dev/null @@ -1,129 +0,0 @@ -############## -# compositor # -############## - -# transparency -# uncomment one of them to be used -# options could need changes, related to used GPU and drivers. -# to find the right setting consult the archwiki or ask at the forum. -# -# xcompmgr: https://wiki.archlinux.org/title/Xcompmgr -# manpage: https://man.archlinux.org/man/xcompmgr.1.en -# install xcompmgr package to use it (yay -S xcompmgr) -#exec --no-startup-id xcompmgr -C -n & -# or an more specialized config like this: -#exec --no-startup-id xcompmgr -c -C -t-5 -l-5 -r4.2 -o.55 & -# -# or: -# -# picom: https://wiki.archlinux.org/title/Picom -# manpage: https://man.archlinux.org/man/picom.1.en -# The default configuration is available in /etc/xdg/picom.conf -# For modifications, it can be copied to ~/.config/picom/picom.conf or ~/.config/picom.conf -# install picom package (yay -S picom) -# start using default config -# exec_always --no-startup-id picom -b -# -# for custom config: -exec_always --no-startup-id picom -b --config ~/.config/picom.conf - -############################################# -# autostart applications/services on login: # -############################################# - -#get auth work with polkit-gnome -exec --no-startup-id /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 - -# dex execute .desktop files + apps using /etc/xdg/autostart. -# when second to i3 a DE is installed or mixed usage of i3 + xfce4 or GNOME -# in this cases better disable dex and use manual starting apps using xdg/autostart -# if enabled you should comment welcome app. -# https://github.com/jceb/dex -#exec --no-startup-id dex -a -s /etc/xdg/autostart/:~/.config/autostart/ -exec --no-startup-id dex --autostart --environment i3 - -# start welcome app -#exec --no-startup-id sh /usr/share/endeavouros/scripts/welcome --startdelay=3 - -# num lock activated -exec --no-startup-id numlockx on - -# configure multiple keyboard layouts and hotkey to switch (Alt+CAPSLOCK in this example) -#exec --no-startup-id setxkbmap -layout 'us,sk' -variant altgr-intl,qwerty -option 'grp:alt_caps_toggle' - -# start conky: -exec_always --no-startup-id conky -c ~/.config/conky/conkyrc-stats - -# start a script to setup displays -# uncomment the next line, use arandr to setup displays and save the file as default: -exec --no-startup-id ~/.screenlayout/default.sh - -# set wallpaper -# exec --no-startup-id sleep 2 && nitrogen --restore -exec --no-startup-id sleep 1 && feh --bg-fill --randomize ~/wallpapers - -# set powersavings for display: -# xset dpms {standby_time} {suspend_time} {off_time} -exec --no-startup-id xset dpms 600 0 0 - -# disable power saving (for example if using xscreensaver) -#exec --no-startup-id xset -dpms - -# use xautolock to use autosuspend rules for mobile devices -# https://wiki.archlinux.org/title/Session_lock#xautolock -#exec --no-startup-id xautolock -time 60 -locker "systemctl suspend" - - -# xscreensaver -# https://www.jwz.org/xscreensaver -#exec --no-startup-id xscreensaver --no-splash - -# Desktop notifications -# dunst config used ~/.config/dunst/dunstrc -# set alternative config if needed: -#exec --no-startup-id /usr/bin/dunst --config ~/.config/dunst/dunstrc -# may need to run dbus-launch explicitly: -#exec --no-startup-id dbus-launch /usr/bin/dunst -exec --no-startup-id /usr/bin/dunst -# alternative if you installed aside with XFCE4: -# exec --no-startup-id /usr/lib/xfce4/notifyd/xfce4-notifyd & - -# autotiling script -# https://github.com/nwg-piotr/autotiling -# `yay -S autotiling ;) (it is in AUR) -exec_always --no-startup-id autotiling - -# Autostart apps as you like -#exec --no-startup-id sleep 2 && xfce4-terminal -#exec --no-startup-id sleep 7 && firefox https://github.com/endeavouros-team/endeavouros-i3wm-setup/blob/main/force-knowledge.md -exec --no-startup-id sleep 7 && firefox https://todo.bradina.haus/ -exec --no-startup-id sleep 7 && Plexamp.AppImage -assign [class="Plexamp"] 2 -exec --no-startup-id sleep 7 && element-desktop-nightly -assign [class="Element-Nightly"] 2 -#exec --no-startup-id openrgb - -# Scratchpad with notes -exec --no-startup-id alacritty --title notebook -e zsh -c 'tmuxinator start notes' -for_window [class="^Alacritty$" title="notebook"] move scratchpad, scratchpad hide - -# automatic set focus new window if it opens on another workspace than the current: -#for_window [class=Alacritty] focus -#for_window [class=(?i)firefox] focus -#for_window [class=Thunar] focus -#exec --no-startup-id sleep 3 && thunar - -############### -# system tray # -############### -# if you do not use dex: exec --no-startup-id dex --autostart --environment i3 -# you need to have tray apps started manually one by one: - -# start blueberry app for managing bluetooth devices from tray: -#exec --no-startup-id blueberry-tray - -# networkmanager-applet -exec --no-startup-id nm-applet - -# clipman-applet -exec --no-startup-id xfce4-clipman diff --git a/config/i3/config b/config/i3/config index 9ff73de..fa56469 100644 --- a/config/i3/config +++ b/config/i3/config @@ -1,24 +1,27 @@ -# exec --no-startup-id ~/set_once.sh -# This file is a modified version based on default i3-config-wizard config -# source is available here: -# https://raw.githubusercontent.com/endeavouros-team/endeavouros-i3wm-setup/master/.config/i3/config -# Maintainer: joekamprad [joekamprad //a_t// endeavouros.com] -# https://endeavouros.com -# # iconic font icon search: https://fontawesome.com/v4.7/cheatsheet/ -# -# --> to update this run the following command (will backup existing setup file) -# wget --backups=1 https://raw.githubusercontent.com/endeavouros-team/endeavouros-i3wm-setup/main/.config/i3/config -P ~/.config/i3/ -# -# Endeavouros-i3 config file -# Source for complete framework of our i3 config and theming here: https://github.com/endeavouros-team/endeavouros-i3wm-setup -# EndeavourOS wiki holds some Information also: https://discovery.endeavouros.com/window-tiling-managers/i3-wm/ # Please see http://i3wm.org/docs/userguide.html for the official i3 reference! -####################### -# config starts here: # -####################### -include workspace.conf -include keybindings.conf -include autostart.conf -include theme.conf +#################### +# Shared variables # +#################### + +# Define names for default workspaces for which we configure key bindings later on. +# We use variables to avoid repeating the names in multiple places. +#set $ws1 "1:" +#set $ws2 "2:" +#set $ws3 "3:" +#set $ws4 "4:" +#set $ws5 "5:" +set $ws1 "1" +set $ws2 "2" +set $ws3 "3" +set $ws4 "4" +set $ws5 "5" +set $ws6 "6" +set $ws7 "7" +set $ws8 "8" +set $ws9 "9" +set $ws10 "10" + +# Include configs +include config.d/*.conf diff --git a/config/i3/config.d/autostart-local.conf b/config/i3/config.d/autostart-local.conf new file mode 100644 index 0000000..df58ebb --- /dev/null +++ b/config/i3/config.d/autostart-local.conf @@ -0,0 +1,40 @@ +############## +# compositor # +############## + +# transparency +# picom: https://wiki.archlinux.org/title/Picom +# manpage: https://man.archlinux.org/man/picom.1.en +# Enable if not using compositor included with plasma +#exec_always --no-startup-id picom --experimental-backends -b --config ~/.config/picom.conf + +################## +# window manager # +################## + +# Only enable when using i3 without a DE (eg plasma) +# dex execute .desktop files + apps using /etc/xdg/autostart. +#exec --no-startup-id dex --autostart --environment i3 + + +################ +# applications # +################ + +#exec_always --no-startup-id conky -c ~/.config/conky/conkyrc-stats + +#exec --no-startup-id sleep 7 && firefox https://todo.bradina.haus/ + +#exec --no-startup-id sleep 7 && Plexamp.AppImage +#assign [class="Plexamp"] 2 + +#exec --no-startup-id sleep 7 && element-desktop-nightly +#assign [class="Element-Nightly"] 2 + +#exec --no-startup-id openrgb + +# automatic set focus new window if it opens on another workspace than the current: +#for_window [class=Alacritty] focus +#for_window [class=(?i)firefox] focus +#for_window [class=Thunar] focus +#exec --no-startup-id sleep 3 && thunar diff --git a/config/i3/config.d/autostart.conf b/config/i3/config.d/autostart.conf new file mode 100644 index 0000000..348e48e --- /dev/null +++ b/config/i3/config.d/autostart.conf @@ -0,0 +1,63 @@ +############################################# +# autostart applications/services on login: # +############################################# + +#get auth work with polkit-gnome +exec --no-startup-id /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 + +# num lock activated +exec --no-startup-id numlockx on + +# start a script to setup displays +# use arandr to setup displays and save the file as default: +exec --no-startup-id ~/.screenlayout/default.sh + +# set wallpaper +exec --no-startup-id sleep 1 && feh --bg-fill --randomize ~/wallpapers + +# set powersavings for display if not handled by DE: +# Usage: xset dpms {standby_time} {suspend_time} {off_time} +# exec --no-startup-id xset dpms 600 0 0 + +# disable power saving (for example if using xscreensaver) +#exec --no-startup-id xset -dpms + +# use xautolock to use autosuspend rules for mobile devices +# https://wiki.archlinux.org/title/Session_lock#xautolock +#exec --no-startup-id xautolock -time 60 -locker "systemctl suspend" + + +# xscreensaver +# https://www.jwz.org/xscreensaver +#exec --no-startup-id xscreensaver --no-splash + +# Desktop notifications +# dunst config used ~/.config/dunst/dunstrc +# may need to run dbus-launch explicitly: +#exec --no-startup-id dbus-launch /usr/bin/dunst +exec --no-startup-id /usr/bin/dunst + +# autotiling script +# https://github.com/nwg-piotr/autotiling +# `yay -S autotiling ;) (it is in AUR) +# exec_always --no-startup-id autotiling + +# Scratchpad with notes +# `tmuxinator open notes` first for this to work +exec --no-startup-id alacritty --title notebook -e zsh -c 'tmuxinator start notes' +for_window [class="^Alacritty$" title="notebook"] move scratchpad, scratchpad hide + +############### +# system tray # +############### +# if you do not use dex: exec --no-startup-id dex --autostart --environment i3 +# you need to have tray apps started manually one by one: + +# start blueberry app for managing bluetooth devices from tray: +#exec --no-startup-id blueberry-tray + +# networkmanager-applet +exec --no-startup-id nm-applet + +# clipman-applet +exec --no-startup-id xfce4-clipman diff --git a/config/i3/keybindings.conf b/config/i3/config.d/keybindings.conf similarity index 84% rename from config/i3/keybindings.conf rename to config/i3/config.d/keybindings.conf index a2c993b..97545af 100644 --- a/config/i3/keybindings.conf +++ b/config/i3/config.d/keybindings.conf @@ -169,12 +169,17 @@ bindsym $mod+q kill #bindsym --release button2 kill # exit-menu -bindsym $mod+Shift+e exec --no-startup-id ~/.config/i3/scripts/powermenu +#bindsym $mod+Shift+e exec --no-startup-id ~/.config/i3/scripts/powermenu +# using plasma's logout screen instead of i3's +bindsym $mod+Shift+t exec --no-startup-id qdbus6 org.kde.LogoutPrompt /LogoutPrompt org.kde.LogoutPrompt.promptLogout +#bindsym $mod+Shift+t exec --no-startup-id loginctl kill-session "$USER" +bindsym $mod+Shift+e exec --no-startup-id kill -9 -1 # Lock the system # lock with a picture: #bindsym $mod+l exec --no-startup-id i3lock -i ~/.config/i3/i3-lock-screen.png -p default|win -t # lock by blurring the screen: +# TODO: Update to use plasma lock bindsym $mod+Delete exec --no-startup-id ~/.config/i3/scripts/blur-lock # reload the configuration file @@ -193,8 +198,8 @@ bindsym F1 exec --no-startup-id ~/.config/i3/scripts/keyhint-2 #bindsym XF86MonBrightnessUp exec --no-startup-id xbacklight +10 && notify-send "Brightness - $(xbacklight -get | cut -d '.' -f 1)%" #bindsym XF86MonBrightnessDown exec --no-startup-id xbacklight -10 && notify-send "Brightness - $(xbacklight -get | cut -d '.' -f 1)%" # Backlight setting using dunst osc -bindsym XF86MonBrightnessUp exec --no-startup-id ~/.config/i3/scripts/volume_brightness.sh brightness_up -bindsym XF86MonBrightnessDown exec --no-startup-id ~/.config/i3/scripts/volume_brightness.sh brightness_down +#bindsym XF86MonBrightnessUp exec --no-startup-id ~/.config/i3/scripts/volume_brightness.sh brightness_up +#bindsym XF86MonBrightnessDown exec --no-startup-id ~/.config/i3/scripts/volume_brightness.sh brightness_down # change focus bindsym $mod+h focus left @@ -249,14 +254,17 @@ bindsym $mod+a focus parent bindsym $mod+Shift+n exec --no-startup-id ~/.config/i3/scripts/empty_workspace # Multimedia Keys +# TODO: These will only work if plasma is installed, update to add compatibility with bare i3 # volume # use meta keys without showing osc #bindsym XF86AudioRaiseVolume exec --no-startup-id amixer -D pulse sset Master 5%+ && pkill -RTMIN+1 i3blocks #bindsym XF86AudioLowerVolume exec --no-startup-id amixer -D pulse sset Master 5%- && pkill -RTMIN+1 i3blocks # use meta keys showing osc using dunst -bindsym XF86AudioRaiseVolume exec --no-startup-id ~/.config/i3/scripts/volume_brightness.sh volume_up -bindsym XF86AudioLowerVolume exec --no-startup-id ~/.config/i3/scripts/volume_brightness.sh volume_down +#bindsym XF86AudioRaiseVolume exec --no-startup-id ~/.config/i3/scripts/volume_brightness.sh volume_up +#bindsym XF86AudioLowerVolume exec --no-startup-id ~/.config/i3/scripts/volume_brightness.sh volume_down +bindsym XF86AudioRaiseVolume exec --no-startup-id qdbus6 org.kde.kglobalaccel /component/kmix invokeShortcut "increase_volume" +bindsym XF86AudioLowerVolume exec --no-startup-id qdbus6 org.kde.kglobalaccel /component/kmix invokeShortcut "decrease_volume" # gradular volume control bindsym $mod+XF86AudioRaiseVolume exec --no-startup-id amixer -D pulse sset Master 1%+ && pkill -RTMIN+1 i3blocks @@ -265,14 +273,16 @@ bindsym $mod+XF86AudioLowerVolume exec --no-startup-id amixer -D pulse sset Mast # mute #bindsym XF86AudioMute exec --no-startup-id amixer sset Master toggle && killall -USR1 i3blocks # use meta keys showing osc using dunst -bindsym XF86AudioMute exec --no-startup-id ~/.config/i3/scripts/volume_brightness.sh volume_mute +#bindsym XF86AudioMute exec --no-startup-id ~/.config/i3/scripts/volume_brightness.sh volume_mute +bindsym XF86AudioMute exec --no-startup-id qdbus6 org.kde.kglobalaccel /component/kmix invokeShortcut "mute" # mic mute toggle -bindsym XF86AudioMicMute exec amixer sset Capture toggle +#bindsym XF86AudioMicMute exec amixer sset Capture toggle +bindsym XF86AudioMicMute exec --no-startup-id qdbus6 org.kde.kglobalaccel /component/kmix invokeShortcut "mic_mute" # audio control -# TODO: Play pause doesn't work -bindsym XF86AudioPlay exec --no-startup-id playerctl play +# TODO: Play pause doesn't work on desktop +bindsym XF86AudioPlay exec --no-startup-id playerctl play-pause bindsym XF86AudioPause exec --no-startup-id playerctl pause bindsym XF86AudioNext exec --no-startup-id playerctl next bindsym XF86AudioPrev exec --no-startup-id playerctl previous @@ -286,12 +296,11 @@ bindsym --whole-window $mod+button2 kill bindsym $mod+p exec --no-startup-id /usr/local/bin/switch-audio-port ## App shortcuts +# TODO: dolphin/thunar, Spectacle/scrot bindsym $mod+w exec /usr/bin/firefox -bindsym $mod+n exec /usr/bin/thunar -bindsym Print exec scrot ~/%Y-%m-%d-%T-screenshot.png && notify-send "Screenshot saved to ~/$(date +"%Y-%m-%d-%T")-screenshot.png" -# bindsym $mod+w exec --no-startup-id /usr/bin/firefox -# bindsym $mod+n exec --no-startup-id /usr/bin/thunar -# bindsym Print exec --no-startup-id scrot ~/%Y-%m-%d-%T-screenshot.png && notify-send "Screenshot saved to ~/$(date +"%Y-%m-%d-%T")-screenshot.png" +bindsym $mod+n exec /usr/bin/dolphin +bindsym Print exec scrot ~/Pictures/Screenshots/%Y-%m-%d-%T-screenshot.png && notify-send "Screenshot saved to ~/Pictures/Screenshots/$(date +"%Y-%m-%d-%T")-screenshot.png" +bindsym $mod+Print exec Spectacle # Power Profiles menu switcher (rofi) bindsym $mod+Shift+p exec --no-startup-id ~/.config/i3/scripts/power-profiles diff --git a/config/i3/theme.conf b/config/i3/config.d/theme.conf similarity index 81% rename from config/i3/theme.conf rename to config/i3/config.d/theme.conf index d4b9427..2ec20be 100644 --- a/config/i3/theme.conf +++ b/config/i3/config.d/theme.conf @@ -1,21 +1,18 @@ # Font for window titles. Will also be used by the bar unless a different font # is used in the bar {} block below. -# This font is widely installed, provides lots of unicode glyphs, right-to-left -# text rendering and scalability on retina/hidpi displays (thanks to pango). #font pango: Noto Sans Regular 10 -#font pango: Source Code Pro for Powerline 10 font pango: Liberation Sans Regular 10 -#font pango: Hack 10 -#border indicator on windows: -new_window pixel 5 +# border indicator on windows: +# larger borders are helpful to resize windows with the mouse +default_border pixel 5 # thin borders # hide_edge_borders both # Set inner/outer gaps -gaps inner 20 -gaps outer 20 +gaps inner 10 +gaps outer 10 # show window title bars (not officially supported with i3gaps) #default_border normal @@ -42,17 +39,16 @@ for_window [window_role="About"] floating enable # Plasma for_window [class="yakuake"] floating enable; -for_window [class="lattedock"] floating enable; +for_window [class="systemsettings"] floating enable; for_window [class="plasmashell"] floating enable; -for_window [class="Kmix"] floating enable; border none -for_window [class="kruler"] floating enable; border none for_window [class="Plasma"] floating enable; border none -for_window [class="Klipper"] floating enable; border none -for_window [class="krunner"] floating enable; border none -for_window [class="Plasmoidviewer"] floating enable; border none for_window [title="plasma-desktop"] floating enable; border none -#for_window [class="plasmashell" window_type="notification"] floating enable, border none, move position 1450px 20px -for_window [class="plasmashell" window_type="notification"] floating enable, border none, move position 2050px 35px +for_window [title="win7"] floating enable; border none +for_window [class="krunner"] floating enable; border none +for_window [class="Kmix"] floating enable; border none +for_window [class="Klipper"] floating enable; border none +for_window [class="Plasmoidviewer"] floating enable; border none +for_window [class="plasmashell" window_type="notification"] floating enable, border none, move position 70 ppt 81 ppt no_focus [class="plasmashell" window_type="notification"] for_window [window_role="pop-up"] floating enable @@ -63,8 +59,8 @@ for_window [window_type="dialog"] floating enable for_window [window_type="menu"] floating enable for_window [instance="__scratchpad"] floating enable -# set border of floating window -#for_window [class="Alacritty"] border pixel 10 +# Kill existing Plasma desktop window if it exists +for_window [title="Desktop @ QRect.*"] kill; floating enable; border none # set size of floating window #for_window [window_role="(?i)GtkFileChooserDialog"] resize set 640 480 #to set size of file choose dialog @@ -88,12 +84,13 @@ set $purple #b16286 set $aqua #689d6a set $gray #a89984 set $darkgray #1d2021 +set $white #ebdbb2 # gruvbox # class border backgr text indicator child_border -client.focused $blue $blue $darkgray $purple $darkgray -client.unfocused $darkgray $darkgray $yellow $purple $darkgray -client.focused_inactive $darkgray $darkgray $yellow $purple $darkgray +client.focused $blue $blue $darkgray $aqua $darkgray +client.unfocused $darkgray $darkgray $yellow $aqua $darkgray +client.focused_inactive $darkgray $darkgray $yellow $aqua $darkgray client.urgent $red $red $white $red $red ############################################ @@ -103,10 +100,15 @@ client.urgent $red $red $white $red $red # Start i3bar to display a workspace bar # (plus the system information i3status finds out, if available) bar { + # Don't show the bar since we're using plasma bar, comment if using i3 on its own + mode invisible + #mode hide + hidden_state hide + modifier Mod4 + # TODO: Figure out how to add an applications menu button on the left of bar # font pango: Source Code Pro (monospace) 10 #Noto Sans Regular 10 font pango: Source Code Pro for Powerline 10 - #font pango: Hack Bold 10 status_command i3blocks -c ~/.config/i3/i3blocks.conf position bottom #tray_padding 0 @@ -143,12 +145,6 @@ bar { # output HDMI-0 # position bottom # -# When strip_workspace_numbers is set to yes, -# any workspace that has a name of the form -# “[n][:][NAME]” will display only the name. -#strip_workspace_numbers yes -##strip_workspace_name no -# # colors { # separator $purple # background $darkbluetrans diff --git a/config/i3/workspace.conf b/config/i3/config.d/workspace.conf similarity index 53% rename from config/i3/workspace.conf rename to config/i3/config.d/workspace.conf index 7c3d29e..33c6331 100644 --- a/config/i3/workspace.conf +++ b/config/i3/config.d/workspace.conf @@ -17,30 +17,12 @@ workspace_layout default # configuration for workspace behaviour: # ########################################## -# Define names for default workspaces for which we configure key bindings later on. -# We use variables to avoid repeating the names in multiple places. -#set $ws1 "1:" -#set $ws2 "2:" -#set $ws3 "3:" -#set $ws4 "4:" -#set $ws5 "5:" -set $ws1 "1" -set $ws2 "2" -set $ws3 "3" -set $ws4 "4" -set $ws5 "5" -set $ws6 "6" -set $ws7 "7" -set $ws8 "8" -set $ws9 "9" -set $ws10 "10" - # use workspaces on different displays: # where you have to replace VGA-0/HDMI-0 with the names for your displays # you can get from xrandr command -workspace $ws1 output DP-2 -workspace $ws3 output DP-2 -workspace $ws5 output DP-2 -workspace $ws2 output DP-4 -workspace $ws4 output DP-4 -workspace $ws6 output DP-4 +#workspace $ws1 output DP-2 +#workspace $ws3 output DP-2 +#workspace $ws5 output DP-2 +#workspace $ws2 output DP-4 +#workspace $ws4 output DP-4 +#workspace $ws6 output DP-4 diff --git a/config/i3/scripts/keyhint-2 b/config/i3/scripts/keyhint-2 index 2e86d12..f948d1c 100755 --- a/config/i3/scripts/keyhint-2 +++ b/config/i3/scripts/keyhint-2 @@ -1,4 +1,4 @@ -I3_CONFIG=$HOME/.config/i3/config +I3_CONFIG=$HOME/.config/i3/config.d/keybindings.conf mod_key=$(sed -nre 's/^set \$mod (.*)/\1/p' ${I3_CONFIG}) grep "^bindsym" ${I3_CONFIG} \ | sed "s/-\(-\w\+\)\+//g;s/\$mod/${mod_key}/g;s/Mod1/Alt/g;s/exec //;s/bindsym //;s/^\s\+//;s/^\([^ ]\+\) \(.\+\)$/\2: \1/;s/^\s\+//" \ diff --git a/config/libinput-gestures.conf b/config/libinput-gestures.conf new file mode 100644 index 0000000..5430052 --- /dev/null +++ b/config/libinput-gestures.conf @@ -0,0 +1,7 @@ +# Example / default config at /etc/libinput-gestures.conf +gesture swipe up xdotool key super+f +gesture swipe down xdotool key super+N +gesture swipe left xdotool key super+shift+Tab +gesture swipe right xdotool key super+Tab +gesture pinch in xdotool key super+t +gesture pinch out xdotool key super+d diff --git a/config/picom-extended.conf b/config/picom-extended.conf new file mode 100644 index 0000000..153bf5b --- /dev/null +++ b/config/picom-extended.conf @@ -0,0 +1,101 @@ +# Source: https://www.reddit.com/r/kde/comments/p822c2/perfect_kde_plasma_compositing_combo_kwin_picom/ +# https://gist.github.com/crnisamuraj/2cd9bae3e658004d3e506492b1d9442b +### Fading +fading = true; +fade-in-step = 0.06; +fade-out-ste = 0.06; +fade-delta = 3; +fade-exclude = [ + "class_g = 'yakuake'" +] + +### Opacity +opacity-rule = [ + "96:class_g = 'plasmashell'" +]; + + + +### Shadows +shadow = true; +shadow-exclude = [ + "class_g = 'yakuake'", + "class_g = 'lattedock'", + "_GTK_FRAME_EXTENTS@:c", + "QTILE_INTERNAL@:c", + "name = 'cpt_frame_xcb_window'", + "class_g ?= 'zoom'", + "_NET_WM_STATE@:32a *= '_NET_WM_STATE_HIDDEN'", + "_NET_WM_OPAQUE_REGION@:c", + "class_g = 'TelegramDesktop' && argb", +# "class_g = 'firefox' && argb", + "class_g = 'firefox' && window_type = 'popup_menu'", + "class_g = 'firefox' && window_type = 'utility'", + "class_g = 'firefox' && window_type = 'tooltip'", +] +xinerama-shadow-crop = true; + +### Blur +blur:{ + method = "dual_kawase"; + strength = 6; +# background-frame = true; +# background-fixed = true; +} + + +blur-background-exclude = [ +# "window_type = 'desktop'", + "_GTK_FRAME_EXTENTS@:c", + "class_g ?= 'zoom'", +# "class_g = 'firefox' && argb", + "class_g = 'firefox' && window_type = 'popup_menu'", + "class_g = 'firefox' && window_type = 'utility'", +]; + + +### Wintypes +wintypes:{ +# normal = { blur-background = true; }; + splash = { blur-background = false; }; +# popup_menu = { opacity = 0.8; shadow = false; full-shadow = false; }; +# dropdown_menu = { opacity = 0.8; shadow = false; }; + dock = { shadow = false; clip-shadow-above = true; }; + tooltip = { fade = true; shadow = true; opacity = 0.9; focus = true; full-shadow = false; }; + menu = { blur-background = false; }; +}; + +### Backend +backend = "glx"; +#backend = "xrender"; +vsync = false; + +glx-no-stencil = true; +glx-no-rebind-pixmap = true; +xrender-sync-fence = true; +unredir-if-possible = true; + +dbus=true; + +### Corners +detect-rounded-corners = true; +corner-radius = 9; +rounded-corners-exclude = [ +# "class_g = 'lattedock'", + "window_type = 'dock'", + "window_type = 'desktop'", +# "window_type = 'popup_menu'", + "window_type = 'tooltip'", +]; + +round-borders = 9; + +detect-client-opacity = true; +detect-transient = true; +detect-client-leader = true; + +mark-wmwin-focused = true; +mark-ovredir-focused = true; +use-ewmh-active-win = true; + +#transparrent-clipping = true; diff --git a/config/picom.conf b/config/picom.conf index b2b557c..cfbd5d1 100644 --- a/config/picom.conf +++ b/config/picom.conf @@ -1,431 +1,76 @@ -################################# -# Shadows # -################################# - - -# Enabled client-side shadows on windows. Note desktop windows -# (windows with '_NET_WM_WINDOW_TYPE_DESKTOP') never get shadow, -# unless explicitly requested using the wintypes option. -# -# shadow = false -shadow = true; - -# The blur radius for shadows, in pixels. (defaults to 12) -# shadow-radius = 12 -shadow-radius = 7; - -# The opacity of shadows. (0.0 - 1.0, defaults to 0.75) -# shadow-opacity = .75 - -# The left offset for shadows, in pixels. (defaults to -15) -# shadow-offset-x = -15 -shadow-offset-x = -7; - -# The top offset for shadows, in pixels. (defaults to -15) -# shadow-offset-y = -15 -shadow-offset-y = -7; - -# Red color value of shadow (0.0 - 1.0, defaults to 0). -# shadow-red = 0 - -# Green color value of shadow (0.0 - 1.0, defaults to 0). -# shadow-green = 0 - -# Blue color value of shadow (0.0 - 1.0, defaults to 0). -# shadow-blue = 0 - -# Hex string color value of shadow (#000000 - #FFFFFF, defaults to #000000). This option will override options set shadow-(red/green/blue) -# shadow-color = "#000000" - -# Specify a list of conditions of windows that should have no shadow. -# -# examples: -# shadow-exclude = "n:e:Notification"; -# -# shadow-exclude = [] -shadow-exclude = [ - "name = 'Notification'", - "class_g = 'Conky'", - "class_g ?= 'Notify-osd'", - "class_g = 'Cairo-clock'", - "_GTK_FRAME_EXTENTS@:c" -]; - -# Specify a list of conditions of windows that should have no shadow painted over, such as a dock window. -# clip-shadow-above = [] - -# Specify a X geometry that describes the region in which shadow should not -# be painted in, such as a dock window region. Use -# shadow-exclude-reg = "x10+0+0" -# for example, if the 10 pixels on the bottom of the screen should not have shadows painted on. -# -# shadow-exclude-reg = "" - -# Crop shadow of a window fully on a particular monitor to that monitor. This is -# currently implemented using the X RandR extension. -# crop-shadow-to-monitor = false - - -################################# -# Fading # -################################# - - -# Fade windows in/out when opening/closing and when opacity changes, -# unless no-fading-openclose is used. -# fading = false +# Source: https://www.reddit.com/r/kde/comments/p822c2/perfect_kde_plasma_compositing_combo_kwin_picom/ +# https://gist.github.com/crnisamuraj/2cd9bae3e658004d3e506492b1d9442b +### Fading fading = true; +fade-in-step = 0.06; +fade-out-ste = 0.06; +fade-delta = 3; +fade-exclude = [ + "class_g = 'yakuake'" +] -# Opacity change between steps while fading in. (0.01 - 1.0, defaults to 0.028) -# fade-in-step = 0.028 -fade-in-step = 0.03; - -# Opacity change between steps while fading out. (0.01 - 1.0, defaults to 0.03) -# fade-out-step = 0.03 -fade-out-step = 0.03; - -# The time between steps in fade step, in milliseconds. (> 0, defaults to 10) -# fade-delta = 10 - -# Specify a list of conditions of windows that should not be faded. -# fade-exclude = [] - -# Do not fade on window open/close. -# no-fading-openclose = false - -# Do not fade destroyed ARGB windows with WM frame. Workaround of bugs in Openbox, Fluxbox, etc. -# no-fading-destroyed-argb = false - - -################################# -# Transparency / Opacity # -################################# - - -# Opacity of inactive windows. (0.1 - 1.0, defaults to 1.0) -# inactive-opacity = 1 -inactive-opacity = 0.95; - -# Opacity of window titlebars and borders. (0.1 - 1.0, disabled by default) -# frame-opacity = 1.0 -frame-opacity = 0.9; - -# Let inactive opacity set by -i override the '_NET_WM_WINDOW_OPACITY' values of windows. -# inactive-opacity-override = true -inactive-opacity-override = false; - -# Default opacity for active windows. (0.0 - 1.0, defaults to 1.0) -# active-opacity = 1.0 - -# Dim inactive windows. (0.0 - 1.0, defaults to 0.0) -# inactive-dim = 0.0 - -# Specify a list of conditions of windows that should never be considered focused. -# focus-exclude = [] -focus-exclude = [ "class_g = 'Cairo-clock'" ]; - -# Use fixed inactive dim value, instead of adjusting according to window opacity. -# inactive-dim-fixed = 1.0 - -# Specify a list of opacity rules, in the format `PERCENT:PATTERN`, -# like `50:name *= "Firefox"`. picom-trans is recommended over this. -# Note we don't make any guarantee about possible conflicts with other -# programs that set '_NET_WM_WINDOW_OPACITY' on frame or client windows. -# example: -# opacity-rule = [ "80:class_g = 'URxvt'" ]; -# -# opacity-rule = [] - - -################################# -# Corners # -################################# - -# Sets the radius of rounded window corners. When > 0, the compositor will -# round the corners of windows. Does not interact well with -# `transparent-clipping`. -corner-radius = 0 - -# Exclude conditions for rounded corners. -rounded-corners-exclude = [ - "window_type = 'dock'", - "window_type = 'desktop'" +### Opacity +opacity-rule = [ + "98:class_g = 'plasmashell'" ]; -################################# -# Background-Blurring # -################################# +### Shadows +shadow = true; +shadow-exclude = [ + "class_g = 'lattedock'", + "_GTK_FRAME_EXTENTS@:c" +] +xinerama-shadow-crop = true; -# Parameters for background blurring, see the *BLUR* section for more information. -# blur-method = -# blur-size = 12 -# -# blur-deviation = false -# -# blur-strength = 5 +### Blur +blur:{ + #method = "kernel"; + method = "dual_kawase"; + deviation = true; +} -# Blur background of semi-transparent / ARGB windows. -# Bad in performance, with driver-dependent behavior. -# The name of the switch may change without prior notifications. -# -# blur-background = false - -# Blur background of windows when the window frame is not opaque. -# Implies: -# blur-background -# Bad in performance, with driver-dependent behavior. The name may change. -# -# blur-background-frame = false - - -# Use fixed blur strength rather than adjusting according to window opacity. -# blur-background-fixed = false - - -# Specify the blur convolution kernel, with the following format: -# example: -# blur-kern = "5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1"; -# -# blur-kern = "" -blur-kern = "3x3box"; - - -# Exclude conditions for background blur. -# blur-background-exclude = [] blur-background-exclude = [ - "window_type = 'dock'", "window_type = 'desktop'", "_GTK_FRAME_EXTENTS@:c" ]; -################################# -# General Settings # -################################# -# Enable remote control via D-Bus. See the man page for more details. -# dbus = true +### Wintypes +wintypes:{ + normal = { blur-background = true; }; + splash = { blur-background = false; }; + popup_menu = { opacity = 0.9; }; + dropdown_menu = { opacity = 0.8; }; + dock = { shadow = false; clip-shadow-above = true; }; + tooltip = { fade = true; shadow = true; opacity = 0.9; focus = true; full-shadow = false; }; +}; -# Daemonize process. Fork to background after initialization. Causes issues with certain (badly-written) drivers. -# daemon = false - -# Specify the backend to use: `xrender`, `glx`, `egl` or `xr_glx_hybrid`. -# `xrender` is the default one. -# -# backend = "glx" -backend = "xrender"; - -# Use higher precision during rendering, and apply dither when presenting the -# rendered screen. Reduces banding artifacts, but might cause performance -# degradation. Only works with OpenGL. -dithered-present = false; - -# Enable/disable VSync. -# vsync = false +### Backend +backend = "glx"; +#backend = "xrender"; vsync = true; -# Try to detect WM windows (a non-override-redirect window with no -# child that has 'WM_STATE') and mark them as active. -# -# mark-wmwin-focused = false -mark-wmwin-focused = true; +glx-no-stencil = true; +glx-no-rebind-pixmap = true; +xrender-sync-fence = true; -# Mark override-redirect windows that doesn't have a child window with 'WM_STATE' focused. -# mark-ovredir-focused = false -mark-ovredir-focused = true; +dbus=true; -# Try to detect windows with rounded corners and don't consider them -# shaped windows. The accuracy is not very high, unfortunately. -# -# detect-rounded-corners = false +### Corners detect-rounded-corners = true; +corner-radius = 6; +rounded-corners-exclude = [ + "window_type = 'dock'", + "window_type = 'desktop'", + "window_type = 'popup_menu'" +]; -# Detect '_NET_WM_WINDOW_OPACITY' on client windows, useful for window managers -# not passing '_NET_WM_WINDOW_OPACITY' of client windows to frame windows. -# -# detect-client-opacity = false detect-client-opacity = true; - -# Use EWMH '_NET_ACTIVE_WINDOW' to determine currently focused window, -# rather than listening to 'FocusIn'/'FocusOut' event. Might have more accuracy, -# provided that the WM supports it. -# -# use-ewmh-active-win = false - -# Unredirect all windows if a full-screen opaque window is detected, -# to maximize performance for full-screen windows. Known to cause flickering -# when redirecting/unredirecting windows. -# -# unredir-if-possible = false - -# Delay before unredirecting the window, in milliseconds. Defaults to 0. -# unredir-if-possible-delay = 0 - -# Conditions of windows that shouldn't be considered full-screen for unredirecting screen. -# unredir-if-possible-exclude = [] - -# Use 'WM_TRANSIENT_FOR' to group windows, and consider windows -# in the same group focused at the same time. -# -# detect-transient = false detect-transient = true; -# Use 'WM_CLIENT_LEADER' to group windows, and consider windows in the same -# group focused at the same time. This usually means windows from the same application -# will be considered focused or unfocused at the same time. -# 'WM_TRANSIENT_FOR' has higher priority if detect-transient is enabled, too. -# -# detect-client-leader = false - -# Resize damaged region by a specific number of pixels. -# A positive value enlarges it while a negative one shrinks it. -# If the value is positive, those additional pixels will not be actually painted -# to screen, only used in blur calculation, and such. (Due to technical limitations, -# with use-damage, those pixels will still be incorrectly painted to screen.) -# Primarily used to fix the line corruption issues of blur, -# in which case you should use the blur radius value here -# (e.g. with a 3x3 kernel, you should use `--resize-damage 1`, -# with a 5x5 one you use `--resize-damage 2`, and so on). -# May or may not work with *--glx-no-stencil*. Shrinking doesn't function correctly. -# -# resize-damage = 1 - -# Specify a list of conditions of windows that should be painted with inverted color. -# Resource-hogging, and is not well tested. -# -# invert-color-include = [] - -# GLX backend: Avoid using stencil buffer, useful if you don't have a stencil buffer. -# Might cause incorrect opacity when rendering transparent content (but never -# practically happened) and may not work with blur-background. -# My tests show a 15% performance boost. Recommended. -# -glx-no-stencil = true; - -# GLX backend: Avoid rebinding pixmap on window damage. -# Probably could improve performance on rapid window content changes, -# but is known to break things on some drivers (LLVMpipe, xf86-video-intel, etc.). -# Recommended if it works. -# -# glx-no-rebind-pixmap = false - -# Disable the use of damage information. -# This cause the whole screen to be redrawn every time, instead of the part of the screen -# has actually changed. Potentially degrades the performance, but might fix some artifacts. -# The opposing option is use-damage -# -# no-use-damage = false -use-damage = true; - -# Use X Sync fence to sync clients' draw calls, to make sure all draw -# calls are finished before picom starts drawing. Needed on nvidia-drivers -# with GLX backend for some users. -# -# xrender-sync-fence = false - -# GLX backend: Use specified GLSL fragment shader for rendering window -# contents. Read the man page for a detailed explanation of the interface. -# -# window-shader-fg = "default" - -# Use rules to set per-window shaders. Syntax is SHADER_PATH:PATTERN, similar -# to opacity-rule. SHADER_PATH can be "default". This overrides window-shader-fg. -# -# window-shader-fg-rule = [ -# "my_shader.frag:window_type != 'dock'" -# ] - -# Force all windows to be painted with blending. Useful if you -# have a glx-fshader-win that could turn opaque pixels transparent. -# -# force-win-blend = false - -# Do not use EWMH to detect fullscreen windows. -# Reverts to checking if a window is fullscreen based only on its size and coordinates. -# -# no-ewmh-fullscreen = false - -# Dimming bright windows so their brightness doesn't exceed this set value. -# Brightness of a window is estimated by averaging all pixels in the window, -# so this could comes with a performance hit. -# Setting this to 1.0 disables this behaviour. Requires --use-damage to be disabled. (default: 1.0) -# -# max-brightness = 1.0 - -# Make transparent windows clip other windows like non-transparent windows do, -# instead of blending on top of them. -# -# transparent-clipping = false - -# Specify a list of conditions of windows that should never have transparent -# clipping applied. Useful for screenshot tools, where you need to be able to -# see through transparent parts of the window. -# -# transparent-clipping-exclude = [] - -# Set the log level. Possible values are: -# "trace", "debug", "info", "warn", "error" -# in increasing level of importance. Case doesn't matter. -# If using the "TRACE" log level, it's better to log into a file -# using *--log-file*, since it can generate a huge stream of logs. -# -# log-level = "debug" -log-level = "warn"; - -# Set the log file. -# If *--log-file* is never specified, logs will be written to stderr. -# Otherwise, logs will to written to the given file, though some of the early -# logs might still be written to the stderr. -# When setting this option from the config file, it is recommended to use an absolute path. -# -# log-file = "/path/to/your/log/file" - -# Show all X errors (for debugging) -# show-all-xerrors = false - -# Write process ID to a file. -# write-pid-path = "/path/to/your/log/file" - -# Window type settings -# -# 'WINDOW_TYPE' is one of the 15 window types defined in EWMH standard: -# "unknown", "desktop", "dock", "toolbar", "menu", "utility", -# "splash", "dialog", "normal", "dropdown_menu", "popup_menu", -# "tooltip", "notification", "combo", and "dnd". -# -# Following per window-type options are available: :: -# -# fade, shadow::: -# Controls window-type-specific shadow and fade settings. -# -# opacity::: -# Controls default opacity of the window type. -# -# focus::: -# Controls whether the window of this type is to be always considered focused. -# (By default, all window types except "normal" and "dialog" has this on.) -# -# full-shadow::: -# Controls whether shadow is drawn under the parts of the window that you -# normally won't be able to see. Useful when the window has parts of it -# transparent, and you want shadows in those areas. -# -# clip-shadow-above::: -# Controls whether shadows that would have been drawn above the window should -# be clipped. Useful for dock windows that should have no shadow painted on top. -# -# redir-ignore::: -# Controls whether this type of windows should cause screen to become -# redirected again after been unredirected. If you have unredir-if-possible -# set, and doesn't want certain window to cause unnecessary screen redirection, -# you can set this to `true`. -# -wintypes: -{ - tooltip = { fade = true; shadow = true; opacity = 0.75; focus = true; full-shadow = false; }; - dock = { shadow = false; clip-shadow-above = true; } - dnd = { shadow = false; } - popup_menu = { opacity = 0.8; } - dropdown_menu = { opacity = 0.8; } -}; +mark-wmwin-focused = true; +mark-ovredir-focused = true; +use-ewmh-active-win = true; +detect-client-leader = true; diff --git a/config/systemd/user/plasma-i3.service b/config/systemd/user/plasma-i3.service deleted file mode 100644 index d43deb0..0000000 --- a/config/systemd/user/plasma-i3.service +++ /dev/null @@ -1,11 +0,0 @@ -[Install] -WantedBy=plasma-workspace.target - -[Unit] -Description=Plasma Custom Window Manager -Before=plasma-workspace.target - -[Service] -ExecStart=/usr/bin/i3 -Slice=session.slice -Restart=on-failure diff --git a/install.sh b/install.sh index ec43b42..2ffce61 100755 --- a/install.sh +++ b/install.sh @@ -19,6 +19,19 @@ # TODO: Put installer script in path # +# TODO: Setup fingerprint reader +# Copy /etc/pam.d/ configs +# auth sufficient pam_fprintd.so +# /etc/pam.d/[kde, kde-fingerprint, login, sddm, sudo, i3lock, etc?] +# +# TODO: Setup touchpad gestures +# yay -S libinput-gestures +# sudo gpasswd -a "$USER" input +# libinput-gestures-setup autostart +# Need to logout here or otherwise reload groups +# libinput-gestures-setup start +# Config in .config/libinput-gestures.conf + # TODO: Install gruvbox themes # cd dotfiles && git submodule update --init # mkdir ~/dotfiles/config/themes ~/dotfiles/config/icons @@ -72,9 +85,19 @@ gtk-3.0 powerline xfce4 picom.conf +picom-extended.conf +libinput-gestures.conf +" +bin=" +startplasma-sway-wayland " systemd_services=" -plasma-i3.service +" +xsessions=" +plasma-i3.desktop +" +wayland_sessions=" +plasma-sway.desktop " arch=" " @@ -139,6 +162,16 @@ function link_dotfiles { fi fi done + for file in $bin; do + if [[ -f bin/$file && -x $file ]]; then + if [[ -f /usr/local/bin/$file ]]; then + echo "Skipping: $file because /usr/local/bin/$file already exists" + else + echo "Copying: $file ($config_dir/bin/$file -> /usr/local/bin/$file)" + sudo cp $config_dir/bin/$file /usr/local/bin/$file + fi + fi + done for file in $systemd_services; do if [[ -f systemd/user/$file || -d systemd/user/$file ]]; then if [[ -f ~/.config/systemd/user/$file || -d ~/.config/systemd/user/$file ]]; then @@ -146,6 +179,8 @@ function link_dotfiles { else echo "Linking: $file ($config_dir/systemd/user/$file -> ~/.config/systemd/user/$file)" ln -s $config_dir/systemd/user/$file ~/.config/systemd/user/$file + # TODO: Probably should also enable the service + #systemctl --user enable --now $file fi fi done @@ -282,8 +317,66 @@ function setup_system_configs() { if [[ $(service_enabled bluetooth.service) == 0 ]]; then echo echo "Enabling Bluetooth" - sudo systemctl enable bluetooth.service - sudo systemctl start bluetooth.service + sudo systemctl enable --now bluetooth.service + fi + + if [[ $(program_installed syncthing) == 1 ]]; then + echo + echo "Enabling Syncthing" + systemctl enable --user --now syncthing.service + echo "Configure syncthing here:" + echo "http://localhost:8384" + fi + setup_sessions + setup_plasma_i3 +} + +function setup_sessions() { + echo + echo -n "Would you like to install X11 / Wayland sessions? (y/n) " + read response + if [[ "$response" == 'y' ]] || [[ "$response" == 'Y' ]]; then + # Check if xsessions directory exists + if [[ -d /usr/share/xsessions ]]; then + for file in $xsessions; do + if [[ -f xsessions/$file ]]; then + if [[ -f /usr/share/xsessions/$file ]]; then + echo "Skipping: $file because /usr/share/xsessions/$file already exists" + else + echo "Copying: $file ($config_dir/xsessions/$file -> /usr/share/xsessions/$file)" + sudo cp $config_dir/xsessions/$file /usr/share/xsessions/$file + fi + fi + done + fi + # Check if wayland_sessions directory exists + if [[ -d /usr/share/xsessions ]]; then + for file in $wayland_sessions; do + if [[ -f wayland_sessions/$file ]]; then + if [[ -f /usr/share/wayland_sessions/$file ]]; then + echo "Skipping: $file because /usr/share/wayland_sessions/$file already exists" + else + echo "Copying: $file ($config_dir/wayland_sessions/$file -> /usr/share/wayland_sessions/$file)" + sudo cp $config_dir/wayland_sessions/$file /usr/share/wayland_sessions/$file + fi + fi + done + fi + fi +} + +function setup_plasma_i3() { + echo + echo -n "Would you like to run plasma alongside i3? (y/n) " + read response + if [[ "$response" == 'y' ]] || [[ "$response" == 'Y' ]]; then + echo "Disabling plasma systemd autostart" + if [[ $(program_installed kwriteconfig5) == 1 ]]; then + kwriteconfig5 --file startkderc --group General --key systemdBoot false + fi + if [[ $(program_installed kwriteconfig6) == 1 ]]; then + kwriteconfig6 --file startkderc --group General --key systemdBoot false + fi fi } diff --git a/packages/arch.global b/packages/arch.global index 7a8643f..b8fc176 100644 --- a/packages/arch.global +++ b/packages/arch.global @@ -6,6 +6,10 @@ cifs-utils neovim tmux wget +feh +dmenu +rofi +scrot # clipboard manager xclip # set numlock @@ -14,6 +18,8 @@ python-pip # ag - fuzzy search anywhere, `,mag` in nvim! the_silver_searcher tree +arandr +nodejs # zsh shell instead of bash zsh @@ -23,6 +29,12 @@ zsh-syntax-highlighting github-cli gnome-keyring +# needed for certain hardware support +linux-firmware + +# media key support +playerctl + # bluetooth support bluez bluez-utils @@ -40,6 +52,9 @@ xorg-xev # for sending keystrokes from i3, currently unused xdotool +# syncing files, requires configuration +syncthing + # flatpak support flatpak diff --git a/packages/aur.global b/packages/aur.global index 9febcbf..7c6701a 100644 --- a/packages/aur.global +++ b/packages/aur.global @@ -8,6 +8,7 @@ rofi-greenclip tmuxinator # fonts with powerline glyphs +# TODO: This fails on install because of conflict with ttf-hack powerline-fonts-git # transparency diff --git a/wayland-sessions/plasma-sway.desktop b/wayland-sessions/plasma-sway.desktop new file mode 100644 index 0000000..6629e44 --- /dev/null +++ b/wayland-sessions/plasma-sway.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Exec=/usr/lib/plasma-dbus/run-session-if-needed /usr/local/bin/startplasma-sway-wayland +TryExec=/usr/local/bin/startplasma-sway-wayland +Name=Plasma with Sway (Wayland) +Comment=Plasma with Sway (Wayland) +DesktopNames=KDE +X-KDE-PluginInfo-Version=6.0.1 diff --git a/xsessions/plasma-i3.desktop b/xsessions/plasma-i3.desktop new file mode 100644 index 0000000..087740a --- /dev/null +++ b/xsessions/plasma-i3.desktop @@ -0,0 +1,6 @@ +[Desktop Entry] +Type=XSession +Exec=env KDEWM=/usr/bin/i3 /usr/bin/startplasma-x11 +DesktopNames=KDE +Name=Plasma with i3 +Comment=Plasma with i3