Compare commits

...
3 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
8 changed files with 331 additions and 213 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 |
|------|---------|----------------|
| **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`. |
| **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.
.PHONY: basic
termn:
bash _install_skripte_install_terminal_pcks.sh
term:
bash term/setup.sh
stow term
basic: term
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
-1
View File
@@ -37,4 +37,3 @@ fi
export DATAFLEX_BACKEND_REPO="/c/_Master/202602 DataFleX/repos/flexibility_platform_backend/"
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
+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