diff --git a/bootstrap.sh b/bootstrap.sh new file mode 100755 index 0000000..7b09a3a --- /dev/null +++ b/bootstrap.sh @@ -0,0 +1,120 @@ +#!/usr/bin/env bash + +set -e + +if [ "$EUID" -eq 0 ]; then + echo "Please run this script as your normal user, not with sudo." + exit 1 +fi + +echo "==> Updating system..." +sudo xbps-install -Syu + +echo "==> Installing KDE and desktop essentials..." + +sudo xbps-install -y \ + kde-plasma \ + kde-baseapps \ + NetworkManager \ + sddm \ + xorg-minimal \ + xorg-server-xwayland \ + mesa-dri \ + qt6-wayland \ + kwayland \ + elogind \ + pipewire \ + alsa-pipewire \ + libspa-bluetooth \ + bluez \ + xdg-desktop-portal \ + xdg-desktop-portal-kde \ + git \ + curl \ + neovim + +echo "==> Disabling conflicting DHCP service..." + +if [ -e /var/service/dhcpcd ]; then + sudo sv down dhcpcd || true + sudo rm -f /var/service/dhcpcd +fi + +echo "==> Enabling system services..." + +enable_service() { + service="$1" + + if [ ! -e "/var/service/$service" ]; then + sudo ln -s "/etc/sv/$service" "/var/service/$service" + fi +} + +enable_service dbus +enable_service NetworkManager +enable_service sddm +enable_service bluetoothd + +echo "==> Adding user to required groups..." + +sudo usermod -aG network,audio,video,bluetooth "$USER" + +echo "==> Configuring ALSA for PipeWire..." + +sudo mkdir -p /etc/alsa/conf.d + +sudo ln -sf \ + /usr/share/alsa/alsa.conf.d/50-pipewire.conf \ + /etc/alsa/conf.d/50-pipewire.conf + +sudo ln -sf \ + /usr/share/alsa/alsa.conf.d/99-pipewire-default.conf \ + /etc/alsa/conf.d/99-pipewire-default.conf + +echo "==> Configuring PipeWire PulseAudio compatibility..." + +sudo mkdir -p /etc/pipewire/pipewire.conf.d + +sudo ln -sf \ + /usr/share/examples/pipewire/20-pipewire-pulse.conf \ + /etc/pipewire/pipewire.conf.d/20-pipewire-pulse.conf + +echo "==> Enabling PipeWire desktop autostart..." + +mkdir -p "$HOME/.config/autostart" + +ln -sf \ + /usr/share/applications/pipewire.desktop \ + "$HOME/.config/autostart/pipewire.desktop" + +echo "==> Reconfiguring packages..." + +sudo xbps-reconfigure -fa + +echo +echo "========================================" +echo " Void KDE bootstrap complete" +echo "========================================" +echo +echo "Installed:" +echo " KDE Plasma" +echo " SDDM" +echo " Plasma Wayland" +echo " NetworkManager" +echo " PipeWire + WirePlumber" +echo " Bluetooth" +echo " XWayland" +echo " Neovim" +echo +echo "Enabled services:" +sudo sv status dbus NetworkManager bluetoothd sddm +echo +echo "NOTE: elogind is installed but intentionally" +echo "not enabled as a runit service." +echo +echo "Reboot, then select 'Plasma (Wayland)' in SDDM." +echo +echo " sudo reboot" +echo + + diff --git a/config/alacritty/alacritty.toml b/config/alacritty/alacritty.toml index c76896b..830ee6d 100644 --- a/config/alacritty/alacritty.toml +++ b/config/alacritty/alacritty.toml @@ -1,5 +1,5 @@ [font] -size = 13 +size = 12 offset = { x = 0, y = 6 } normal = { family = "JetBrainsMono Nerd Font", style = "Regular" } diff --git a/config/bash/bashrc b/config/bash/bashrc index 883d810..ad5f17d 100644 --- a/config/bash/bashrc +++ b/config/bash/bashrc @@ -15,10 +15,7 @@ export EDITOR="nvim" export VISUAL="nvim" export MANPAGER="nvim +Man!" export BROWSER="firefox" -# export TERM=xterm-256color export COLORTERM="truecolor" -export LANG="en_US.UTF-8" -export LC_ALL="en_US.UTF-8" # Development export DEBUG=1 diff --git a/config/sway/config b/config/sway/config deleted file mode 100644 index 9052dba..0000000 --- a/config/sway/config +++ /dev/null @@ -1,127 +0,0 @@ -### Sway Config -include ~/.config/sway/noctalia - -set $mod Mod4 - -### Applications -set $term alacritty -set $editor nvim -set $filemanager thunar - -### Outputs -output HDMI-A-1 scale 1.21 - -### Appearance -seat seat0 xcursor_theme oreo_white_cursors 28 -corner_radius 10 -default_border pixel 4 -default_floating_border pixel 4 -gaps inner 8 -gaps outer 0 -focus_follows_mouse yes - -### Workspaces -workspace 1 -workspace 2 -workspace 3 -workspace 4 -workspace 5 - -### Window behaviour -floating_modifier $mod - -### Focus movement -bindsym $mod+h focus left -bindsym $mod+j focus down -bindsym $mod+k focus up -bindsym $mod+l focus right - -### Move windows -bindsym $mod+Ctrl+h move left -bindsym $mod+Ctrl+j move down -bindsym $mod+Ctrl+k move up -bindsym $mod+Ctrl+l move right - -### Resize -mode "resize" { - bindsym h resize shrink width 20px - bindsym j resize grow height 20px - bindsym k resize shrink height 20px - bindsym l resize grow width 20px - bindsym Return mode "default" - bindsym Escape mode "default" -} -bindsym $mod+Shift+r mode "resize" - -### Split orientation -bindsym $mod+v splitv -bindsym $mod+b splith - -### Layout -bindsym $mod+w layout toggle split -bindsym $mod+Shift+space layout default - -### Fullscreen / floating / maximize -bindsym $mod+f fullscreen toggle -bindsym $mod+Ctrl+space floating toggle -bindsym $mod+m fullscreen disable, floating disable - -### Kill window -bindsym $mod+q kill - -### Window cycling -bindsym $mod+Tab focus next - -### Workspace switching -bindsym $mod+1 workspace number 1 -bindsym $mod+2 workspace number 2 -bindsym $mod+3 workspace number 3 -bindsym $mod+4 workspace number 4 -bindsym $mod+5 workspace number 5 - -### Move container to workspace -bindsym $mod+Ctrl+1 move container to workspace number 1 -bindsym $mod+Ctrl+2 move container to workspace number 2 -bindsym $mod+Ctrl+3 move container to workspace number 3 -bindsym $mod+Ctrl+4 move container to workspace number 4 -bindsym $mod+Ctrl+5 move container to workspace number 5 - -### Floating rules -for_window [app_id="pavucontrol"] floating enable -for_window [app_id="blueman-manager"] floating enable -for_window [title="Event Tester"] floating enable - -### Launchers / apps -set $ipc noctalia msg -bindsym $mod+Return exec $term -bindsym $mod+e exec $filemanager -# bindsym $mod+t exec $term - -# Noctalia Settings -bindsym $mod+s exec $ipc settings-toggle - -# Noctalia Panels -bindsym $mod+space exec $ipc panel-toggle launcher -bindsym $mod+n exec $ipc panel-toggle control-center -bindsym $mod+c exec $ipc panel-toggle clipboard -bindsym $mod+grave exec $ipc panel-toggle session - -### Screenshot -bindsym $mod+Ctrl+p exec grimshot save area - -### Audio keys -bindsym XF86AudioRaiseVolume exec pactl set-sink-volume @DEFAULT_SINK@ +2% -bindsym XF86AudioLowerVolume exec pactl set-sink-volume @DEFAULT_SINK@ -2% -bindsym XF86AudioMute exec pactl set-sink-mute @DEFAULT_SINK@ toggle - -### Mouse bindings -bindsym --whole-window $mod+Button1 move -bindsym --whole-window $mod+Button3 resize - -### Reload -bindsym $mod+Ctrl+r reload - -### Startup -exec pgrep -x noctalia >/dev/null || noctalia -exec pipewire -exec snixembed --fork diff --git a/config/sway/noctalia b/config/sway/noctalia deleted file mode 100644 index f184b10..0000000 --- a/config/sway/noctalia +++ /dev/null @@ -1,18 +0,0 @@ -set $primary #a9afbd -set $on_primary #121212 -set $secondary #7d8390 -set $tertiary #8b909c -set $error #c77b7b -set $surface #121212 -set $on_surface #e8e8e8 -set $on_surface_variant #b0b0b0 -set $outline #616161 - -## Window Colours -# class border backgr. text indicator child_border -client.focused $primary $surface $on_surface $primary $primary -client.focused_inactive $outline $surface $on_surface_variant $outline $outline -client.unfocused $outline $surface $on_surface_variant $outline $outline -client.urgent $error $surface $on_surface $error $error -client.placeholder $surface $surface $on_surface_variant $surface $surface -client.background $surface diff --git a/install.sh b/install.sh index f8116d0..4b26469 100755 --- a/install.sh +++ b/install.sh @@ -84,10 +84,9 @@ if [ "$DO_LINKS" = true ]; then SKIPPED=0 link_file "$DOTFILES_DIR/config/bash/bashrc" "$HOME/.bashrc" - link_file "$DOTFILES_DIR/config/alacritty" "$HOME/.config/alacritty" link_file "$DOTFILES_DIR/config/kanata" "$HOME/.config/kanata" + link_file "$DOTFILES_DIR/config/alacritty" "$HOME/.config/alacritty" link_file "$DOTFILES_DIR/config/nvim" "$HOME/.config/nvim" - link_file "$DOTFILES_DIR/config/sway" "$HOME/.config/sway" link_file "$DOTFILES_DIR/scripts/bin" "$HOME/.local/bin" echo "" @@ -150,15 +149,15 @@ if [ "$DO_INSTALL" = true ]; then # network & download wget curl ca-certificates gnupg rsync # core utilities - git unzip fd jq fzf ripgrep tree direnv make bat - # modern shell and cli tools - fish-shell alacritty tmux + git fd jq fzf ripgrep tree direnv make bat + ark unzip p7zip tar gzip bzip2 xz kanata + gitu # build & dev tools - base-devel valgrind tree-sitter-cli go nodejs - # window manager & desktop - swayfx kanata + alacritty base-devel valgrind tree-sitter-cli go nodejs # fonts noto-fonts-ttf noto-fonts-emoji + # kde + xdg-desktop-portal xdg-desktop-portal-kde ) MISSING_PACKAGES=() diff --git a/scripts/installs/install_odin b/scripts/installs/install_odin index f8cdd15..ea03c94 100755 --- a/scripts/installs/install_odin +++ b/scripts/installs/install_odin @@ -5,10 +5,11 @@ # Builds from source - recommended method on Linux # --------------------------------------------------------------------------------- set -e -ODIN_DIR="$HOME/odin" +ODIN_DIR="$HOME/.odin" echo "Installing Odin build dependencies..." -sudo xbps-install -Sy llvm18 llvm18-devel clang18 libstdc++-devel +sudo xbps-install -Sy llvm18 llvm18-devel clang18 libstdc++-devel git-lfs +git lfs install echo "Cloning Odin repository..." git clone https://github.com/odin-lang/Odin "$ODIN_DIR"