Compare commits

..
13 Commits
Author SHA1 Message Date
mathias2784 d32a30f39e readme 2026-09-05 12:59:50 +02:00
mathias2784 4e31a23470 term: rework of setup script 2026-09-05 12:59:33 +02:00
mathias2784 7c8d0eff4b term: some cleaning up 2026-09-05 12:40:47 +02:00
mathias2784 a9e1b686d0 hyprland tweaks 2026-09-05 10:22:03 +02:00
mathias2784 a050d87439 rust linting 2026-09-02 16:29:47 +02:00
Mathias Schneider 694a305855 persisting tmux sessions 2026-09-02 12:19:57 +02:00
Mathias Schneider 6ceb170b89 tmux usage functionality tweaks 2026-09-02 11:57:04 +02:00
mathias2784 0db4be6796 merge main incl. conflict resolution 2026-08-31 09:15:05 +02:00
mathias2784 dbbf5a32fc opencode model list housekeeping 2026-08-31 09:11:53 +02:00
Mathias Schneider bce43be0d7 opencode: some config tweaks/updates 2026-08-26 17:56:49 +02:00
mathias2784 71e9db5c4c opencode: local ip-address for LM Studio 2026-08-21 15:55:08 +02:00
mathias2784 a504681e32 fix hyprland config 2026-08-21 14:28:30 +02:00
mathias2784 437eda2852 hyprland: convert config to lua 2026-08-21 14:14:50 +02:00
22 changed files with 1203 additions and 248 deletions
+1 -1
View File
@@ -15,7 +15,7 @@ Only entries that would be missed without explicit help are included.
| Task | Command | Why it matters | | Task | Command | Why it matters |
|------|---------|----------------| |------|---------|----------------|
| **Install required programs** | `bash .install_skripte/install_terminal_pcks.sh` <br>`bash .install_skripte/install_basic_pcks.sh` <br>`bash .install_skripte/install_hypr_pcks.sh` <br>`bash .install_skripte/install_kreation_pcks.sh` | These scripts install Neovim, hyprland, VST runtime, and other utilities. | | **Install required programs** | `bash term/setup.sh` <br>`bash .install_skripte/install_basic_pcks.sh` <br>`bash .install_skripte/install_hypr_pcks.sh` <br>`bash .install_skripte/install_kreation_pcks.sh` | These scripts install Neovim, hyprland, VST runtime, and other utilities. Edit `term/packages.txt` to add/remove terminal packages. |
| **Link configuration directories** | `ln -s ~/.dotfiles/hypr/.config/hypr ~/.config/hypr` <br>`ln -s ~/.dotfiles/term/.config/nvim ~/.config/nvim` | The repository expects the configs to live in `~/.config`. | | **Link configuration directories** | `ln -s ~/.dotfiles/hypr/.config/hypr ~/.config/hypr` <br>`ln -s ~/.dotfiles/term/.config/nvim ~/.config/nvim` | The repository expects the configs to live in `~/.config`. |
| **Add VST plugin** | Copy `kreation/.vst3/MT-PowerDrumKit.vst3` into your DAWs plugins folder (usually `~/.vst`). | The repo contains a prebuilt VST for use in audio software. | | **Add VST plugin** | Copy `kreation/.vst3/MT-PowerDrumKit.vst3` into your DAWs plugins folder (usually `~/.vst`). | The repo contains a prebuilt VST for use in audio software. |
+2 -2
View File
@@ -1,8 +1,8 @@
# setup ist ein Kommando-Target (keine Datei) und soll immer ausgeführt werden. # setup ist ein Kommando-Target (keine Datei) und soll immer ausgeführt werden.
.PHONY: basic .PHONY: basic
termn: term:
bash _install_skripte_install_terminal_pcks.sh bash term/setup.sh
stow term stow term
basic: term basic: term
bash _install_skripte_install_basic_pcks.sh bash _install_skripte_install_basic_pcks.sh
+128
View File
@@ -0,0 +1,128 @@
# Dotfiles
Personal configuration files for an Arch Linux workstation (Hyprland + Neovim + VST plugin), managed with [GNU Stow](https://www.gnu.org/software/stow/).
## Layout
| Directory | Contents |
|-----------|----------|
| `term/` | Fish + kitty + starship + nvim + tmux + yazi + fastfetch + opencode terminal environment |
| `hypr/` | Hyprland compositor config, kitty theme, wpaperd wallpapers |
| `kreation/`| VST plugin (`MT-PowerDrumKit.vst3`) |
| `_install_skripte/` | Miscellaneous install helper scripts |
Each top-level directory is a **stow package**. `stow` symlinks the files from the repository into your home directory (e.g. `term/.config/...``~/.config/...`).
## Prerequisites
- Arch Linux (or a distro with `pacman`)
- [`stow`](https://www.gnu.org/software/stow/)
- Relies on `git`, `sudo`, `curl`
## Quick start
```bash
# 1. Clone the repo
git clone https://github.com/<user>/dotfiles.git ~/.dotfiles
cd ~/.dotfiles
# 2. Install a target and symlink its files
make term # terminal + fish + kitty + nvim
make hypr # Hyprland (also pulls in basic + term)
make kreation # VST plugin (also pulls in basic)
```
Run `make <target>` from the repository root. Each target first runs the relevant install script and then `stow`s the package.
> The install scripts require `sudo` and may prompt for your password.
## Targets
| Target | What it does |
|--------|--------------|
| `make term` | Runs `term/setup.sh` (installs terminal packages, sets fish as default shell, clones tmuxifier), then `stow term` |
| `make basic` | Runs `install_basic_pcks.sh`, stows `nvim`, runs `nextcloud.sh` |
| `make hypr` | `make basic`, installs Hyprland packages, stows `hypr`, runs the Hyprland setup scripts (`ensure-env.sh`, `portal-host-override.sh`, `fix_dolphin_file_associations.sh`) |
| `make kreation` | `make basic`, installs VST runtime, stows `kreation` |
| `make buntes-monster` | Everything (`basic` + `hypr` + `kreation`), then wires up symlinks |
### Managing terminal packages
The terminal package list lives in a single editable file:
```
term/packages.txt
```
Add/remove packages on separate lines. Lines starting with `#` are ignored, and you can switch between package sources with section markers:
```
@pacman # install via pacman (default)
@aur # install via yay (AUR)
@npm # install via npm -g
```
The default section is `@pacman`. Any AUR dependency (`yay`) is bootstrapped automatically by `term/setup.sh`.
## What the install scripts do
- **`term/setup.sh`** enables multilib, updates the system, installs `yay` if missing, reads `term/packages.txt` and installs all packages with `--needed` (skips already-installed ones), sets `fish` as the default shell (`chsh -s /usr/bin/fish`), clones `tmuxifier`, adds the `git` yazi plugin, and runs `sudo updatedb`. It is idempotent and safe to re-run.
## Stow: resolving conflicts with existing paths
`stow` refuses to create a symlink where a real file or directory already exists on the target (your home directory). When you first set up a machine that already has configs in `~/.config`, you typically see an error like:
```
WARNING: stowing term would cause conflicts:
* existing target is neither a link nor a directory: .config/fish/config.fish
```
The **recommended** workflow is to back up the affected paths and remove them from the target location so stow can take over, then restore anything you want to keep as an overlay on top of the symlink. There are a few common approaches:
### 1. Back up and remove (recommended for first-time setup)
Point stow elsewhere so it only *reports* conflicts without touching anything, then handle the listed paths yourself:
```bash
# Dry-run to see exactly which paths conflict
cd ~/.dotfiles
stow --verbose --simulate term
# Inspect the conflicts, then back them up on the target side
mkdir -p ~/.config-backup
mv ~/.config/fish ~/.config-backup/fish # example — repeat for each conflicting path
# Now stow can create the links
stow term
```
Afterwards you can restore your old configs **on top of** the symlinks if you want a custom overlay:
```bash
cp -r ~/.config-backup/fish/* ~/.config/fish/
```
> The backup dir lives outside the stow packages, so stow never touches it.
### 2. Use `--adopt` with care
```bash
git stash # only if you have uncommitted repo changes you want to keep
cd ~/.dotfiles
stow --adopt term
git checkout . # discard any files that stow pulled into the repo
```
`stow --adopt` moves conflicting files *from your home dir into the repository* (overwriting what's stored there), then creates the symlink. This is convenient but **destructive to the repo copy** of those files — always review with a simulate run first and reset via git afterwards if you didn't intend to change the tracked config. Prefer approach #1 unless you deliberately want to recapture your live config into the repo.
### 3. Skip conflicts you don't manage in the repo
If a path simply shouldn't be managed by stow, use `--ignore`:
```bash
stow --ignore='\.config/(local|misc)' term
```
---
**When in doubt:** run `stow --verbose --simulate <target>` first — it prints what would happen (linking) without changing anything. Never `rm -rf` the `~/.config` of something you still want to keep; move it to a backup directory instead.
-73
View File
@@ -1,73 +0,0 @@
#!/bin/bash
# multilib aktivieren in /etc/pacman.conf
sudo sed -i.bak '/^#\[multilib\]/,+1 s/^#//' /etc/pacman.conf
# Für Noobs wie mich
# - erstellt Sicherheitskopie pacman.conf.bak vor der Änderung
# - sucht nach "[multilib]"
# - bezieht die nächste Zeile mit ein
# - Ersetzt ^# mit nüscht -> Kommentar entfernt :-)
sudo pacman -Syu
# Install yay
if pacman -Q yay &>/dev/null; then
echo "yay bereits installiert; fahre fort."
elif pacman -Si yay &>/dev/null; then
echo "Installiere yay mit pacman ..."
sudo pacman -S --needed yay
else
sudo pacman -S --needed base-devel git
echo "installiere yay via git ..."
git clone https://aur.archlinux.org/yay.git
(
cd yay || {
echo "Fehler: CD in yay-Verzeichnis fehlgeschlagen";
exit 1;
}
makepkg -si
)
rm -rf yay
fi
sudo pacman -S --needed \
fish \
vim \
nvim \
openssh \
rclone \
rsync \
unison \
stow \
nodejs \
npm \
starship \
fastfetch \
tree-sitter-cli \
python \
python-pip \
extra/ttf-jetbrains-mono-nerd \
unzip \
ruff \
python-ruff \
python-debugpy \
chromium \
selene \
opencode \
tmux \
yazi \
zoxide \
fzf \
locate \
ttf-jetbrains-mono-nerd \
ttf-font-awesome
# fish as standard terminal
chsh -s /usr/bin/fish
git clone https://github.com/jimeh/tmuxifier.git ~/.tmuxifier
npm install -g vscode-js-debug
npm install -g eslint_d
ya pkg add yazi-rs/plugins:git
sudo updatedb
View File
View File
+12
View File
@@ -0,0 +1,12 @@
-- Generated by HyprMod
-- Settings
hl.config({
general = {
border_size = 5,
col = {
active_border = "0xcbe0e89b",
inactive_border = "0xff0e0543",
},
},
})
Executable → Regular
+5 -6
View File
@@ -177,7 +177,7 @@ decoration {
# https://wiki.hypr.land/Configuring/Variables/#animations # https://wiki.hypr.land/Configuring/Variables/#animations
animations { animations {
enabled = yes, please :) enabled = true
# Default curves, see https://wiki.hypr.land/Configuring/Animations/#curves # Default curves, see https://wiki.hypr.land/Configuring/Animations/#curves
# NAME, X0, Y0, X1, Y1 # NAME, X0, Y0, X1, Y1
@@ -301,15 +301,11 @@ bind = $mainMod, V, togglefloating,
bind = $mainMod, SPACE, exec, $menu bind = $mainMod, SPACE, exec, $menu
bind = $mainMod SHIFT, SPACE, exec, nwg-drawer bind = $mainMod SHIFT, SPACE, exec, nwg-drawer
bind = $mainMod, P, pseudo, # dwindle bind = $mainMod, P, pseudo, # dwindle
bind = $mainMod, J, layoutmsg, togglesplit # dwindle bind = $mainMod SHIFT, J, layoutmsg, togglesplit # dwindle
bind = $mainMod, I, exec, firefox & bind = $mainMod, I, exec, firefox &
bind = $mainMod, n, exec, ~/.local/bin/hyprltm-net bind = $mainMod, n, exec, ~/.local/bin/hyprltm-net
# Move focus with mainMod + WASD or Vim-style # Move focus with mainMod + WASD or Vim-style
bind = $mainMod, a, movefocus, l
bind = $mainMod, d, movefocus, r
bind = $mainMod, w, movefocus, u
bind = $mainMod, s, movefocus, d
bind = $mainMod, h, movefocus, l bind = $mainMod, h, movefocus, l
bind = $mainMod, l, movefocus, r bind = $mainMod, l, movefocus, r
bind = $mainMod, k, movefocus, u bind = $mainMod, k, movefocus, u
@@ -469,3 +465,6 @@ windowrule {
# rounding = 0 # rounding = 0
# border_size = 0 # border_size = 0
# } # }
# HyprMod managed settings
source = /home/mathias/.config/hypr/hyprland-gui.conf
+718
View File
@@ -0,0 +1,718 @@
local var_color_active_border = "rgba(74c7ecee)"
local var_color_inactive_border = "rgba(45475aee)"
local var_color_decoration_shadow = "rgba(74c7ecee)"
local var_mainMod = "SUPER"
local var_terminal = "kitty"
local var_fileManager = "dolphin"
local var_menu = "wofi --show drun"
local var_screenshot_folder = "~/Bilder/Screenshots/"
-- #######################################################################################
-- AUTOGENERATED HYPRLAND CONFIG.
-- EDIT THIS CONFIG ACCORDING TO THE WIKI INSTRUCTIONS.
-- #######################################################################################
-- 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
require("env")
hl.exec_cmd("bash ~/.config/hypr/env.sh")
-- ###############
-- ## MONITORS ###
-- ###############
-- See https://wiki.hypr.land/Configuring/Monitors/
-- monitor=,preferred,auto,auto
require("modules.monitor_setup_buntes_monster")
-- source = ~/.config/hypr/modules/monitor_setup_buntes_monster.conf
-- unscale XWayland
hl.config({
xwayland = {
force_zero_scaling = true,
},
})
-- ##################
-- ## MY PROGRAMS ###
-- ##################
-- See https://wiki.hypr.land/Configuring/Keywords/
-- Set programs that you use
-- $menu = hyprlauncher
-- ################
-- ## AUTOSTART ###
-- ################
-- Autostart necessary processes (like notifications daemons, status bars, etc.)
-- Or execute your favorite apps at launch like this:
-- exec = bash ~/.config/wpaperd/link_wallpapers.sh
hl.on("hyprland.start", function()
hl.exec_cmd("waybar &")
end)
-- exec-one = hyprpaper &
hl.on("hyprland.start", function()
hl.exec_cmd("wpaperd &")
hl.exec_cmd("swaync &")
hl.exec_cmd("hypridle &")
hl.exec_cmd("nextcloud &")
hl.exec_cmd("sh ~/.config/hypr/scripts/portal-host-override.sh")
hl.exec_cmd("sh ~/.config/hypr/scripts/ensure-mime-defaults.sh")
end)
-- exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP XDG_SESSION_TYPE XDG_MENU_PREFIX
-- exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP XDG_SESSION_TYPE XDG_MENU_PREFIX
-- exec = gsettings set org.gnome.desktop.interface gtk-theme "Breeze-Dark" # for GTK3 apps
-- exec = gsettings set org.gnome.desktop.interface color-scheme "prefer-dark" # for GTK4 apps
-- env = QT_QPA_PLATFORMTHEME,qt6ct # for Qt apps
-- ############################
-- ## ENVIRONMENT VARIABLES ###
-- ############################
-- See https://wiki.hypr.land/Configuring/Environment-variables/
hl.env("XCURSOR_SIZE", "24")
hl.env("HYPRCURSOR_SIZE", "24")
hl.env("XDG_CURRENT_DESKTOP", "Hyprland")
hl.env("XDG_SESSION_DESKTOP", "Hyprland")
hl.env("XDG_SESSION_TYPE", "wayland")
hl.env("XDG_MENU_PREFIX", "plasma-")
hl.env("GTK_USE_PORTAL", "1")
hl.env("GTK_THEME", "Adwaita:dark")
hl.env("QT_WAYLAND_DISABLE_WINDOWDECORATION", "1")
hl.env("QT_QPA_PLATFORMTHEME", "kde")
-- env = QT_AUTO_SCREEN_SCALE_FACTOR,0.75
-- env = QT_SCALE_FACTOR,0.75
-- env = GDK_SCALE,1.5
-- env = GDK_DPI_SCALE,0.75
-- ##################
-- ## 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
-- ####################
-- ## COLOR SCHEMES ###
-- ####################
require("themes.mocha")
-- ####################
-- ## LOOK AND FEEL ###
-- ####################
-- Refer to https://wiki.hypr.land/Configuring/Variables/
-- https://wiki.hypr.land/Configuring/Variables/#general
hl.config({
general = {
gaps_in = 3,
gaps_out = 4,
border_size = 3,
},
})
-- https://wiki.hypr.land/Configuring/Variables/#variable-types for info about colors
hl.config({
general = {
col = {
active_border = var_color_active_border,
inactive_border = var_color_inactive_border,
},
},
})
-- Set to true enable resizing windows by clicking and dragging on borders and gaps
hl.config({
general = {
resize_on_border = true,
},
})
-- Please see https://wiki.hypr.land/Configuring/Tearing/ before you turn this on
hl.config({
general = {
allow_tearing = false,
layout = "dwindle",
},
})
-- https://wiki.hypr.land/Configuring/Variables/#decoration
hl.config({
decoration = {
rounding = 5,
rounding_power = 2,
},
})
-- Change transparency of focused and unfocused windows
hl.config({
decoration = {
active_opacity = 1.0,
inactive_opacity = 1.0,
shadow = {
enabled = true,
range = 10,
render_power = 3,
color = var_color_decoration_shadow,
},
},
})
-- https://wiki.hypr.land/Configuring/Variables/#blur
hl.config({
decoration = {
blur = {
enabled = true,
size = 10,
passes = 2,
vibrancy = 0.1696,
},
},
})
-- https://wiki.hypr.land/Configuring/Variables/#animations
hl.config({
animations = {
enabled = true,
},
})
-- Default curves, see https://wiki.hypr.land/Configuring/Animations/#curves
-- NAME, X0, Y0, X1, Y1
hl.curve("easeOutQuint", { type = "bezier", points = { {0.23, 1}, {0.32, 1} } })
hl.curve("easeInOutCubic", { type = "bezier", points = { {0.65, 0.05}, {0.36, 1} } })
hl.curve("linear", { type = "bezier", points = { {0, 0}, {1, 1} } })
hl.curve("almostLinear", { type = "bezier", points = { {0.5, 0.5}, {0.75, 1} } })
hl.curve("quick", { type = "bezier", points = { {0.15, 0}, {0.1, 1} } })
-- Default animations, see https://wiki.hypr.land/Configuring/Animations/
-- NAME, ONOFF, SPEED, CURVE, [STYLE]
hl.animation({
leaf = "global",
enabled = true,
speed = 10,
bezier = "default",
})
hl.animation({
leaf = "border",
enabled = true,
speed = 5.39,
bezier = "easeOutQuint",
})
hl.animation({
leaf = "windows",
enabled = true,
speed = 4.79,
bezier = "easeOutQuint",
})
hl.animation({
leaf = "windowsIn",
enabled = true,
speed = 4.1,
bezier = "easeOutQuint",
style = "popin 87%",
})
hl.animation({
leaf = "windowsOut",
enabled = true,
speed = 1.49,
bezier = "linear",
style = "popin 87%",
})
hl.animation({
leaf = "fadeIn",
enabled = true,
speed = 1.73,
bezier = "almostLinear",
})
hl.animation({
leaf = "fadeOut",
enabled = true,
speed = 1.46,
bezier = "almostLinear",
})
hl.animation({
leaf = "fade",
enabled = true,
speed = 3.03,
bezier = "quick",
})
hl.animation({
leaf = "layers",
enabled = true,
speed = 3.81,
bezier = "easeOutQuint",
})
hl.animation({
leaf = "layersIn",
enabled = true,
speed = 4,
bezier = "easeOutQuint",
style = "fade",
})
hl.animation({
leaf = "layersOut",
enabled = true,
speed = 1.5,
bezier = "linear",
style = "fade",
})
hl.animation({
leaf = "fadeLayersIn",
enabled = true,
speed = 1.79,
bezier = "almostLinear",
})
hl.animation({
leaf = "fadeLayersOut",
enabled = true,
speed = 1.39,
bezier = "almostLinear",
})
hl.animation({
leaf = "workspaces",
enabled = true,
speed = 1.94,
bezier = "almostLinear",
style = "fade",
})
hl.animation({
leaf = "workspacesIn",
enabled = true,
speed = 1.21,
bezier = "almostLinear",
style = "fade",
})
hl.animation({
leaf = "workspacesOut",
enabled = true,
speed = 1.94,
bezier = "almostLinear",
style = "fade",
})
hl.animation({
leaf = "zoomFactor",
enabled = true,
speed = 7,
bezier = "quick",
})
-- Ref https://wiki.hypr.land/Configuring/Workspace-Rules/
-- "Smart gaps" / "No gaps when only"
-- uncomment all if you wish to use that.
hl.workspace_rule({
workspace = "w[tv1]",
gaps_out = 0,
gaps_in = 0,
})
hl.workspace_rule({
workspace = "f[1]",
gaps_out = 0,
gaps_in = 0,
})
hl.window_rule({
name = "no-gaps-wtv1",
match = {
float = false,
workspace = "w[tv1]",
},
border_size = 0,
rounding = 0,
})
hl.window_rule({
name = "no-gaps-f1",
match = {
float = false,
workspace = "f[1]",
},
border_size = 0,
rounding = 0,
})
-- See https://wiki.hypr.land/Configuring/Dwindle-Layout/ for more
hl.config({
dwindle = {
preserve_split = true,
},
})
-- See https://wiki.hypr.land/Configuring/Master-Layout/ for more
hl.config({
master = {
new_status = "master",
},
})
-- https://wiki.hypr.land/Configuring/Variables/#misc
hl.config({
misc = {
force_default_wallpaper = -1,
disable_hyprland_logo = false,
},
})
-- ############
-- ## INPUT ###
-- ############
-- https://wiki.hypr.land/Configuring/Variables/#input
hl.config({
input = {
kb_layout = "de",
kb_variant = "",
kb_model = "",
kb_options = "grp:alt_shift_toggle",
kb_rules = "",
follow_mouse = 1,
numlock_by_default = true,
sensitivity = 0,
touchpad = {
natural_scroll = true,
},
},
})
-- See https://wiki.hypr.land/Configuring/Gestures
hl.gesture({
fingers = 3,
direction = "horizontal",
action = "workspace",
})
-- Example per-device config
-- See https://wiki.hypr.land/Configuring/Keywords/#per-device-input-configs for more
hl.device({
name = "epic-mouse-v1",
sensitivity = -0.5,
})
-- ##################
-- ## KEYBINDINGS ###
-- ##################
-- See https://wiki.hypr.land/Configuring/Keywords/
-- Example binds, see https://wiki.hypr.land/Configuring/Binds/ for more
hl.bind(var_mainMod .. " + RETURN", hl.dsp.exec_cmd(var_terminal))
hl.bind(var_mainMod .. " + Q", hl.dsp.window.close())
hl.bind(var_mainMod .. " + ESCAPE", hl.dsp.exec_cmd("hyprshutdown"))
hl.bind(var_mainMod .. " + SHIFT + ESCAPE", hl.dsp.exec_cmd("command -v hyprshutdown >/dev/null 2>&1 && hyprshutdown || hyprctl dispatch exit"))
hl.bind(var_mainMod .. " + CTRL + ESCAPE", hl.dsp.exec_cmd("hyprshutdown -t 'Shutting down...' --post-cmd 'shutdown -P 0'"))
hl.bind(var_mainMod .. " + ALT + ESCAPE", hl.dsp.exec_cmd("hyprshutdown -t 'Restarting...' --post-cmd 'reboot'"))
hl.bind(var_mainMod .. " + E", hl.dsp.exec_cmd(var_fileManager))
hl.bind(var_mainMod .. " + V", hl.dsp.window.float({ action = "toggle" }))
hl.bind(var_mainMod .. " + SPACE", hl.dsp.exec_cmd(var_menu))
hl.bind(var_mainMod .. " + SHIFT + SPACE", hl.dsp.exec_cmd("nwg-drawer"))
hl.bind(var_mainMod .. " + P", hl.dsp.window.pseudo())
hl.bind(var_mainMod .. " + SHIFT + J", hl.dsp.layout("togglesplit"))
hl.bind(var_mainMod .. " + I", hl.dsp.exec_cmd("firefox &"))
hl.bind(var_mainMod .. " + n", hl.dsp.exec_cmd("~/.local/bin/hyprltm-net"))
-- Move focus with mainMod + WASD or Vim-style
hl.bind(var_mainMod .. " + a", hl.dsp.focus({ direction = "left" }))
hl.bind(var_mainMod .. " + d", hl.dsp.focus({ direction = "right" }))
hl.bind(var_mainMod .. " + w", hl.dsp.focus({ direction = "up" }))
hl.bind(var_mainMod .. " + s", hl.dsp.focus({ direction = "down" }))
hl.bind(var_mainMod .. " + h", hl.dsp.focus({ direction = "left" }))
hl.bind(var_mainMod .. " + l", hl.dsp.focus({ direction = "right" }))
hl.bind(var_mainMod .. " + k", hl.dsp.focus({ direction = "up" }))
hl.bind(var_mainMod .. " + j", hl.dsp.focus({ direction = "down" }))
-- Move windows with mainMod + WASD or Vim-style
hl.bind(var_mainMod .. " + SHIFT + a", hl.dsp.window.move({ direction = "left" }))
hl.bind(var_mainMod .. " + SHIFT + d", hl.dsp.window.move({ direction = "right" }))
hl.bind(var_mainMod .. " + SHIFT + w", hl.dsp.window.move({ direction = "up" }))
hl.bind(var_mainMod .. " + SHIFT + s", hl.dsp.window.move({ direction = "down" }))
hl.bind(var_mainMod .. " + SHIFT + h", hl.dsp.window.move({ direction = "left" }))
hl.bind(var_mainMod .. " + SHIFT + l", hl.dsp.window.move({ direction = "right" }))
hl.bind(var_mainMod .. " + SHIFT + k", hl.dsp.window.move({ direction = "up" }))
hl.bind(var_mainMod .. " + SHIFT + j", hl.dsp.window.move({ direction = "down" }))
-- Resize focused window with mainMod + Arrows
hl.bind(var_mainMod .. " + left", hl.dsp.window.resize({ x = -10, y = 0, relative = true }))
hl.bind(var_mainMod .. " + right", hl.dsp.window.resize({ x = 10, y = 0, relative = true }))
hl.bind(var_mainMod .. " + up", hl.dsp.window.resize({ x = 0, y = -10, relative = true }))
hl.bind(var_mainMod .. " + down", hl.dsp.window.resize({ x = 0, y = 10, relative = true }))
-- Switch workspaces with mainMod + [0-9]
hl.bind(var_mainMod .. " + 1", hl.dsp.focus({ workspace = 1 }))
hl.bind(var_mainMod .. " + 2", hl.dsp.focus({ workspace = 2 }))
hl.bind(var_mainMod .. " + 3", hl.dsp.focus({ workspace = 3 }))
hl.bind(var_mainMod .. " + 4", hl.dsp.focus({ workspace = 4 }))
hl.bind(var_mainMod .. " + 5", hl.dsp.focus({ workspace = 5 }))
hl.bind(var_mainMod .. " + 6", hl.dsp.focus({ workspace = 6 }))
hl.bind(var_mainMod .. " + 7", hl.dsp.focus({ workspace = 7 }))
hl.bind(var_mainMod .. " + 8", hl.dsp.focus({ workspace = 8 }))
hl.bind(var_mainMod .. " + 9", hl.dsp.focus({ workspace = 9 }))
hl.bind(var_mainMod .. " + 0", hl.dsp.focus({ workspace = 10 }))
hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+"), {
repeating = true,
})
hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"), {
locked = true,
})
-- Move active window to a workspace with mainMod + SHIFT + [0-9]
hl.bind(var_mainMod .. " + SHIFT + 1", hl.dsp.window.move({ workspace = 1 }))
hl.bind(var_mainMod .. " + SHIFT + 2", hl.dsp.window.move({ workspace = 2 }))
hl.bind(var_mainMod .. " + SHIFT + 3", hl.dsp.window.move({ workspace = 3 }))
hl.bind(var_mainMod .. " + SHIFT + 4", hl.dsp.window.move({ workspace = 4 }))
hl.bind(var_mainMod .. " + SHIFT + 5", hl.dsp.window.move({ workspace = 5 }))
hl.bind(var_mainMod .. " + SHIFT + 6", hl.dsp.window.move({ workspace = 6 }))
hl.bind(var_mainMod .. " + SHIFT + 7", hl.dsp.window.move({ workspace = 7 }))
hl.bind(var_mainMod .. " + SHIFT + 8", hl.dsp.window.move({ workspace = 8 }))
hl.bind(var_mainMod .. " + SHIFT + 9", hl.dsp.window.move({ workspace = 9 }))
hl.bind(var_mainMod .. " + SHIFT + 0", hl.dsp.window.move({ workspace = 10 }))
-- # Example special workspace (scratchpad)
-- bind = $mainMod, S, togglespecialworkspace, magic
-- bind = $mainMod SHIFT, S, movetoworkspace, special:magic
-- Scroll through existing workspaces with mainMod + scroll
hl.bind(var_mainMod .. " + mouse_down", hl.dsp.focus({ workspace = "e+1" }))
hl.bind(var_mainMod .. " + mouse_up", hl.dsp.focus({ workspace = "e-1" }))
-- Move/resize windows with mainMod + LMB/RMB and dragging
hl.bind(var_mainMod .. " + mouse:272", hl.dsp.window.drag(), {
mouse = true,
})
hl.bind(var_mainMod .. " + mouse:273", hl.dsp.window.resize(), {
mouse = true,
})
-- Laptop multimedia keys for volume and LCD brightness
hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+"), {
repeating = true,
locked = true,
})
hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"), {
repeating = true,
locked = true,
})
hl.bind("XF86AudioMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"), {
repeating = true,
locked = true,
})
hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"), {
repeating = true,
locked = true,
})
hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("brightnessctl -e4 -n2 set 5%+"), {
repeating = true,
locked = true,
})
hl.bind("XF86MonBrightnessDown", hl.dsp.exec_cmd("brightnessctl -e4 -n2 set 5%-"), {
repeating = true,
locked = true,
})
-- Requires playerctl
hl.bind("XF86AudioNext", hl.dsp.exec_cmd("playerctl next"), {
locked = true,
})
hl.bind("XF86AudioPause", hl.dsp.exec_cmd("playerctl play-pause"), {
locked = true,
})
hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("playerctl play-pause"), {
locked = true,
})
hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("playerctl previous"), {
locked = true,
})
-- Screenshots
hl.bind("PRINT", hl.dsp.exec_cmd("hyprshot -m region --output-folder " .. var_screenshot_folder), {
locked = true,
})
hl.bind("CTRL + PRINT", hl.dsp.exec_cmd("hyprshot -m window --output-folder " .. var_screenshot_folder), {
locked = true,
})
hl.bind("SHIFT + PRINT", hl.dsp.exec_cmd("hyprshot -m active --output-folder " .. var_screenshot_folder), {
locked = true,
})
-- Screenlock
hl.bind("CTRL + ALT + L", hl.dsp.exec_cmd("hyprlock"), {
locked = true,
})
-- #############################
-- ## 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 windowrules that are useful
-- Ignore maximize requests from all apps. You'll probably like this.
hl.window_rule({
name = "suppress-maximize-events",
match = {
class = ".*",
},
suppress_event = "maximize",
})
-- Fix some dragging issues with XWayland
hl.window_rule({
name = "fix-xwayland-drags",
match = {
class = "^$",
title = "^$",
xwayland = true,
float = true,
fullscreen = false,
pin = false,
},
no_focus = true,
})
-- Hyprland-run windowrule
hl.config({
decoration = {
blur = {
size = 8,
passes = 2,
},
},
})
hl.window_rule({
name = "move-hyprland-run",
match = {
class = "hyprland-run",
},
move = "20 monitor_h-120",
float = true,
})
hl.window_rule({
name = "opacity-kitty-dolphin",
match = {
class = ".*(kitty|dolphin).*",
},
opacity = "0.90 0.80",
})
hl.layer_rule({
match = {
namespace = "waybar",
},
blur = true,
})
hl.layer_rule({
match = {
namespace = "waybar",
},
blur_popups = true,
})
hl.window_rule({
name = "no-rounding-fullscreen",
match = {
fullscreen = 1,
},
rounding = 0,
border_size = 0,
})
-- windowrule {
-- name = no-rounding-steam-games
-- match:class = ^steam_app_.*$
-- rounding = 0
-- border_size = 0
-- }
-- windowrule {
-- name = no-rounding-gamescope
-- match:class = ^gamescope$
-- rounding = 0
-- border_size = 0
-- }
-- HyprMod managed settings
require("hyprland-gui")
@@ -0,0 +1,43 @@
-- monitorv2 {
-- output = DP-2
-- mode = highres highrr
-- position = 0x0
-- scale = 1.2
-- bitdepth = 10
-- cm = hdr
-- supports_wide_color = 1
-- supports_hdr = 1
-- sdr_min_luminance = 0.005
-- sdr_max_luminance = 200
-- min_luminance = 0.002
-- max_luminance = 200
-- max_avg_luminance = 150
-- }
hl.monitor({
output = "DP-2",
disabled = false,
mode = "preferred",
position = "auto-left",
scale = 1.5,
})
hl.monitor({
output = "DP-3",
disabled = false,
mode = "preferred",
position = "auto-right",
scale = 1.0,
})
View File
-1
View File
@@ -37,4 +37,3 @@ fi
export DATAFLEX_BACKEND_REPO="/c/_Master/202602 DataFleX/repos/flexibility_platform_backend/" export DATAFLEX_BACKEND_REPO="/c/_Master/202602 DataFleX/repos/flexibility_platform_backend/"
export PATH="$HOME/.local/bin:$PATH" export PATH="$HOME/.local/bin:$PATH"
. "$HOME/.cargo/env"
@@ -1,136 +0,0 @@
function fish_prompt
# This prompt shows:
# - green lines if the last return command is OK, red otherwise
# - your user name, in red if root or yellow otherwise
# - your hostname, in cyan if ssh or blue otherwise
# - the current path (with prompt_pwd)
# - date +%X
# - the current virtual environment, if any
# - the current git status, if any, with fish_git_prompt
# - the current battery state, if any, and if your power cable is unplugged, and if you have "acpi"
# - current background jobs, if any
# It goes from:
# ┬─[nim@Hattori:~]─[11:39:00]
# ╰─>$ echo here
# To:
# ┬─[nim@Hattori:~/w/dashboard]─[11:37:14]─[V:django20]─[G:master↑1|●1✚1…1]─[B:85%, 05:41:42 remaining]
# │ 2 15054 0% arrêtée sleep 100000
# │ 1 15048 0% arrêtée sleep 100000
# ╰─>$ echo there
set -l retc red
test $status = 0; and set retc green
set -q __fish_git_prompt_showupstream
or set -g __fish_git_prompt_showupstream auto
function _nim_prompt_wrapper
set retc $argv[1]
set -l field_name $argv[2]
set -l field_value $argv[3]
set_color normal
set_color $retc
echo -n '─'
set_color -o green
echo -n '['
set_color normal
test -n $field_name
and echo -n $field_name:
set_color $retc
echo -n $field_value
set_color -o green
echo -n ']'
end
set_color $retc
echo -n '┬─'
set_color -o green
echo -n [
if functions -q fish_is_root_user; and fish_is_root_user
set_color -o red
else
set_color -o yellow
end
echo -n $USER
set_color -o white
echo -n @
if test -z "$SSH_CLIENT"
set_color -o blue
else
set_color -o cyan
end
echo -n (prompt_hostname)
set_color -o white
echo -n :(prompt_pwd)
set_color -o green
echo -n ']'
# Date
_nim_prompt_wrapper $retc '' (date +%X)
# Vi-mode
if test "$fish_key_bindings" = fish_vi_key_bindings
or test "$fish_key_bindings" = fish_hybrid_key_bindings
set -l mode
switch $fish_bind_mode
case default
set mode (set_color --bold red)N
case operator f F t T
set mode (set_color --bold cyan)N
case insert
set mode (set_color --bold green)I
case replace_one
set mode (set_color --bold green)R
case replace
set mode (set_color --bold cyan)R
case visual
set mode (set_color --bold magenta)V
end
set mode $mode(set_color normal)
_nim_prompt_wrapper $retc '' $mode
end
# Virtual Environment
set -q VIRTUAL_ENV_DISABLE_PROMPT
or set -g VIRTUAL_ENV_DISABLE_PROMPT true
set -q VIRTUAL_ENV
and _nim_prompt_wrapper $retc V (path basename "$VIRTUAL_ENV")
# git
set -l prompt_git (fish_git_prompt '%s')
test -n "$prompt_git"
and _nim_prompt_wrapper $retc G $prompt_git
# Battery status
type -q acpi
and acpi -a 2>/dev/null | string match -rq off
and _nim_prompt_wrapper $retc B (acpi -b | cut -d' ' -f 4-)
# New line
echo
# Background jobs
set_color normal
for job in (jobs)
set_color $retc
echo -n '│ '
set_color brown
echo $job
end
set_color normal
set_color $retc
echo -n '╰─>'
set_color -o red
echo -n '$ '
set_color normal
end
@@ -52,6 +52,7 @@ return {
"cssls", -- CSS "cssls", -- CSS
"bashls", -- Bash "bashls", -- Bash
"lua_ls", -- Lua "lua_ls", -- Lua
"rust_analyzer", -- Rust
--"stylua", --"stylua",
}, },
}) })
@@ -147,6 +148,15 @@ return {
-- filetypes and tsserver/request forwarding to ts_ls (hybrid mode) -- filetypes and tsserver/request forwarding to ts_ls (hybrid mode)
vim.lsp.config("vue_ls", {}) vim.lsp.config("vue_ls", {})
-- Rust
vim.lsp.config("rust_analyzer", {
setting = {
["rust-analyzer"] = {
checkOnSave = { command = "clippy" },
},
},
})
-- Other languages -- Other languages
vim.lsp.config("jsonls", {}) vim.lsp.config("jsonls", {})
vim.lsp.config("yamlls", {}) vim.lsp.config("yamlls", {})
@@ -164,6 +174,7 @@ return {
vim.lsp.enable("html") vim.lsp.enable("html")
vim.lsp.enable("cssls") vim.lsp.enable("cssls")
vim.lsp.enable("bashls") vim.lsp.enable("bashls")
vim.lsp.enable("rust_analyzer")
end, end,
}, },
} }
@@ -20,6 +20,7 @@ return {
markdown = { "prettier" }, markdown = { "prettier" },
sh = { "shfmt" }, sh = { "shfmt" },
bash = { "shfmt" }, bash = { "shfmt" },
rust = { "rustfmt" },
}, },
}) })
@@ -14,6 +14,7 @@ return {
json = { "jsonlint" }, json = { "jsonlint" },
yaml = { "yamllint" }, yaml = { "yamllint" },
markdown = { "markdownlint" }, markdown = { "markdownlint" },
rust = { "clippy" },
} }
vim.api.nvim_create_autocmd({ "BufWritePost" }, { vim.api.nvim_create_autocmd({ "BufWritePost" }, {
@@ -52,6 +52,7 @@ return {
"bash", "bash",
"markdown", "markdown",
"markdown_inline", "markdown_inline",
"rust",
} }
-- Install parsers -- Install parsers
+17 -7
View File
@@ -3,25 +3,35 @@
"default_agent": "plan", "default_agent": "plan",
"lsp": {
"pyright": {
"command": ["pyright-langserver", "--stdio"],
"extensions": [".py"]
}
},
"provider": { "provider": {
"lmstudio": { "lmstudio": {
"npm": "@ai-sdk/openai-compatible", "npm": "@ai-sdk/openai-compatible",
"name": "LM Studio (local)", "name": "LM Studio (local)",
"options": { "options": {
"baseURL": "http://127.0.0.1:1234/v1" "baseURL": "http://192.168.0.4:1234/v1"
}, },
"models": { "models": {
"google/gemma-3-4b": { "qwen3.5-35b-a3b": {
"name": "google/gemma-3-4b" "name": "qwen3.5-35b-a3b"
},
"qwen/qwen3.8-27b": {
"name": "qwen/qwen3.8-27b"
}, },
"google/gemma-4-26b-a4b": { "google/gemma-4-26b-a4b": {
"name": "google/gemma-4-26b-a4b" "name": "google/gemma-4-26b-a4b"
}, },
"mistralai/ministral-3-14b-reasoning": { "qwen/qwen3-4b-thinking-2507": {
"name": "mistralai/ministral-3-14b-reasoning" "name": "qwen/qwen3-4b-thinking-2507"
}, },
"openai/gpt-oss-20b": { "qwen2.5-coder-1.5b-instruct": {
"name": "openai/gpt-oss-20b" "name": "qwen2.5-coder-1.5b-instruct"
} }
} }
} }
+27
View File
@@ -1,3 +1,30 @@
# Tmux Configuration
This directory contains the tmux configuration, reusable tmuxifier layouts, and
session persistence settings.
## Session Persistence
The configuration uses tmux-resurrect and tmux-continuum to save sessions every
15 minutes and restore the latest saved session when tmux starts. Sessions save
window and pane layouts, working directories, and pane contents. Running
programs are restored only when supported by tmux-resurrect; their live process
state cannot survive a shutdown.
After starting tmux, install the configured plugins with:
```text
Ctrl-Space I
```
`Ctrl-Space` is the configured tmux prefix. You can also save or restore
manually with:
```text
Ctrl-Space Ctrl-S Save the current tmux state
Ctrl-Space Ctrl-R Restore the last saved state
```
# Tmuxifier Session Templates # Tmuxifier Session Templates
This directory contains reusable tmux session and window layouts managed by [tmuxifier](https://github.com/jimeh/tmuxifier). This directory contains reusable tmux session and window layouts managed by [tmuxifier](https://github.com/jimeh/tmuxifier).
+14
View File
@@ -29,6 +29,13 @@ bind j select-pane -D
bind k select-pane -U bind k select-pane -U
bind l select-pane -R bind l select-pane -R
# Create panes with the same working directory
bind % split-window -h -c "#{pane_current_path}"
bind '"' split-window -v -c "#{pane_current_path}"
# Kill panes without prompt
bind x kill-pane
# ── Plugins ──────────────────────────────────────────────────────────────────── # ── Plugins ────────────────────────────────────────────────────────────────────
@@ -38,9 +45,16 @@ if "test ! -d ~/.config/tmux/plugins/tpm" \
set -g @plugin 'tmux-plugins/tpm' set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible' set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'
# set -g @plugin 'sindrip/tmux-nvim-navigator' # set -g @plugin 'sindrip/tmux-nvim-navigator'
set -g @plugin 'jimeh/tmuxifier' set -g @plugin 'jimeh/tmuxifier'
# Persist sessions across reboots and restore them when tmux starts.
set -g @continuum-save-interval '5'
set -g @continuum-restore 'on'
set -g @resurrect-capture-pane-contents 'on'
# Catppuccin theme # Catppuccin theme
set -g @plugin 'catppuccin/tmux' set -g @plugin 'catppuccin/tmux'
set -g @catppuccin_flavor "mocha" set -g @catppuccin_flavor "mocha"
+46
View File
@@ -0,0 +1,46 @@
# ---------------------------------------------------------------------------
# Terminal package list for term/setup.sh
#
# Maintenance:
# - Add / remove packages on separate lines.
# - Lines starting with '#' and blank lines are ignored.
# - Use "@pacman", "@aur" or "@npm" markers to switch section.
# - The default section is @pacman.
# ---------------------------------------------------------------------------
@pacman
fish
extra/kitty
neovim
openssh
rclone
rsync
unison
stow
nodejs
npm
starship
fastfetch
tree-sitter-cli
python
python-pip
unzip
ruff
python-ruff
python-debugpy
chromium
selene
tmux
yazi
zoxide
fzf
locate
ttf-jetbrains-mono-nerd
ttf-font-awesome
@aur
opencode
@npm
eslint_d
vscode-js-debug
Executable
+154
View File
@@ -0,0 +1,154 @@
#!/bin/bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PACKAGES_FILE="$SCRIPT_DIR/packages.txt"
# ---------------------------------------------------------------------------
# Enable multilib in /etc/pacman.conf (with a safety backup)
# ---------------------------------------------------------------------------
enable_multilib() {
sudo sed -i.bak '/^#\[multilib\]/,+1 s/^#//' /etc/pacman.conf
}
# ---------------------------------------------------------------------------
# Ensure yay (AUR helper) is installed.
# ---------------------------------------------------------------------------
install_yay() {
if pacman -Q yay &>/dev/null; then
echo "yay bereits installiert; fahre fort."
return
fi
if pacman -Si yay &>/dev/null; then
echo "Installiere yay mit pacman ..."
sudo pacman -S --needed yay
return
fi
echo "installiere yay via git ..."
sudo pacman -S --needed base-devel git
local tmp
tmp="$(mktemp -d)"
git clone https://aur.archlinux.org/yay.git "$tmp/yay"
(
cd "$tmp/yay"
makepkg -si
)
rm -rf "$tmp"
}
# ---------------------------------------------------------------------------
# Read packages.txt, split into pacman / aur / npm sections.
# ---------------------------------------------------------------------------
read_packages() {
local section="pacman"
local current
current=""
while IFS= read -r line || [[ -n "$line" ]]; do
current="${line%%#*}"
current="${current##*( )}"
current="${current%%*( )}"
[[ -z "$current" ]] && continue
case "$current" in
@pacman) section="pacman" ;;
@aur) section="aur" ;;
@npm) section="npm" ;;
*)
case "$section" in
pacman) pacman_pkgs+=("$current") ;;
aur) aur_pkgs+=("$current") ;;
npm) npm_pkgs+=("$current") ;;
esac
;;
esac
done < "$PACKAGES_FILE"
}
declare -a pacman_pkgs=() aur_pkgs=() npm_pkgs=()
# ---------------------------------------------------------------------------
# Install sections.
# ---------------------------------------------------------------------------
install_pacman() {
if ((${#pacman_pkgs[@]})); then
echo "==> Installiere Pacman-Pakete: ${pacman_pkgs[*]}"
yay -S --needed "${pacman_pkgs[@]}"
fi
}
install_aur() {
if ((${#aur_pkgs[@]})); then
echo "==> Installiere AUR-Pakete: ${aur_pkgs[*]}"
yay -S --needed "${aur_pkgs[@]}"
fi
}
install_npm() {
if ((${#npm_pkgs[@]})); then
echo "==> Installiere globale npm-Pakete: ${npm_pkgs[*]}"
npm install -g "${npm_pkgs[@]}"
fi
}
# ---------------------------------------------------------------------------
# Post-install configuration.
# ---------------------------------------------------------------------------
set_fish_default_shell() {
if command -v fish >/dev/null 2>&1; then
if [[ "$SHELL" != "/usr/bin/fish" ]]; then
echo "Setze fish als Standard-Shell ..."
chsh -s /usr/bin/fish
else
echo "fish ist bereits die Standard-Shell."
fi
else
echo "Warnung: fish wurde nicht installiert; ueberspringe chsh."
fi
}
install_tmuxifier() {
if [[ -d "$HOME/.tmuxifier" ]]; then
echo "tmuxifier bereits installiert; fahre fort."
else
echo "Klone tmuxifier ..."
git clone https://github.com/jimeh/tmuxifier.git "$HOME/.tmuxifier"
fi
}
add_yazi_git_plugin() {
if command -v yazi >/dev/null 2>&1 && command -v ya >/dev/null 2>&1; then
echo "Fuege yazi git-Plugin hinzu ..."
ya pkg add yazi-rs/plugins:git
fi
}
# ---------------------------------------------------------------------------
# Main
# ---------------------------------------------------------------------------
main() {
echo "==> Aktiviere multilib ..."
enable_multilib
echo "==> System aktualisieren ..."
sudo pacman -Syu
echo "==> Sicherstelle yay ..."
install_yay
echo "==> Lese Paketliste: $PACKAGES_FILE"
read_packages
install_pacman
install_aur
install_npm
set_fish_default_shell
install_tmuxifier
add_yazi_git_plugin
echo "==> Aktualisiere locate-Datenbank ..."
sudo updatedb
echo "Fertig. Starte ein neues Terminal, damit fish und die Umgebung greifen."
}
main