Compare commits
13
Commits
101f8c51ef
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d32a30f39e | ||
|
|
4e31a23470 | ||
|
|
7c8d0eff4b | ||
|
|
a9e1b686d0 | ||
|
|
a050d87439 | ||
|
|
694a305855 | ||
|
|
6ceb170b89 | ||
|
|
0db4be6796 | ||
|
|
dbbf5a32fc | ||
|
|
bce43be0d7 | ||
|
|
71e9db5c4c | ||
|
|
a504681e32 | ||
|
|
437eda2852 |
@@ -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 DAW’s plugins folder (usually `~/.vst`). | The repo contains a pre‑built VST for use in audio software. |
|
| **Add VST plugin** | Copy `kreation/.vst3/MT-PowerDrumKit.vst3` into your DAW’s plugins folder (usually `~/.vst`). | The repo contains a pre‑built VST for use in audio software. |
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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.
|
||||||
@@ -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
|
|
||||||
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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,
|
||||||
|
})
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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).
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
Reference in New Issue
Block a user