Compare commits

..
5 Commits
Author SHA1 Message Date
jasonhilder f3f3d6a94a Odin ols env var for builtin defs. 2026-09-23 12:50:30 +02:00
jasonhilder d4cb9100c0 Installs converted for void. 2026-09-23 12:50:06 +02:00
jasonhilder 9ce77ad817 Rework for void + dms. 2026-09-23 12:49:55 +02:00
jasonhilder 2a6b552725 Kanata config rename for system service. 2026-09-23 12:49:44 +02:00
jasonhilder 10db5ade01 Initial niri config. 2026-09-23 12:49:32 +02:00
7 changed files with 578 additions and 119 deletions
+1
View File
@@ -22,6 +22,7 @@ set -gx DEBUG 1
set -gx GOPATH "$HOME/.go"
set -gx GOCACHE "$HOME/.go/cache"
set -gx GOROOT /usr/local/go
set -gx OLS_BUILTIN_FOLDER "/home/jason/ThirdParty/ols/builtin"
# Direnv
direnv hook fish | source
+256
View File
@@ -0,0 +1,256 @@
// ============================================================================
// GENERAL & SYSTEM SETTINGS
// Wiki: https://github.com/YaLTeR/niri/wiki/Configuration:-Introduction
// ============================================================================
config-notification {
disable-failed
}
hotkey-overlay {
skip-at-startup
}
prefer-no-csd
screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png"
debug {
honor-xdg-activation-with-invalid-serial
}
// ============================================================================
// ENVIRONMENT VARIABLES
// ============================================================================
environment {
XDG_CURRENT_DESKTOP "niri"
QT_QPA_PLATFORM "wayland;xcb"
ELECTRON_OZONE_PLATFORM_HINT "auto"
QT_QPA_PLATFORMTHEME "gtk3"
QT_QPA_PLATFORMTHEME_QT6 "gtk3"
TERMINAL "alacritty"
}
// ============================================================================
// AUTOSTART / SPAWN AT STARTUP
// ============================================================================
spawn-at-startup "dms" "run"
// Export the session env to D-Bus so xdg-desktop-portal works
spawn-at-startup "dbus-update-activation-environment" "--all"
// Audio stack
spawn-at-startup "pipewire"
// PolicyKit authentication agent (verify path: xbps-query -f mate-polkit | grep -i agent)
spawn-at-startup "sh" "-c" "/usr/libexec/polkit-mate-authentication-agent-1 &"
// Clipboard history backing store for Mod+V
spawn-at-startup "sh" "-c" "wl-paste --watch cliphist store"
// Automount removable media
spawn-at-startup "udiskie" "--no-tray"
// ============================================================================
// INPUT & GESTURES
// Wiki: https://github.com/YaLTeR/niri/wiki/Configuration:-Input
// ============================================================================
input {
keyboard {
xkb {
// If this section is empty, niri will fetch xkb settings
// from org.freedesktop.locale1. You can control these using
// localectl set-x11-keymap.
}
// Enable numlock on startup, omitting this setting disables it.
numlock
}
// Focus windows and outputs automatically when moving the mouse into them.
focus-follows-mouse max-scroll-amount="95%"
}
gestures {
hot-corners {
off
}
}
// ============================================================================
// LAYOUT & VISUAL APPEARANCE
// Wiki: https://github.com/YaLTeR/niri/wiki/Configuration:-Layout
// ============================================================================
layout {
background-color "transparent"
// When to center a column when changing focus: "never", "always", or "on-overflow"
center-focused-column "never"
// Custom widths toggled by "switch-preset-column-width" (Mod+R)
preset-column-widths {
proportion 0.5
proportion 1.0
}
default-column-width { proportion 0.5; }
border {
off
width 4
active-color "#707070" // Neutral gray
inactive-color "#d0d0d0" // Light gray
urgent-color "#cc4444" // Softer red
}
shadow {
softness 30
spread 5
offset x=0 y=5
color "#0007"
}
struts {
}
}
overview {
workspace-shadow {
off
}
}
// ============================================================================
// ANIMATIONS
// ============================================================================
animations {
workspace-switch {
spring damping-ratio=0.80 stiffness=523 epsilon=0.0001
}
window-open {
duration-ms 150
curve "ease-out-expo"
}
window-close {
duration-ms 150
curve "ease-out-quad"
}
horizontal-view-movement {
spring damping-ratio=0.85 stiffness=423 epsilon=0.0001
}
window-movement {
spring damping-ratio=0.75 stiffness=323 epsilon=0.0001
}
window-resize {
spring damping-ratio=0.85 stiffness=423 epsilon=0.0001
}
config-notification-open-close {
spring damping-ratio=0.65 stiffness=923 epsilon=0.001
}
screenshot-ui-open {
duration-ms 200
curve "ease-out-quad"
}
overview-open-close {
spring damping-ratio=0.85 stiffness=800 epsilon=0.0001
}
}
// ============================================================================
// WINDOW & LAYER RULES
// Wiki: https://github.com/YaLTeR/niri/wiki/Configuration:-Window-Rules
// ============================================================================
layer-rule {
match namespace="^quickshell$"
place-within-backdrop true
}
window-rule {
match app-id=r#"^org\.gnome\."#
draw-border-with-background false
geometry-corner-radius 12
clip-to-geometry true
}
window-rule {
match app-id=r#"^gnome-control-center$"#
match app-id=r#"^pavucontrol$"#
match app-id=r#"^nm-connection-editor$"#
default-column-width { proportion 0.5; }
open-floating false
}
window-rule {
match app-id=r#"^org\.gnome\.Calculator$"#
match app-id=r#"^gnome-calculator$"#
match app-id=r#"^galculator$"#
match app-id=r#"^blueman-manager$"#
match app-id=r#"^org\.gnome\.Nautilus$"#
match app-id=r#"^xdg-desktop-portal$"#
open-floating true
}
window-rule {
match app-id="Alacritty"
match app-id="kitty"
draw-border-with-background false
}
window-rule {
match app-id=r#"firefox$"# title="^Picture-in-Picture$"
match app-id="zoom"
open-floating true
}
// Force the Steam client, Friends List, and settings windows to float
window-rule {
match app-id="steam"
open-floating true
}
window-rule {
match app-id="steam"
match title="Friends List"
open-floating true
default-floating-position x=10 y=10 relative-to="bottom-right"
}
window-rule {
match app-id=r#"^steam$"# title=r#"^notificationtoasts_\d+_desktop$"#
default-floating-position x=10 y=10 relative-to="top-right"
open-focused false
}
// Automatically fullscreen games launched via Proton
window-rule {
// Proton games typically use "steam_app_<id>" as their app-id.
// The r#"..."# syntax tells niri to evaluate this as a regular expression.
match app-id=r#"^steam_app_\d+$"#
open-fullscreen true
}
// ============================================================================
// NAVIGATION & KEYBINDINGS
// ============================================================================
// Override to disable super+tab
recent-windows {
binds {
Alt+Tab { next-window scope="output"; }
Alt+Shift+Tab { previous-window scope="output"; }
Alt+grave { next-window filter="app-id"; }
Alt+Shift+grave { previous-window filter="app-id"; }
}
}
// ============================================================================
// INCLUDES (DMS MANAGEMENT)
// ============================================================================
// @NOTE: only dms file we could edit
include optional=true "dms/binds.kdl"
// @NOTE: Non-editable files below all managed by dms
include optional=true "dms/colors.kdl"
include optional=true "dms/layout.kdl"
include optional=true "dms/alttab.kdl"
include optional=true "dms/outputs.kdl"
include optional=true "dms/cursor.kdl"
include optional=true "dms/input.kdl"
+152
View File
@@ -0,0 +1,152 @@
binds {
// ========================================================================
// SYSTEM & DMS APPLICATION LAUNCHERS
// ========================================================================
// Screenshots
Alt+Print hotkey-overlay-title="Screenshot: Window" { spawn "dms" "screenshot" "window"; }
Alt+XF86Launch1 hotkey-overlay-title="Screenshot: Window" { spawn "dms" "screenshot" "window"; }
Ctrl+Print hotkey-overlay-title="Screenshot: Full Screen" { spawn "dms" "screenshot" "full"; }
Ctrl+XF86Launch1 hotkey-overlay-title="Screenshot: Full Screen" { spawn "dms" "screenshot" "full"; }
Mod+P hotkey-overlay-title="Screenshot: Region" { spawn "dms" "screenshot"; }
// Launchers & Overlays
Mod+D hotkey-overlay-title="Application Launcher" { spawn "dms" "ipc" "call" "spotlight" "toggle"; }
Mod+space hotkey-overlay-title="Spotlight Bar: Toggle" { spawn "dms" "ipc" "call" "spotlight-bar" "toggle"; }
Mod+Y hotkey-overlay-title="Browse Wallpapers" { spawn "dms" "ipc" "call" "dash" "toggle" "wallpaper"; }
Super+Backspace hotkey-overlay-title="Power Menu: Toggle" { spawn "dms" "ipc" "call" "powermenu" "toggle"; }
Mod+Alt+L hotkey-overlay-title="Lock Screen" { spawn "dms" "ipc" "call" "lock" "lock"; }
// Utilities & Tools
Ctrl+Alt+Delete hotkey-overlay-title="Task Manager" { spawn "dms" "ipc" "call" "processlist" "focusOrToggle"; }
Mod+M hotkey-overlay-title="Task Manager" { spawn "dms" "ipc" "call" "processlist" "focusOrToggle"; }
Mod+N hotkey-overlay-title="Notification Center" { spawn "dms" "ipc" "call" "notifications" "toggle"; }
Mod+S hotkey-overlay-title="Notepad" { spawn "dms" "ipc" "call" "notepad" "toggle"; }
Mod+V hotkey-overlay-title="Clipboard Manager" { spawn "dms" "ipc" "call" "clipboard" "toggle"; }
Mod+Comma hotkey-overlay-title="Settings" { spawn "dms" "ipc" "call" "settings" "focusOrToggle"; }
// Configuration Helpers
Ctrl+Shift+R hotkey-overlay-title="Rename Workspace" { spawn "dms" "ipc" "call" "workspace-rename" "open"; }
Mod+Shift+W hotkey-overlay-title="Create window rule" { spawn "dms" "ipc" "call" "window-rules" "toggle"; }
// Audio Control (MPRIS)
Ctrl+XF86AudioLowerVolume allow-when-locked=true { spawn "dms" "ipc" "call" "mpris" "decrement" "3"; }
Ctrl+XF86AudioRaiseVolume allow-when-locked=true { spawn "dms" "ipc" "call" "mpris" "increment" "3"; }
// ========================================================================
// WINDOW & COLUMN FOCUS
// ========================================================================
// Focus Columns (Horizontal)
Mod+H { focus-column-left; }
Mod+Left { focus-column-left; }
Mod+L { focus-column-right; }
Mod+Right { focus-column-right; }
Mod+Home { focus-column-first; }
Mod+End { focus-column-last; }
// Focus Windows within Column (Vertical)
Mod+J { focus-window-down; }
Mod+Down { focus-window-down; }
Mod+K { focus-window-up; }
Mod+Up { focus-window-up; }
// Mouse Wheel Focus Navigation
Mod+WheelScrollLeft { focus-column-left; }
Mod+WheelScrollRight { focus-column-right; }
Mod+Shift+WheelScrollUp { focus-column-left; }
Mod+Shift+WheelScrollDown { focus-column-right; }
// ========================================================================
// WINDOW & COLUMN MANIPULATION
// ========================================================================
// Close Window
Mod+Q repeat=false { close-window; }
// Move Columns (Horizontal)
Mod+Shift+H { move-column-left; }
Mod+Shift+Left { move-column-left; }
Mod+Shift+L { move-column-right; }
Mod+Shift+Right { move-column-right; }
Mod+Ctrl+Home { move-column-to-first; }
Mod+Ctrl+End { move-column-to-last; }
Mod+Ctrl+WheelScrollLeft { move-column-left; }
Mod+Ctrl+WheelScrollRight { move-column-right; }
Mod+Ctrl+Shift+WheelScrollUp { move-column-left; }
Mod+Ctrl+Shift+WheelScrollDown { move-column-right; }
// Move Windows within Column (Vertical)
Mod+Shift+J { move-window-down; }
Mod+Shift+Down { move-window-down; }
Mod+Shift+K { move-window-up; }
Mod+Shift+Up { move-window-up; }
// Sizing & Layout Constraints
Mod+Equal { set-column-width "+10%"; }
Mod+Minus { set-column-width "-10%"; }
Mod+Shift+Equal { set-window-height "+10%"; }
Mod+Shift+Minus { set-window-height "-10%"; }
Mod+R { switch-preset-column-width; }
Mod+Shift+R { switch-preset-window-height; }
Mod+Ctrl+R { reset-window-height; }
Mod+Ctrl+F { expand-column-to-available-width; }
Mod+F { maximize-column; }
Mod+Shift+F { fullscreen-window; }
// Positioning, Floating & Tiling States
Mod+C { center-column; }
Mod+Ctrl+C { center-visible-columns; }
Mod+W { toggle-column-tabbed-display; }
Mod+Shift+T { toggle-window-floating; }
Mod+Shift+V { switch-focus-between-floating-and-tiling; }
Mod+BracketLeft { consume-or-expel-window-left; }
Mod+BracketRight { consume-or-expel-window-right; }
Mod+Period { expel-window-from-column; }
// ========================================================================
// WORKSPACE MANAGEMENT
// ========================================================================
// Switch Workspace Focus
Mod+Page_Up { focus-workspace-up; }
Mod+I { focus-workspace-up; }
Mod+Page_Down { focus-workspace-down; }
Mod+U { focus-workspace-down; }
Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; }
Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; }
// Switch Workspace by Index
Mod+1 { focus-workspace 1; }
Mod+2 { focus-workspace 2; }
Mod+3 { focus-workspace 3; }
Mod+4 { focus-workspace 4; }
// Move Focused Column to Workspace
Mod+Ctrl+Up { move-column-to-workspace-up; }
Mod+Ctrl+I { move-column-to-workspace-up; }
Mod+Ctrl+Down { move-column-to-workspace-down; }
Mod+Ctrl+U { move-column-to-workspace-down; }
Mod+Ctrl+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; }
Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; }
// Move Focused Column to Workspace Index
Mod+Shift+1 { move-column-to-workspace 1; }
Mod+Shift+2 { move-column-to-workspace 2; }
Mod+Shift+3 { move-column-to-workspace 3; }
Mod+Shift+4 { move-column-to-workspace 4; }
// Move Entire Workspace Position
Mod+Shift+Page_Up { move-workspace-up; }
Mod+Shift+I { move-workspace-up; }
Mod+Shift+Page_Down { move-workspace-down; }
Mod+Shift+U { move-workspace-down; }
// ========================================================================
// COMPOSITOR & SESSION CONTROLS
// ========================================================================
Mod+T hotkey-overlay-title="Open Terminal" { spawn "alacritty"; }
Mod+O repeat=false { toggle-overview; }
Mod+Tab repeat=false { toggle-overview; }
Mod+Slash { show-hotkey-overlay; }
Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; }
Mod+Shift+P { power-off-monitors; }
Mod+Shift+E { quit; }
}
+132 -101
View File
@@ -12,143 +12,174 @@ DO_INSTALL=false
CONFIRM_MODE=true # only true when no args are passed
usage() {
echo "Usage: $0 [-l] [-i]"
echo " -l Only create symlinks (no confirmation)"
echo " -i Only install system packages (no confirmation)"
echo " (no args = do both, with confirmation)"
exit 1
echo "Usage: $0 [-l] [-i]"
echo " -l Only create symlinks (no confirmation)"
echo " -i Only install system packages (no confirmation)"
echo " (no args = do both, with confirmation)"
exit 1
}
if [ $# -eq 0 ]; then
DO_LINKS=true
DO_INSTALL=true
CONFIRM_MODE=true
DO_LINKS=true
DO_INSTALL=true
CONFIRM_MODE=true
else
CONFIRM_MODE=false
while getopts ":lih" opt; do
case $opt in
l) DO_LINKS=true ;;
i) DO_INSTALL=true ;;
h) usage ;;
*) usage ;;
esac
done
CONFIRM_MODE=false
while getopts ":lih" opt; do
case $opt in
l) DO_LINKS=true ;;
i) DO_INSTALL=true ;;
h) usage ;;
*) usage ;;
esac
done
fi
# ---------------------------------------------------------------------------------
## Helper function for linking
# ---------------------------------------------------------------------------------
link_file() {
local src="$1"
local dest="$2"
local src="$1"
local dest="$2"
if [ -L "$dest" ]; then
if [ "$(readlink "$dest")" == "$src" ]; then
echo "✅ Symlink already correct: $dest → $src"
((SKIPPED++))
else
echo "⚠️ $dest is a symlink but points to the wrong target."
echo " Replacing with correct symlink..."
rm "$dest"
ln -s "$src" "$dest"
echo "🔁 Fixed: $dest → $src"
((CREATED++))
fi
elif [ -e "$dest" ]; then
echo "⚠️ $dest exists but is not a symlink. Skipping."
((SKIPPED++))
else
mkdir -p "$(dirname "$dest")"
ln -s "$src" "$dest"
echo "✅ Linked: $dest → $src"
((CREATED++))
fi
if [ -L "$dest" ]; then
if [ "$(readlink "$dest")" == "$src" ]; then
echo "✅ Symlink already correct: $dest → $src"
((SKIPPED++))
else
echo "⚠️ $dest is a symlink but points to the wrong target."
echo " Replacing with correct symlink..."
rm "$dest"
ln -s "$src" "$dest"
echo "🔁 Fixed: $dest → $src"
((CREATED++))
fi
elif [ -e "$dest" ]; then
echo "⚠️ $dest exists but is not a symlink. Skipping."
((SKIPPED++))
else
mkdir -p "$(dirname "$dest")"
ln -s "$src" "$dest"
echo "✅ Linked: $dest → $src"
((CREATED++))
fi
}
# ---------------------------------------------------------------------------------
## LINK SYMLINKS
# ---------------------------------------------------------------------------------
if [ "$DO_LINKS" = true ]; then
if [ "$CONFIRM_MODE" = true ]; then
read -p "❓ Do you want to create symlinks for your dotfiles? [y/N] " confirm
case "$confirm" in
[Yy]*) ;; # continue below
*) DO_LINKS=false ;;
esac
fi
if [ "$CONFIRM_MODE" = true ]; then
read -p "❓ Do you want to create symlinks for your dotfiles? [y/N] " confirm
case "$confirm" in
[Yy]*) ;; # continue below
*) DO_LINKS=false ;;
esac
fi
fi
if [ "$DO_LINKS" = true ]; then
echo "🔗 Checking and creating symlinks..."
CREATED=0
SKIPPED=0
echo "🔗 Checking and creating symlinks..."
CREATED=0
SKIPPED=0
link_file "$DOTFILES_DIR/config/fish/config.fish" "$HOME/.config/fish/config.fish"
link_file "$DOTFILES_DIR/config/vim" "$HOME/.vim"
link_file "$DOTFILES_DIR/config/kanata" "$HOME/.config/kanata"
link_file "$DOTFILES_DIR/scripts/bin" "$HOME/.local/bin"
# Modern shell & editor setup
link_file "$DOTFILES_DIR/config/niri/config.kdl" "$HOME/.config/niri/config.kdl"
link_file "$DOTFILES_DIR/config/niri/dms/binds.kdl" "$HOME/.config/niri/dms/binds.kdl"
link_file "$DOTFILES_DIR/config/fish/config.fish" "$HOME/.config/fish/config.fish"
link_file "$DOTFILES_DIR/config/vim" "$HOME/.vim"
link_file "$DOTFILES_DIR/config/kanata" "$HOME/.config/kanata"
link_file "$DOTFILES_DIR/scripts/bin" "$HOME/.local/bin"
echo ""
echo "🧾 Summary: $CREATED symlink(s) created or fixed, $SKIPPED skipped."
echo ""
echo ""
echo "🧾 Summary: $CREATED symlink(s) created or fixed, $SKIPPED skipped."
echo ""
echo "✅ Symlink setup complete."
echo ""
echo "✅ Symlink setup complete."
echo ""
fi
# ---------------------------------------------------------------------------------
## INSTALL SYSTEM PACKAGES
# ---------------------------------------------------------------------------------
if [ "$DO_INSTALL" = true ]; then
if [ "$CONFIRM_MODE" = true ]; then
read -p "❓ Do you want to install system packages? [y/N] " confirm
case "$confirm" in
[Yy]*) ;; # continue below
*) DO_INSTALL=false ;;
esac
fi
if [ "$CONFIRM_MODE" = true ]; then
read -p "❓ Do you want to install system packages? [y/N] " confirm
case "$confirm" in
[Yy]*) ;; # continue below
*) DO_INSTALL=false ;;
esac
fi
fi
if [ "$DO_INSTALL" = true ]; then
REQUIRED_PACKAGES=(
# system
fuse3
# network & download
wget curl ca-certificates gnupg rsync
# core utilities
fish git vim fd-find jq fzf ripgrep tree direnv make bat
ark unzip p7zip-full tar gzip bzip2 xz-utils
# build & dev tools
build-essential valgrind nodejs
# fonts
fonts-noto-core fonts-noto-color-emoji
# desktop portal
xdg-desktop-portal xdg-desktop-portal-gtk
)
MISSING_PACKAGES=()
# -----------------------------------------------------------------------------
## ADD NONFREE REPOS
# -----------------------------------------------------------------------------
echo "📦 Checking nonfree repositories..."
echo "🔍 Checking for missing packages..."
echo ""
REPO_PACKAGES=(void-repo-nonfree)
# Check which packages are missing using dpkg
for pkg in "${REQUIRED_PACKAGES[@]}"; do
if ! dpkg -s "$pkg" >/dev/null 2>&1; then
MISSING_PACKAGES+=("$pkg")
fi
done
# Only add multilib-nonfree on x86_64
if [ "$(uname -m)" = "x86_64" ]; then
REPO_PACKAGES+=(void-repo-multilib-nonfree)
fi
if [ ${#MISSING_PACKAGES[@]} -eq 0 ]; then
echo "✅ All required packages are already installed."
else
echo "📦 Syncing package index..."
sudo apt update
MISSING_REPOS=()
for repo in "${REPO_PACKAGES[@]}"; do
if ! xbps-query -p pkgver "$repo" >/dev/null 2>&1; then
MISSING_REPOS+=("$repo")
fi
done
echo "📦 Installing missing packages: ${MISSING_PACKAGES[*]}"
sudo apt install -y "${MISSING_PACKAGES[@]}"
fi
if [ ${#MISSING_REPOS[@]} -eq 0 ]; then
echo "✅ Nonfree repositories already enabled."
else
echo "📦 Enabling repositories: ${MISSING_REPOS[*]}"
sudo xbps-install -Sy "${MISSING_REPOS[@]}"
fi
echo ""
echo "✅ Package setup complete."
echo ""
echo ""
# -----------------------------------------------------------------------------
## INSTALL REQUIRED PACKAGES
# -----------------------------------------------------------------------------
REQUIRED_PACKAGES=(
# system & shell
pfetch fuse3 fish-shell
# network & download
wget curl ca-certificates gnupg rsync
# core utilities & CLI tools
git vim fd jq fzf ripgrep tree direnv make bat
ark unzip p7zip tar gzip bzip2 xz kanata gitu
# build & dev tools
alacritty base-devel valgrind tree-sitter-cli go nodejs
)
MISSING_PACKAGES=()
echo "🔍 Checking for missing packages..."
echo ""
# Check which packages are missing using xbps-query
for pkg in "${REQUIRED_PACKAGES[@]}"; do
if ! xbps-query -p pkgver "$pkg" >/dev/null 2>&1; then
MISSING_PACKAGES+=("$pkg")
fi
done
if [ ${#MISSING_PACKAGES[@]} -eq 0 ]; then
echo "✅ All required packages are already installed."
else
echo "📦 Syncing repository indexes..."
sudo xbps-install -S
echo "📦 Installing missing packages: ${MISSING_PACKAGES[*]}"
sudo xbps-install "${MISSING_PACKAGES[@]}"
fi
echo ""
echo "✅ Package setup complete."
echo ""
fi
+20 -10
View File
@@ -1,15 +1,11 @@
#!/bin/bash
# ---------------------------------------------------------------------------------
# Odin compiler install recipe
# Target: Pop!_OS / Ubuntu / Debian
# Builds from source - recommended method on Linux
# ---------------------------------------------------------------------------------
set -e
ODIN_DIR="$HOME/.odin"
echo "Installing Odin build dependencies..."
sudo apt update
sudo apt install -y llvm-18-dev clang-18 git-lfs build-essential
sudo xbps-install -S
sudo xbps-install -y llvm18-devel clang18 git-lfs base-devel
git lfs install --force
echo "Cloning Odin repository..."
@@ -21,10 +17,24 @@ else
cd "$ODIN_DIR"
fi
echo "Building Odin compiler..."
LLVM_CONFIG=llvm-config-18 make release-native
# Detect available LLVM 18 config tool name on Void
LLVM_CFG=""
for cfg in llvm-config-18 llvm-config18 llvm-config; do
if command -v "$cfg" >/dev/null 2>&1; then
LLVM_CFG="$cfg"
break
fi
done
if [ -z "$LLVM_CFG" ]; then
echo "❌ Error: Could not locate a valid llvm-config binary."
exit 1
fi
echo "Building Odin compiler using $LLVM_CFG..."
LLVM_CONFIG="$LLVM_CFG" make release-native
echo ""
echo "✓ Odin install complete."
echo " Add to your path if needed: export PATH=\"\$HOME/.odin:\$PATH\""
echo " Then verify with: odin version"
echo " Then verify with: odin version"
+17 -8
View File
@@ -1,15 +1,24 @@
#!/bin/bash
# ---------------------------------------------------------------------------------
# Raylib-go dependency install recipe
# Target: Pop!_OS / Ubuntu / Debian
# Installs system libs needed for raylib to run
# Raylib / Raylib-go dependency install recipe
# Target: Void Linux
# Installs system development libraries needed for Raylib / GLFW / OpenGL
# ---------------------------------------------------------------------------------
set -e
echo "Installing raylib-go system dependencies..."
sudo apt update
sudo apt install -y build-essential libasound2-dev libgl1-mesa-dev libx11-dev libxrandr-dev libxi-dev libxcursor-dev libxinerama-dev libxinerama-dev libxcursor-dev libxinerama-dev
echo "Installing Raylib system dependencies..."
sudo xbps-install -S
sudo xbps-install -y \
base-devel \
alsa-lib-devel \
MesaLib-devel \
libX11-devel \
libXrandr-devel \
libXi-devel \
libXcursor-devel \
libXinerama-devel \
libXxf86vm-devel
echo ""
echo "✓ Raylib-go dependencies installed."
echo ""
echo "✓ Raylib dependencies installed."
echo ""