Compare commits
97
Commits
aaecbd8472
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0d61477072 | ||
|
|
4846325583 | ||
|
|
1d654cf470 | ||
|
|
e9ad0175a1 | ||
|
|
093cd97a96 | ||
|
|
f9a44ac5aa | ||
|
|
7302e87fa3 | ||
|
|
4434feed16 | ||
|
|
94fa42672c | ||
|
|
3c1b727a7e | ||
|
|
c7bf98775b | ||
|
|
590e568061 | ||
|
|
0e7f76200c | ||
|
|
30cab18e60 | ||
|
|
e5dd0039a2 | ||
|
|
00e4931d29 | ||
|
|
e5ce0d0957 | ||
|
|
540baacb15 | ||
|
|
99b0075ada | ||
|
|
049e9a9f5e | ||
|
|
1d2878ad81 | ||
|
|
60db3ba63c | ||
|
|
51b2cdb6a8 | ||
|
|
b8f3861901 | ||
|
|
a2efd03c15 | ||
|
|
ad61c53bfc | ||
|
|
a316ad7221 | ||
|
|
e73f49282c | ||
|
|
3c0fc3ae6b | ||
|
|
dc1a319165 | ||
|
|
1f0bde731e | ||
|
|
6208eea2f8 | ||
|
|
5bc878492e | ||
|
|
73d1297c79 | ||
|
|
10c23c4d24 | ||
|
|
77f70e318c | ||
|
|
8ec820976f | ||
|
|
6924c1e05e | ||
|
|
6cd9427b40 | ||
|
|
050efc2b71 | ||
|
|
8d81e802df | ||
|
|
a0e6ad88d1 | ||
|
|
71cedb7454 | ||
|
|
53b763ee4d | ||
|
|
5438f786a9 | ||
|
|
e80ccf74bb | ||
|
|
4b9b926c60 | ||
|
|
e499e63a49 | ||
|
|
df5abce062 | ||
|
|
aed6d46846 | ||
|
|
30619b00ce | ||
|
|
545485f3c5 | ||
|
|
a8947283a5 | ||
|
|
496920cbdd | ||
|
|
519432d630 | ||
|
|
15d77eeaca | ||
|
|
23d0d1ecd3 | ||
|
|
1d7ed473f6 | ||
|
|
c055c5d592 | ||
|
|
b7e396a1f0 | ||
|
|
4be3a67dfe | ||
|
|
a5eab1dda0 | ||
|
|
4d9b3f99ac | ||
|
|
143f1ad86a | ||
|
|
466c79f1df | ||
|
|
0bf7af3b03 | ||
|
|
90a9390f37 | ||
|
|
c54c7a2b9d | ||
|
|
0ca73bf029 | ||
|
|
edeee7debd | ||
|
|
8f89aefe86 | ||
|
|
4d197d304e | ||
|
|
c5c4ec6527 | ||
|
|
ddaa51fb42 | ||
|
|
cb3fb6db1e | ||
|
|
431b491ed6 | ||
|
|
a083e0d470 | ||
|
|
db4a524e25 | ||
|
|
cc30fb84e1 | ||
|
|
384cd84a6e | ||
|
|
85fc7f0e4a | ||
|
|
66e7c7ef3b | ||
|
|
8c65841361 | ||
|
|
c5eba35273 | ||
|
|
0141396bd9 | ||
|
|
a6b9ddf216 | ||
|
|
d4744a1f2d | ||
|
|
3517bad26c | ||
|
|
cc3ddf7920 | ||
|
|
c80c228239 | ||
|
|
e250a740c6 | ||
|
|
32de2a0751 | ||
|
|
dcc5d7ff2a | ||
|
|
fbf1442dbe | ||
|
|
0e2d4030bd | ||
|
|
055d8a9620 | ||
|
|
84db84b542 |
+11
-1
@@ -1,7 +1,17 @@
|
|||||||
hypr/.config/hypr/env
|
hypr/.config/hypr/env
|
||||||
hypr/.config/hypr/env.conf
|
hypr/.config/hypr/env.conf
|
||||||
hypr/.config/hypr/env.sh
|
hypr/.config/hypr/env.sh
|
||||||
hypr/.config/wpaperd/wallpapers/linked
|
hypr/.config/hypr/monitor_setup.lua
|
||||||
|
# Noctalia template output (shell-owned, regenerated on palette change)
|
||||||
|
# hypr/.config/kitty/themes/noctalia.conf
|
||||||
|
# Caelestia runtime output (shell-owned, regenerated on scheme change)
|
||||||
|
hypr/.config/hypr/scheme/
|
||||||
*~lock.*#
|
*~lock.*#
|
||||||
lazy-lock.json
|
lazy-lock.json
|
||||||
fish_variables
|
fish_variables
|
||||||
|
term/.config/opencode/cli.json
|
||||||
|
term/.config/opencode/service.json
|
||||||
|
hypr/.config/hypr/scheme/current.lua
|
||||||
|
hypr/.config/hypr/env.lua
|
||||||
|
hypr/.config/hypr/hyprland-buntes-monster-gui.lua
|
||||||
|
hypr/.config/hypr/hyprland-gui.lua
|
||||||
|
|||||||
+2
-1
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"diagnostics.globals": [
|
"diagnostics.globals": [
|
||||||
"vim"
|
"vim",
|
||||||
|
"hl"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -8,14 +8,14 @@ Only entries that would be missed without explicit help are included.
|
|||||||
|
|
||||||
- **Dotfiles** for a personal workstation (hyprland + Neovim + VST plugin).
|
- **Dotfiles** for a personal workstation (hyprland + Neovim + VST plugin).
|
||||||
- No CI or build scripts – the repo is purely configuration data; the only executable content is the `install_*` scripts and the `test/` harness.
|
- No CI or build scripts – the repo is purely configuration data; the only executable content is the `install_*` scripts and the `test/` harness.
|
||||||
- **Testing** lives in `test/`. Run `make test-lint` / `make test-stow` (offline, no Docker) or `make test-smoke` (Docker-based, see `test/Dockerfile` and `README.md → Testing`). The harness currently surfaces pre-existing Makefile bugs by design (missing `/` in `install_*` script paths, `stow nvim` with no `nvim/` package).
|
- **Testing** lives in `test/`. `make test` runs the offline lint plus the Docker smoke with the real pacman install (`REAL_SMOKE=1`); `make test-lint` / `make test-stow` are the fast offline subset, and `make test-smoke REAL_SMOKE=0` runs dry probes only (see `test/Dockerfile` and `README.md → Testing`).
|
||||||
|
|
||||||
---
|
---
|
||||||
## 2. System Setup
|
## 2. System Setup
|
||||||
|
|
||||||
| Task | Command | Why it matters |
|
| Task | Command | Why it matters |
|
||||||
|------|---------|----------------|
|
|------|---------|----------------|
|
||||||
| **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. |
|
| **Install required programs** | `bash setup/term/setup.sh` <br>`bash setup/basic/setup.sh` <br>`bash setup/hypr/setup.sh` <br>`bash setup/kreation/setup.sh` | These scripts install Neovim, hyprland, VST runtime, and other utilities. Edit `setup/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. |
|
||||||
|
|
||||||
@@ -26,7 +26,7 @@ Only entries that would be missed without explicit help are included.
|
|||||||
|
|
||||||
| Item | Detail |
|
| Item | Detail |
|
||||||
|------|--------|
|
|------|--------|
|
||||||
| **Wayland compositor** | Requires `hyprland` (and dependencies like `wlroots`). The script `install_hypr_pcks.sh` installs it. |
|
| **Wayland compositor** | Requires `hyprland` (and dependencies like `wlroots`). The script `setup/hypr/setup.sh` installs it from `setup/hypr/packages.txt`. |
|
||||||
| **MIME defaults** | Run `bash hypr/.config/hypr/scripts/ensure-env.sh` after installing to set environment variables (`$XDG_DATA_HOME`, etc.). |
|
| **MIME defaults** | Run `bash hypr/.config/hypr/scripts/ensure-env.sh` after installing to set environment variables (`$XDG_DATA_HOME`, etc.). |
|
||||||
| **Dolphin file associations** | `bash hypr/.config/hypr/scripts/fix_dolphin_file_associations.sh` must be executed once to register the compositor with KDE. |
|
| **Dolphin file associations** | `bash hypr/.config/hypr/scripts/fix_dolphin_file_associations.sh` must be executed once to register the compositor with KDE. |
|
||||||
| **Portal host override** | `bash hypr/.config/hypr/scripts/portal-host-override.sh` fixes Wayland portal issues on some distros. |
|
| **Portal host override** | `bash hypr/.config/hypr/scripts/portal-host-override.sh` fixes Wayland portal issues on some distros. |
|
||||||
|
|||||||
@@ -1,31 +1,39 @@
|
|||||||
# setup ist ein Kommando-Target (keine Datei) und soll immer ausgeführt werden.
|
# Alle Targets sind Kommando-Targets (keine Dateien) und werden immer ausgeführt.
|
||||||
.PHONY: basic
|
.PHONY: basic term utils hypr kreation buntes-monster
|
||||||
|
|
||||||
term:
|
# basic wird immer zuerst eingerichtet: es legt die Basis-Systemumgebung an
|
||||||
bash term/setup.sh
|
# (multilib, yay, Display-Manager, Audio-Stack, Docker), von der alle anderen
|
||||||
|
# Zweige abhaengen. Die uebrigen Ziele haengen nur von basic ab und sind
|
||||||
|
# untereinander unabhaengig.
|
||||||
|
basic:
|
||||||
|
bash setup/basic/setup.sh
|
||||||
|
stow basic
|
||||||
|
|
||||||
|
term: basic
|
||||||
|
bash setup/term/setup.sh
|
||||||
stow term
|
stow term
|
||||||
basic: term
|
|
||||||
bash _install_skripte_install_basic_pcks.sh
|
utils: term
|
||||||
stow nvim
|
bash setup/utils/setup.sh
|
||||||
bash _install_skripte/nextcloud.sh
|
|
||||||
hypr: basic
|
hypr: utils
|
||||||
bash _install_skripte_install_hypr_pcks.sh
|
bash setup/hypr/setup.sh
|
||||||
stow hypr
|
stow hypr
|
||||||
bash hypr/.config/hypr/scripts/ensure-env.sh
|
|
||||||
bash hypr/.config/hypr/scripts/portal-host-override.sh
|
kreation: hypr
|
||||||
bash hypr/.config/hypr/scripts/fix_dolphin_file_associations.sh
|
bash setup/kreation/setup.sh
|
||||||
kreation: basic
|
|
||||||
bash _install_skripte_install_kreation_pcks.sh
|
|
||||||
stow kreation
|
stow kreation
|
||||||
bunters-monster: basic hypr kreation
|
|
||||||
_install_skripte/buntes-monster-links.sh
|
buntes-monster: kreation
|
||||||
|
bash setup/buntes-monster-links.sh
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Testing (see README.md "Testing" and test/ for details)
|
# Testing (see README.md "Testing" and test/ for details)
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
.PHONY: test test-lint test-smoke test-stow test-shellcheck test-lint-docker
|
.PHONY: test test-lint test-smoke test-stow test-shellcheck test-lint-docker
|
||||||
|
|
||||||
# Full test suite: fast offline lint first, then the optional Docker smoke.
|
# Full test suite: offline lint first, then the Docker smoke (which by
|
||||||
|
# default runs the real install + verification; see test-smoke below).
|
||||||
test: test-lint test-smoke
|
test: test-lint test-smoke
|
||||||
|
|
||||||
# Fast, offline integrity checks. No Docker required.
|
# Fast, offline integrity checks. No Docker required.
|
||||||
@@ -48,14 +56,20 @@ test-lint-docker:
|
|||||||
docker run --rm dotfiles-lint
|
docker run --rm dotfiles-lint
|
||||||
|
|
||||||
# Docker smoke test: builds the Arch container and runs the dry probes.
|
# Docker smoke test: builds the Arch container and runs the dry probes.
|
||||||
# RUN_SMOKE=1 also installs the real pacman packages inside the container.
|
# By default (REAL_SMOKE=1) it also installs the real term pacman + npm
|
||||||
# RUN_SMOKE=1 RUN_FULL=1 additionally attempts AUR/npm + hypr/kreation.
|
# packages inside the container (AUR stays opt-in) and verifies them, so a
|
||||||
# SKIP_NET=1 skips anything that contacts the network.
|
# plain `make test` actually exercises the install path. Set REAL_SMOKE=0
|
||||||
# Example: make test-smoke RUN_SMOKE=1
|
# (or RUN_SMOKE=0) for the fast dry-probe run. RUN_FULL=1 additionally
|
||||||
|
# attempts AUR + hypr/kreation/buntes-monster. SKIP_NET=1 skips anything
|
||||||
|
# that contacts the network.
|
||||||
|
# Example: make test-smoke # real term pacman+npm install + verify
|
||||||
|
# make test-smoke REAL_SMOKE=0 # dry probes only
|
||||||
|
# make test-smoke RUN_FULL=1 # full AUR + hypr/kreation
|
||||||
|
REAL_SMOKE ?= 1
|
||||||
test-smoke:
|
test-smoke:
|
||||||
docker build --target test -t dotfiles-test -f test/Dockerfile .
|
docker build --target test -t dotfiles-test -f test/Dockerfile .
|
||||||
docker run --rm \
|
docker run --rm \
|
||||||
-e RUN_SMOKE="$${RUN_SMOKE:-0}" \
|
-e RUN_SMOKE="$${RUN_SMOKE:-$(REAL_SMOKE)}" \
|
||||||
-e RUN_FULL="$${RUN_FULL:-0}" \
|
-e RUN_FULL="$${RUN_FULL:-0}" \
|
||||||
-e SKIP_NET=$${SKIP_NET:-0} \
|
-e SKIP_NET=$${SKIP_NET:-0} \
|
||||||
-v "$$PWD":/dotfiles \
|
-v "$$PWD":/dotfiles \
|
||||||
|
|||||||
@@ -6,11 +6,12 @@ Personal configuration files for an Arch Linux workstation (Hyprland + Neovim +
|
|||||||
|
|
||||||
| Directory | Contents |
|
| Directory | Contents |
|
||||||
|-----------|----------|
|
|-----------|----------|
|
||||||
|
| `basic/` | Base system packages + the **central theme** (`basic/.config/themes` → `~/.config/themes`: Catppuccin Mocha palette, `current` symlink, `switch-theme.sh`/`sync-theme.sh`). All other packages reference it instead of copying colors. |
|
||||||
| `term/` | Fish + kitty + starship + nvim + tmux + yazi + fastfetch + opencode terminal environment |
|
| `term/` | Fish + kitty + starship + nvim + tmux + yazi + fastfetch + opencode terminal environment |
|
||||||
| `hypr/` | Hyprland compositor config, kitty theme, wpaperd wallpapers |
|
| `hypr/` | Hyprland compositor config + selectable Noctalia/Caelestia shell configs |
|
||||||
| `kreation/`| VST plugin (`MT-PowerDrumKit.vst3`) |
|
| `kreation/`| VST plugin (`MT-PowerDrumKit.vst3`) |
|
||||||
| `local_ai/`| Local AI / MCP tooling config |
|
| `local_ai/`| Local AI / MCP tooling config |
|
||||||
| `_install_skripte/` | Miscellaneous install helper scripts |
|
| `setup/` | Install/setup scripts + package lists (one subdir per target, shared helpers in `setup/lib/`; not stowed) |
|
||||||
| `test/` | Docker test harness (lint + smoke tests) |
|
| `test/` | Docker test harness (lint + smoke tests) |
|
||||||
|
|
||||||
Each top-level directory is a **stow package**. `stow` symlinks the files from the repository into your home directory (e.g. `term/.config/...` → `~/.config/...`).
|
Each top-level directory is a **stow package**. `stow` symlinks the files from the repository into your home directory (e.g. `term/.config/...` → `~/.config/...`).
|
||||||
@@ -30,7 +31,7 @@ cd ~/.dotfiles
|
|||||||
|
|
||||||
# 2. Install a target and symlink its files
|
# 2. Install a target and symlink its files
|
||||||
make term # terminal + fish + kitty + nvim
|
make term # terminal + fish + kitty + nvim
|
||||||
make hypr # Hyprland (also pulls in basic + term)
|
make hypr # Hyprland + selectable Noctalia/Caelestia shells
|
||||||
make kreation # VST plugin (also pulls in basic)
|
make kreation # VST plugin (also pulls in basic)
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -42,33 +43,48 @@ Run `make <target>` from the repository root. Each target first runs the relevan
|
|||||||
|
|
||||||
| Target | What it does |
|
| Target | What it does |
|
||||||
|--------|--------------|
|
|--------|--------------|
|
||||||
| `make term` | Runs `term/setup.sh` (installs terminal packages, sets fish as default shell, clones tmuxifier), then `stow term` |
|
| `make term` | Runs `setup/term/setup.sh` (installs terminal packages, sets fish as default shell, clones tmuxifier), then `stow term`. Pulls in `basic`. |
|
||||||
| `make basic` | Runs `install_basic_pcks.sh`, stows `nvim`, runs `nextcloud.sh` |
|
| `make basic` | Runs `setup/basic/setup.sh`: enables multilib, updates the system, installs `yay` if missing, installs the `setup/basic/packages.txt` packages, and sets up Docker (enables/starts the service, adds your user to the `docker` group, verifies the service) |
|
||||||
| `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 hypr` | Runs `make basic`, installs Hyprland plus the Noctalia and Caelestia frontends, creates a local shell selection when needed, stows `hypr`, and runs the portal/file-association integration scripts |
|
||||||
| `make kreation` | `make basic`, installs VST runtime, stows `kreation` |
|
| `make kreation` | `make basic`, installs VST runtime, stows `kreation` |
|
||||||
| `make buntes-monster` | Everything (`basic` + `hypr` + `kreation`), then wires up symlinks |
|
| `make buntes-monster` | Everything (`basic` + `hypr` + `kreation`), then wires up symlinks |
|
||||||
|
|
||||||
|
### Choosing between Noctalia and Caelestia
|
||||||
|
|
||||||
|
`make hypr` installs both desktop-shell frontends. Hyprland starts the one selected in `~/.config/hypr/env.lua`:
|
||||||
|
|
||||||
|
```lua
|
||||||
|
return {
|
||||||
|
shell = "noctalia", -- or "caelestia"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The local `env.lua` is created from `env.example.lua` on the first setup and is preserved on later runs. After changing the value, log out of and back into Hyprland; the running shell is not replaced live.
|
||||||
|
|
||||||
|
Caelestia requires the upstream AUR package `quickshell-git`; the release package `quickshell` must not be installed instead. Do not substitute CachyOS's `noctalia-qs`, even though it provides the virtual `quickshell-git` dependency: its Quickshell parser is not compatible with Caelestia. The package list uses the explicit `aur/quickshell-git` target because `yay --aur` alone may still select a repository provider. `make hypr` then replaces an existing `noctalia-qs` installation transactionally and verifies that `/usr/bin/qs` belongs to `quickshell-git`.
|
||||||
|
|
||||||
### Managing terminal packages
|
### Managing terminal packages
|
||||||
|
|
||||||
The terminal package list lives in a single editable file:
|
The terminal package list lives in a single editable file:
|
||||||
|
|
||||||
```
|
```
|
||||||
term/packages.txt
|
setup/term/packages.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
Add/remove packages on separate lines. Lines starting with `#` are ignored, and you can switch between package sources with section markers:
|
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)
|
@pacman # install via pacman (default)
|
||||||
@aur # install via yay (AUR)
|
@aur # use yay's AUR mode; use aur/<pkg> for an explicit source
|
||||||
@npm # install via npm -g
|
@npm # install via npm -g
|
||||||
```
|
```
|
||||||
|
|
||||||
The default section is `@pacman`. Any AUR dependency (`yay`) is bootstrapped automatically by `term/setup.sh`.
|
The default section is `@pacman`. The AUR helper `yay` is bootstrapped automatically by `setup/basic/setup.sh`.
|
||||||
|
|
||||||
## What the install scripts do
|
## 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.
|
- **`setup/basic/setup.sh`** – enables multilib, updates the system (`pacman -Syu`), ensures `yay` is installed, reads `setup/basic/packages.txt` and installs all packages with `--needed` (skips already-installed ones), and sets up Docker (`sudo systemctl enable --now docker`, adds the current user to the `docker` group, checks the service). Idempotent and safe to re-run.
|
||||||
|
- **`setup/term/setup.sh`** – reads `setup/term/packages.txt` and installs all packages (pacman/AUR via `yay --needed`, npm via `sudo npm install -g`), sets `fish` as the default shell (`chsh`), clones `tmuxifier`, adds the `git` yazi plugin (skips if already present), and runs `sudo updatedb`. Idempotent and safe to re-run.
|
||||||
|
|
||||||
## Stow: resolving conflicts with existing paths
|
## Stow: resolving conflicts with existing paths
|
||||||
|
|
||||||
@@ -136,19 +152,19 @@ There are **two tiers**:
|
|||||||
|
|
||||||
| Target | What it does | Docker required? |
|
| Target | What it does | Docker required? |
|
||||||
|--------|--------------|------------------|
|
|--------|--------------|------------------|
|
||||||
| `make test-lint` | Fast, offline integrity checks: `bash -n` syntax pass over every script, `shellcheck` (if installed), `packages.txt` marker validation, and Makefile ↔ script/stow-package name consistency. Catches typos like `_install_skripte_install_basic_pcks.sh` (missing `/`). | No |
|
| `make test-lint` | Fast, offline integrity checks: `bash -n` syntax pass over every script, `shellcheck` (if installed), `packages.txt` marker validation, and Makefile ↔ script/stow-package name consistency. Catches typos like `setup/basic/setuo.sh` (missing `/`). | No |
|
||||||
| `make test-stow` | `stow --simulate` for every stow-able package; fails if a package the Makefile stows doesn't exist (e.g. `stow nvim` — nvim lives under `term/`). | No |
|
| `make test-stow` | `stow --simulate` for every stow-able package; fails if a package the Makefile stows doesn't exist (e.g. `stow nvim` — nvim lives under `term/`). | No |
|
||||||
| `make test-shellcheck` | Runs shellcheck over all tracked scripts (shellcheck must be installed). | No |
|
| `make test-shellcheck` | Runs shellcheck over all tracked scripts (shellcheck must be installed). | No |
|
||||||
| `make test-lint-docker` | Builds the `/dev` stage (`archlinux:latest` + shellcheck) and runs `test/lint.sh` inside it. | Yes |
|
| `make test-lint-docker` | Builds the `/dev` stage (`archlinux:latest` + shellcheck) and runs `test/lint.sh` inside it. | Yes |
|
||||||
| `make test-smoke` | Builds the `/test` stage and runs the container's dry probes: `make -n` over every target, `stow --simulate` over every Makefile-stowed package, plus `test/lint.sh`. A network-enabled `RUN_SMOKE=1` variant installs the real pacman packages. | Yes |
|
| `make test-smoke` | Builds the `/test` stage, runs the container's dry probes (`make -n` over every target, `stow --simulate` over every Makefile-stowed package, `test/lint.sh`), **and by default installs the real term pacman + npm packages** (`REAL_SMOKE=1`) then verifies them. Every `@pacman` entry is also pre-resolved against the repo DB, and the install is re-run to prove idempotency. | Yes |
|
||||||
| `make test` | `test-lint` + `test-smoke`. | Partially |
|
| `make test` | `test-lint` + `test-smoke` (the real install runs). | Partially |
|
||||||
|
|
||||||
### Docker smoke details
|
### Docker smoke details
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
make test-smoke # dry probes only (fast, no installs)
|
make test-smoke # real pacman + npm install of the term packages + verify
|
||||||
make test-smoke RUN_SMOKE=1 # + real pacman installs of the term packages
|
make test-smoke REAL_SMOKE=0 # dry probes only (fast, no installs)
|
||||||
make test-smoke RUN_SMOKE=1 RUN_FULL=1 # + AUR/npm + hypr/kreation/buntes-monster
|
make test-smoke RUN_SMOKE=1 RUN_FULL=1 # + AUR + hypr/kreation/buntes-monster
|
||||||
make test-smoke SKIP_NET=1 # skip anything that contacts the network
|
make test-smoke SKIP_NET=1 # skip anything that contacts the network
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -159,24 +175,19 @@ The container:
|
|||||||
scripts don't hang on a password prompt,
|
scripts don't hang on a password prompt,
|
||||||
- mounts the live repo at `/dotfiles` (`-v "$PWD":/dotfiles`), so the tests
|
- mounts the live repo at `/dotfiles` (`-v "$PWD":/dotfiles`), so the tests
|
||||||
always run against your current checkout,
|
always run against your current checkout,
|
||||||
- stubs host daemon commands (`systemctl`, `updatedb`, `kbuildsycoca6`,
|
- stubs host-dependent commands as no-ops so nothing talks to a real systemd/dbus
|
||||||
`dbus-update-activation-environment`) as no-ops so nothing talks to a real
|
inside the container (`systemctl`, `updatedb`, `kbuildsycoca6`,
|
||||||
systemd/dbus inside the container.
|
`dbus-update-activation-environment`, `chsh`), and routes `yay` through
|
||||||
|
`pacman` for the AUR-free smoke.
|
||||||
|
|
||||||
In the `RUN_SMOKE=1` install path, the harness additionally **verifies the
|
In the `REAL_SMOKE=1` (default) install path, the harness additionally
|
||||||
installed packages** (`test/verify_packages.sh`):
|
**verifies the installed packages** (`test/verify_packages.sh`):
|
||||||
- every `@pacman` entry is confirmed via `pacman -Q <pkg>` (covers fonts,
|
- every `@pacman` entry is confirmed via `pacman -Q <pkg>` (covers fonts,
|
||||||
libs and python modules that ship no binary),
|
libs and python modules that ship no binary),
|
||||||
- a curated mapping probes each package's binary with a real
|
- a curated mapping probes each package's binary with a real
|
||||||
`--version`-style call (e.g. `fish --version`, `nvim --version`,
|
`--version`-style call (e.g. `fish --version`, `nvim --version`,
|
||||||
`ssh -V`), failing if the binary is missing or does not report a version.
|
`ssh -V`), failing if the binary is missing or does not report a version.
|
||||||
|
|
||||||
> **Note for the current repo state:** `make test-lint` and `make test-smoke`
|
|
||||||
> currently **fail** because the harness surfaces pre-existing Makefile bugs
|
|
||||||
> (missing `/` in the `install_*` script paths and `stow nvim` for a
|
|
||||||
> non-existent `nvim/` package). That is the intended behaviour — fix the
|
|
||||||
> Makefile and the tests should go green.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**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.
|
**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,41 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
sudo pacman -S --needed \
|
|
||||||
firefox \
|
|
||||||
nextcloud-client \
|
|
||||||
cups \
|
|
||||||
wine \
|
|
||||||
wine-mono \
|
|
||||||
wine-gecko \
|
|
||||||
winetricks \
|
|
||||||
thunderbird \
|
|
||||||
ktouch \
|
|
||||||
ktorrent \
|
|
||||||
pipewire \
|
|
||||||
pipewire-session-manager \
|
|
||||||
qpwgraph \
|
|
||||||
cifs-utils \
|
|
||||||
rbw \
|
|
||||||
sddm
|
|
||||||
|
|
||||||
yay -S \
|
|
||||||
catppuccin-sddm-theme-mocha
|
|
||||||
|
|
||||||
echo "
|
|
||||||
[General]
|
|
||||||
Numlock=on
|
|
||||||
|
|
||||||
[Theme]
|
|
||||||
ThemeDir=/usr/share/sddm/themes # Standardverzeichnis für Designvorlagen
|
|
||||||
Current=catppuccin-mocha-blue # Standardthema
|
|
||||||
CursorTheme=breeze_cursors # Mausthema
|
|
||||||
FacesDir=/usr/share/sddm/faces # Verzeichnis für Avatarbilder
|
|
||||||
|
|
||||||
[Users]
|
|
||||||
MaximumUID=1100
|
|
||||||
HideUsers=mathieu
|
|
||||||
" | sudo tee /etc/sddm.conf
|
|
||||||
|
|
||||||
sudo systemctl disable gdm
|
|
||||||
sudo systemctl enable sddm
|
|
||||||
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
sudo pacman -S --needed \
|
|
||||||
hyprland \
|
|
||||||
hyprlauncher \
|
|
||||||
xdg-desktop-portal-hyprland \
|
|
||||||
hyprpolkitagent \
|
|
||||||
pantheon-shortcut-overlay \
|
|
||||||
waybar \
|
|
||||||
hyprpaper \
|
|
||||||
wpaperd \
|
|
||||||
wev \
|
|
||||||
hyprlock \
|
|
||||||
hypridle \
|
|
||||||
nwg-drawer \
|
|
||||||
wl-clipboard \
|
|
||||||
swaync \
|
|
||||||
hyprshot \
|
|
||||||
rofi
|
|
||||||
|
|
||||||
yay -S --needed \
|
|
||||||
hyprshutdown \
|
|
||||||
hyprtile
|
|
||||||
|
|
||||||
# Install hyprltm (network manager)
|
|
||||||
curl -s https://raw.githubusercontent.com/hyprltm/hyprltm-net/main/setup.sh | bash
|
|
||||||
echo 'fish_add_path -m $HOME/.local/bin' >> ~/.config/fish/config.fish
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
sudo pacman -S --needed \
|
|
||||||
reaper \
|
|
||||||
guitarix \
|
|
||||||
kdenlive \
|
|
||||||
yabridge \
|
|
||||||
yabridgectl \
|
|
||||||
obs-studio \
|
|
||||||
surge-xt \
|
|
||||||
lsp-plugins \
|
|
||||||
calf \
|
|
||||||
dragonfly-reverb
|
|
||||||
|
|
||||||
yay -S --needed \
|
|
||||||
numaplayer
|
|
||||||
Symlink
+1
@@ -0,0 +1 @@
|
|||||||
|
themes/catppuccin-mocha
|
||||||
Executable
+26
@@ -0,0 +1,26 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Scaffold a new theme directory (basic/.config/themes/scripts/new-theme.sh).
|
||||||
|
#
|
||||||
|
# Usage: new-theme.sh <theme-id> e.g. new-theme.sh rose-pine-moon
|
||||||
|
#
|
||||||
|
# Copies themes/catppuccin-mocha as a template. Afterwards:
|
||||||
|
# 1. Replace every palette value in the new directory.
|
||||||
|
# 2. Add one row to themes/registry.conf.
|
||||||
|
# 3. Run scripts/switch-theme.sh <theme-id> to try it.
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../../.." && pwd)"
|
||||||
|
THEMES_DIR="$REPO_ROOT/basic/.config/themes/themes"
|
||||||
|
|
||||||
|
[[ $# -eq 1 ]] || { echo "usage: $(basename "$0") <theme-id>" >&2; exit 1; }
|
||||||
|
theme_id="$1"
|
||||||
|
if [[ ! "$theme_id" =~ ^[a-z0-9][a-z0-9-]*$ ]]; then
|
||||||
|
echo "error: invalid theme-id '$theme_id'" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
[[ -e "$THEMES_DIR/$theme_id" ]] && { echo "error: $theme_id already exists" >&2; exit 1; }
|
||||||
|
|
||||||
|
cp -r "$THEMES_DIR/catppuccin-mocha" "$THEMES_DIR/$theme_id"
|
||||||
|
echo "scaffolded $THEMES_DIR/$theme_id"
|
||||||
|
echo "next: replace the palette values, add a registry.conf row, run switch-theme.sh $theme_id"
|
||||||
Executable
+59
@@ -0,0 +1,59 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Central theme switcher (basic/.config/themes/scripts/switch-theme.sh).
|
||||||
|
#
|
||||||
|
# Usage: switch-theme.sh <theme-id> e.g. switch-theme.sh catppuccin-mocha
|
||||||
|
#
|
||||||
|
# Retargets the tracked `current` symlink to themes/<theme-id> and reloads
|
||||||
|
# every consumer that can be reloaded. Because `current` lives in the repo,
|
||||||
|
# the switch is a reviewable git change; re-stowing is not required since
|
||||||
|
# all consumers resolve through ~/.config/themes/current at runtime.
|
||||||
|
#
|
||||||
|
# A future non-Catppuccin theme only needs its own themes/<theme-id>/
|
||||||
|
# directory plus a row in themes/registry.conf — this script stays untouched.
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
echo "usage: $(basename "$0") <theme-id>" >&2
|
||||||
|
echo "available:" >&2
|
||||||
|
ls -1 "$(repo_root)/basic/.config/themes/themes" 2>/dev/null | grep -v '^registry.conf$' | sed 's/^/ /' >&2 || true
|
||||||
|
}
|
||||||
|
|
||||||
|
repo_root() {
|
||||||
|
local src="$0"
|
||||||
|
if command -v readlink >/dev/null 2>&1; then
|
||||||
|
src="$(readlink -f "$0")"
|
||||||
|
fi
|
||||||
|
cd "$(dirname "$src")/../../../.." && pwd
|
||||||
|
}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
[[ $# -eq 1 ]] || { usage; exit 1; }
|
||||||
|
local theme_id="$1"
|
||||||
|
if [[ ! "$theme_id" =~ ^[a-z0-9][a-z0-9-]*$ ]]; then
|
||||||
|
echo "error: invalid theme-id '$theme_id'" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
local root
|
||||||
|
root="$(repo_root)"
|
||||||
|
local dest="$root/basic/.config/themes/themes/$theme_id"
|
||||||
|
local link="$root/basic/.config/themes/current"
|
||||||
|
|
||||||
|
[[ -d "$dest" ]] || { echo "error: unknown theme '$theme_id' (no $dest)" >&2; usage; exit 1; }
|
||||||
|
|
||||||
|
ln -sfn "themes/$theme_id" "$link"
|
||||||
|
echo "theme switched: current -> themes/$theme_id"
|
||||||
|
|
||||||
|
# Best-effort live reloads; every step is guarded so the switch
|
||||||
|
# succeeds even on machines without a running compositor.
|
||||||
|
if command -v hyprctl >/dev/null 2>&1; then
|
||||||
|
hyprctl reload >/dev/null 2>&1 || true
|
||||||
|
fi
|
||||||
|
if command -v tmux >/dev/null 2>&1 && [[ -n "${TMUX:-}" ]]; then
|
||||||
|
tmux source-file "$HOME/.config/tmux/tmux.conf" >/dev/null 2>&1 || true
|
||||||
|
fi
|
||||||
|
echo "note: restart Neovim (or :colorscheme \$THEME_NVIM_COLORSCHEME) and open a new shell to pick up theme.env.sh."
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
||||||
Executable
+83
@@ -0,0 +1,83 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Central theme drift guard (basic/.config/themes/scripts/sync-theme.sh).
|
||||||
|
#
|
||||||
|
# Fails if hardcoded theme hex values appear anywhere in the repo outside:
|
||||||
|
# - basic/.config/themes (the single source of truth)
|
||||||
|
# - term/.config/tmux/plugins/ (vendored upstream, stow-ignored)
|
||||||
|
# - term/.config/yazi/theme.toml (declared mirror: yazi has no include)
|
||||||
|
# - term/.config/starship.toml (declared mirror: starship has no include)
|
||||||
|
# - hypr/.config/hypr/noctalia.lua + hypr/.config/kitty/themes/noctalia.conf
|
||||||
|
# (Noctalia template output: shell-owned, gitignored, regenerated from
|
||||||
|
# the active palette on every theme change)
|
||||||
|
# - test/ + docs (may quote values in prose)
|
||||||
|
#
|
||||||
|
# Run with: bash basic/.config/themes/scripts/sync-theme.sh
|
||||||
|
# test/lint.sh invokes it as part of `make test-lint`.
|
||||||
|
|
||||||
|
set -uo pipefail
|
||||||
|
|
||||||
|
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../../.." && pwd)"
|
||||||
|
cd "$REPO_ROOT" || exit 1
|
||||||
|
|
||||||
|
# Sentinel hex values of the active palette (case-insensitive).
|
||||||
|
SENTINELS='74c7ec|1e1e2e|cdd6f4|45475a|b4befe|f38ba8|a6e3a1|f9e2af|181825|11111b|89b4fa|f5e0dc'
|
||||||
|
|
||||||
|
matches="$(grep -rniE --include='*.conf' --include='*.css' --include='*.rasi' \
|
||||||
|
--include='*.lua' --include='*.toml' --include='*.fish' --include='*.sh' \
|
||||||
|
--exclude-dir='.git' --exclude-dir='plugins' --exclude-dir='test' \
|
||||||
|
-E "$SENTINELS" . 2>/dev/null | grep -vE '^./basic/.config/themes' \
|
||||||
|
| grep -vE 'term/.config/(yazi/theme.toml|starship.toml)' \
|
||||||
|
| grep -vE 'hypr/.config/(hypr/noctalia.lua|kitty/themes/noctalia.conf)' || true)"
|
||||||
|
|
||||||
|
if [[ -n "$matches" ]]; then
|
||||||
|
echo "FAIL: hardcoded theme colors outside basic/.config/themes (and declared mirrors):"
|
||||||
|
printf '%s\n' "$matches" | sed 's/^/ /'
|
||||||
|
echo "Move the values into basic/.config/themes and reference them instead."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "ok: no hardcoded theme colors outside the central theme"
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Role/palette consistency: every role in theme.css must equal its palette
|
||||||
|
# twin (roles are literal hex because some parsers drop @-references).
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
python3 - <<'EOF'
|
||||||
|
import re, sys
|
||||||
|
|
||||||
|
css_path = "basic/.config/themes/themes/catppuccin-mocha/theme.css"
|
||||||
|
defines = dict(re.findall(r"@define-color\s+([a-z0-9_]+)\s+(#[0-9a-fA-F]+)", open(css_path).read()))
|
||||||
|
|
||||||
|
# role -> palette twin (bg_translucent intentionally excluded: crust + alpha).
|
||||||
|
pairs = {
|
||||||
|
"bg": "base", "bg_dim": "mantle", "bg_deep": "crust",
|
||||||
|
"fg": "text", "fg_dim": "subtext0", "fg_muted": "overlay1",
|
||||||
|
"surface": "surface0", "border": "surface1",
|
||||||
|
"accent": "sapphire", "accent2": "lavender",
|
||||||
|
"ok": "green", "warn": "yellow", "urgent": "red",
|
||||||
|
}
|
||||||
|
|
||||||
|
missing = [k for k in list(pairs) + list(pairs.values()) if k not in defines]
|
||||||
|
if missing:
|
||||||
|
print(f"FAIL: theme.css missing defines: {sorted(missing)}")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
bad = [r for r, p in pairs.items() if defines[r].lower() != defines[p].lower()]
|
||||||
|
if bad:
|
||||||
|
print(f"FAIL: roles out of sync with palette in {css_path}: {bad}")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
trans = defines.get("bg_translucent_raw", "")
|
||||||
|
m = re.fullmatch(r"rgba\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*([0-9.]+)\s*\)", trans)
|
||||||
|
if not m:
|
||||||
|
# defines[] regex only captures #hex; re-read raw value (may be rgba()).
|
||||||
|
raw = re.search(r"@define-color\s+bg_translucent\s+([^;]+);", open(css_path).read())
|
||||||
|
trans = raw.group(1).strip() if raw else ""
|
||||||
|
m = re.fullmatch(r"rgba\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*([0-9.]+)\s*\)", trans)
|
||||||
|
crust_rgb = tuple(int(defines["crust"][i:i+2], 16) for i in (1, 3, 5))
|
||||||
|
if not m or tuple(map(int, m.groups()[:3])) != crust_rgb or not (0 < float(m.group(4)) < 1):
|
||||||
|
print(f"FAIL: bg_translucent must be rgba(crust, alpha<1) in {css_path}")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
print("ok: theme.css roles match palette")
|
||||||
|
EOF
|
||||||
+5
@@ -1,3 +1,8 @@
|
|||||||
|
# Central theme: catppuccin-mocha (Catppuccin Mocha), hyprland $vars.
|
||||||
|
# Part of basic/.config/themes. Managed file: refresh via
|
||||||
|
# setup/fetch-ports.sh
|
||||||
|
# (upstream: catppuccin/hyprland generated mocha.conf).
|
||||||
|
# Hyprland consumers load it via: source = ~/.config/themes/current/hypr.conf
|
||||||
|
|
||||||
$rosewater = rgb(f5e0dc)
|
$rosewater = rgb(f5e0dc)
|
||||||
$rosewaterAlpha = f5e0dc
|
$rosewaterAlpha = f5e0dc
|
||||||
@@ -0,0 +1,88 @@
|
|||||||
|
# Central theme: catppuccin-mocha (Catppuccin Mocha), kitty colors.
|
||||||
|
# Part of basic/.config/themes. Managed file: refresh via
|
||||||
|
# setup/fetch-ports.sh
|
||||||
|
# (upstream: catppuccin/kitty themes/mocha.conf).
|
||||||
|
# vim:ft=kitty
|
||||||
|
|
||||||
|
## name: Catppuccin Kitty Mocha
|
||||||
|
## author: Catppuccin Org
|
||||||
|
## license: MIT
|
||||||
|
## upstream: https://github.com/catppuccin/kitty/blob/main/themes/mocha.conf
|
||||||
|
## blurb: Soothing pastel theme for the high-spirited!
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# The basic colors
|
||||||
|
foreground #cdd6f4
|
||||||
|
background #1e1e2e
|
||||||
|
selection_foreground #1e1e2e
|
||||||
|
selection_background #f5e0dc
|
||||||
|
|
||||||
|
# Cursor colors
|
||||||
|
cursor #f5e0dc
|
||||||
|
cursor_text_color #1e1e2e
|
||||||
|
|
||||||
|
# Scrollbar colors
|
||||||
|
scrollbar_handle_color #9399b2
|
||||||
|
scrollbar_track_color #45475a
|
||||||
|
|
||||||
|
# URL color when hovering with mouse
|
||||||
|
url_color #f5e0dc
|
||||||
|
|
||||||
|
# Kitty window border colors
|
||||||
|
active_border_color #b4befe
|
||||||
|
inactive_border_color #6c7086
|
||||||
|
bell_border_color #f9e2af
|
||||||
|
|
||||||
|
# OS Window titlebar colors
|
||||||
|
wayland_titlebar_color system
|
||||||
|
macos_titlebar_color system
|
||||||
|
|
||||||
|
# Tab bar colors
|
||||||
|
active_tab_foreground #11111b
|
||||||
|
active_tab_background #cba6f7
|
||||||
|
inactive_tab_foreground #cdd6f4
|
||||||
|
inactive_tab_background #181825
|
||||||
|
tab_bar_background #11111b
|
||||||
|
|
||||||
|
# Colors for marks (marked text in the terminal)
|
||||||
|
mark1_foreground #1e1e2e
|
||||||
|
mark1_background #b4befe
|
||||||
|
mark2_foreground #1e1e2e
|
||||||
|
mark2_background #cba6f7
|
||||||
|
mark3_foreground #1e1e2e
|
||||||
|
mark3_background #74c7ec
|
||||||
|
|
||||||
|
# The 16 terminal colors
|
||||||
|
|
||||||
|
# black
|
||||||
|
color0 #45475a
|
||||||
|
color8 #585b70
|
||||||
|
|
||||||
|
# red
|
||||||
|
color1 #f38ba8
|
||||||
|
color9 #f38ba8
|
||||||
|
|
||||||
|
# green
|
||||||
|
color2 #a6e3a1
|
||||||
|
color10 #a6e3a1
|
||||||
|
|
||||||
|
# yellow
|
||||||
|
color3 #f9e2af
|
||||||
|
color11 #f9e2af
|
||||||
|
|
||||||
|
# blue
|
||||||
|
color4 #89b4fa
|
||||||
|
color12 #89b4fa
|
||||||
|
|
||||||
|
# magenta
|
||||||
|
color5 #f5c2e7
|
||||||
|
color13 #f5c2e7
|
||||||
|
|
||||||
|
# cyan
|
||||||
|
color6 #94e2d5
|
||||||
|
color14 #94e2d5
|
||||||
|
|
||||||
|
# white
|
||||||
|
color7 #bac2de
|
||||||
|
color15 #a6adc8
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
/* Central theme: catppuccin-mocha (Catppuccin Mocha).
|
||||||
|
* Part of basic/.config/themes. Managed file: edit the palette here.
|
||||||
|
* (theme.css was originally ported from catppuccin/waybar themes/mocha.css;
|
||||||
|
* the waybar port is gone, so this file is hand-maintained now.)
|
||||||
|
* Consumers must use this file via
|
||||||
|
* ~/.config/themes/current/theme.css, never a private copy.
|
||||||
|
* Role aliases (stable interface, theme-agnostic) follow the palette. */
|
||||||
|
@define-color rosewater #f5e0dc;
|
||||||
|
@define-color flamingo #f2cdcd;
|
||||||
|
@define-color pink #f5c2e7;
|
||||||
|
@define-color mauve #cba6f7;
|
||||||
|
@define-color red #f38ba8;
|
||||||
|
@define-color maroon #eba0ac;
|
||||||
|
@define-color peach #fab387;
|
||||||
|
@define-color yellow #f9e2af;
|
||||||
|
@define-color green #a6e3a1;
|
||||||
|
@define-color teal #94e2d5;
|
||||||
|
@define-color sky #89dceb;
|
||||||
|
@define-color sapphire #74c7ec;
|
||||||
|
@define-color blue #89b4fa;
|
||||||
|
@define-color lavender #b4befe;
|
||||||
|
@define-color text #cdd6f4;
|
||||||
|
@define-color subtext1 #bac2de;
|
||||||
|
@define-color subtext0 #a6adc8;
|
||||||
|
@define-color overlay2 #9399b2;
|
||||||
|
@define-color overlay1 #7f849c;
|
||||||
|
@define-color overlay0 #6c7086;
|
||||||
|
@define-color surface2 #585b70;
|
||||||
|
@define-color surface1 #45475a;
|
||||||
|
@define-color surface0 #313244;
|
||||||
|
@define-color base #1e1e2e;
|
||||||
|
@define-color mantle #181825;
|
||||||
|
@define-color crust #11111b;
|
||||||
|
|
||||||
|
/* ---- Stable role interface (theme-agnostic; consumers use THESE) ----
|
||||||
|
* NOTE: values are literal hex, NOT @references to the palette above.
|
||||||
|
* Some Gtk.CssProvider-based parsers silently drop
|
||||||
|
* @define-color lines that reference another @color, which made every
|
||||||
|
* background transparent. Keep each role in sync with its palette twin
|
||||||
|
* (mapping below); scripts/sync-theme.sh verifies this mechanically. */
|
||||||
|
@define-color bg #1e1e2e; /* = @base */
|
||||||
|
@define-color bg_dim #181825; /* = @mantle */
|
||||||
|
@define-color bg_deep #11111b; /* = @crust */
|
||||||
|
@define-color bg_translucent rgba(17, 17, 27, 0.85); /* crust at 85% (translucent window bg) */
|
||||||
|
@define-color fg #cdd6f4; /* = @text */
|
||||||
|
@define-color fg_dim #a6adc8; /* = @subtext0 */
|
||||||
|
@define-color fg_muted #7f849c; /* = @overlay1 */
|
||||||
|
@define-color surface #313244; /* = @surface0 */
|
||||||
|
@define-color border #45475a; /* = @surface1 */
|
||||||
|
@define-color accent #74c7ec; /* = @sapphire */
|
||||||
|
@define-color accent2 #b4befe; /* = @lavender */
|
||||||
|
@define-color ok #a6e3a1; /* = @green */
|
||||||
|
@define-color warn #f9e2af; /* = @yellow */
|
||||||
|
@define-color urgent #f38ba8; /* = @red */
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
# Central theme interface: catppuccin-mocha (Catppuccin Mocha).
|
||||||
|
# Part of basic/.config/themes. Managed file: edit the palette here.
|
||||||
|
# Sourced by POSIX shells (~/.bashrc) and by Hyprland-launched apps.
|
||||||
|
# Generic THEME_* vars are the stable, theme-agnostic interface; the
|
||||||
|
# CATPPUCCIN_* / palette vars below exist because lazy.nvim, TPM and
|
||||||
|
# starship need the literal upstream names. A future non-Catppuccin theme
|
||||||
|
# only adds a new directory exporting the same THEME_* names.
|
||||||
|
|
||||||
|
export THEME_NAME="catppuccin"
|
||||||
|
export THEME_FLAVOR="mocha"
|
||||||
|
export THEME_ID="catppuccin-mocha"
|
||||||
|
|
||||||
|
# Generic roles (stable interface).
|
||||||
|
export THEME_BG="#1e1e2e"
|
||||||
|
export THEME_BG_DIM="#181825"
|
||||||
|
export THEME_FG="#cdd6f4"
|
||||||
|
export THEME_FG_DIM="#a6adc8"
|
||||||
|
export THEME_SURFACE="#313244"
|
||||||
|
export THEME_BORDER="#45475a"
|
||||||
|
export THEME_ACCENT="#74c7ec"
|
||||||
|
export THEME_ACCENT2="#b4befe"
|
||||||
|
export THEME_OK="#a6e3a1"
|
||||||
|
export THEME_WARN="#f9e2af"
|
||||||
|
export THEME_URGENT="#f38ba8"
|
||||||
|
|
||||||
|
# Plugin / colorscheme mapping (see ../registry.conf).
|
||||||
|
export THEME_NVIM_COLORSCHEME="catppuccin"
|
||||||
|
export THEME_TMUX_PLUGIN="catppuccin/tmux"
|
||||||
|
export THEME_GTK="Adwaita:dark"
|
||||||
|
|
||||||
|
# Upstream literal names (compat for lazy.nvim / TPM / starship).
|
||||||
|
export CATPPUCCIN_FLAVOR="mocha"
|
||||||
|
export CATPPUCCIN_BASE="#1e1e2e"
|
||||||
|
export CATPPUCCIN_MANTLE="#181825"
|
||||||
|
export CATPPUCCIN_CRUST="#11111b"
|
||||||
|
export CATPPUCCIN_TEXT="#cdd6f4"
|
||||||
|
export CATPPUCCIN_SAPPHIRE="#74c7ec"
|
||||||
|
export CATPPUCCIN_LAVENDER="#b4befe"
|
||||||
|
export CATPPUCCIN_SURFACE1="#45475a"
|
||||||
|
export CATPPUCCIN_RED="#f38ba8"
|
||||||
|
export CATPPUCCIN_GREEN="#a6e3a1"
|
||||||
|
export CATPPUCCIN_YELLOW="#f9e2af"
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
# Central theme interface: catppuccin-mocha (Catppuccin Mocha).
|
||||||
|
# Fish companion of theme.env.sh. Sourced from fish/config.fish.
|
||||||
|
# Managed file: edit the palette here, not in consumers.
|
||||||
|
|
||||||
|
set -gx THEME_NAME "catppuccin"
|
||||||
|
set -gx THEME_FLAVOR "mocha"
|
||||||
|
set -gx THEME_ID "catppuccin-mocha"
|
||||||
|
|
||||||
|
set -gx THEME_BG "#1e1e2e"
|
||||||
|
set -gx THEME_BG_DIM "#181825"
|
||||||
|
set -gx THEME_FG "#cdd6f4"
|
||||||
|
set -gx THEME_FG_DIM "#a6adc8"
|
||||||
|
set -gx THEME_SURFACE "#313244"
|
||||||
|
set -gx THEME_BORDER "#45475a"
|
||||||
|
set -gx THEME_ACCENT "#74c7ec"
|
||||||
|
set -gx THEME_ACCENT2 "#b4befe"
|
||||||
|
set -gx THEME_OK "#a6e3a1"
|
||||||
|
set -gx THEME_WARN "#f9e2af"
|
||||||
|
set -gx THEME_URGENT "#f38ba8"
|
||||||
|
|
||||||
|
set -gx THEME_NVIM_COLORSCHEME "catppuccin"
|
||||||
|
set -gx THEME_TMUX_PLUGIN "catppuccin/tmux"
|
||||||
|
set -gx THEME_GTK "Adwaita:dark"
|
||||||
|
|
||||||
|
set -gx CATPPUCCIN_FLAVOR "mocha"
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
-- Central theme interface: catppuccin-mocha (Catppuccin Mocha).
|
||||||
|
-- Part of basic/.config/themes. Managed file: edit the palette here.
|
||||||
|
-- Consumers (hyprland.lua) load this via
|
||||||
|
-- dofile(os.getenv("HOME") .. "/.config/themes/current/theme.lua")
|
||||||
|
-- and must use the generic roles (bg/fg/accent/...) so a future
|
||||||
|
-- non-Catppuccin theme only adds a new directory. Full palette is
|
||||||
|
-- passed through for components that need specific colors.
|
||||||
|
-- Hyprland color syntax: "rgb(hex)" / "rgba(hexaa)".
|
||||||
|
|
||||||
|
local T = {
|
||||||
|
name = "catppuccin",
|
||||||
|
flavor = "mocha",
|
||||||
|
|
||||||
|
hex = {
|
||||||
|
rosewater = "f5e0dc",
|
||||||
|
flamingo = "f2cdcd",
|
||||||
|
pink = "f5c2e7",
|
||||||
|
mauve = "cba6f7",
|
||||||
|
red = "f38ba8",
|
||||||
|
maroon = "eba0ac",
|
||||||
|
peach = "fab387",
|
||||||
|
yellow = "f9e2af",
|
||||||
|
green = "a6e3a1",
|
||||||
|
teal = "94e2d5",
|
||||||
|
sky = "89dceb",
|
||||||
|
sapphire = "74c7ec",
|
||||||
|
blue = "89b4fa",
|
||||||
|
lavender = "b4befe",
|
||||||
|
text = "cdd6f4",
|
||||||
|
subtext1 = "bac2de",
|
||||||
|
subtext0 = "a6adc8",
|
||||||
|
overlay2 = "9399b2",
|
||||||
|
overlay1 = "7f849c",
|
||||||
|
overlay0 = "6c7086",
|
||||||
|
surface2 = "585b70",
|
||||||
|
surface1 = "45475a",
|
||||||
|
surface0 = "313244",
|
||||||
|
base = "1e1e2e",
|
||||||
|
mantle = "181825",
|
||||||
|
crust = "11111b",
|
||||||
|
},
|
||||||
|
|
||||||
|
-- Generic roles (stable interface, theme-agnostic).
|
||||||
|
bg = "rgba(1e1e2eee)",
|
||||||
|
bg_dim = "rgb(181825)",
|
||||||
|
fg = "rgb(cdd6f4)",
|
||||||
|
fg_dim = "rgb(a6adc8)",
|
||||||
|
surface = "rgb(313244)",
|
||||||
|
border_active = "rgba(74c7ecee)",
|
||||||
|
border_inactive = "rgba(45475aee)",
|
||||||
|
shadow = "rgba(74c7ecee)",
|
||||||
|
accent = "rgb(74c7ec)",
|
||||||
|
accent2 = "rgb(b4befe)",
|
||||||
|
ok = "rgb(a6e3a1)",
|
||||||
|
warn = "rgb(f9e2af)",
|
||||||
|
urgent = "rgb(f38ba8)",
|
||||||
|
|
||||||
|
-- Full palette passthrough (hyprland syntax).
|
||||||
|
rosewater = "rgb(f5e0dc)",
|
||||||
|
flamingo = "rgb(f2cdcd)",
|
||||||
|
pink = "rgb(f5c2e7)",
|
||||||
|
mauve = "rgb(cba6f7)",
|
||||||
|
red = "rgb(f38ba8)",
|
||||||
|
maroon = "rgb(eba0ac)",
|
||||||
|
peach = "rgb(fab387)",
|
||||||
|
yellow = "rgb(f9e2af)",
|
||||||
|
green = "rgb(a6e3a1)",
|
||||||
|
teal = "rgb(94e2d5)",
|
||||||
|
sky = "rgb(89dceb)",
|
||||||
|
sapphire = "rgb(74c7ec)",
|
||||||
|
blue = "rgb(89b4fa)",
|
||||||
|
lavender = "rgb(b4befe)",
|
||||||
|
text = "rgb(cdd6f4)",
|
||||||
|
subtext1 = "rgb(bac2de)",
|
||||||
|
subtext0 = "rgb(a6adc8)",
|
||||||
|
overlay2 = "rgb(9399b2)",
|
||||||
|
overlay1 = "rgb(7f849c)",
|
||||||
|
overlay0 = "rgb(6c7086)",
|
||||||
|
surface2 = "rgb(585b70)",
|
||||||
|
surface1 = "rgb(45475a)",
|
||||||
|
surface0 = "rgb(313244)",
|
||||||
|
base = "rgb(1e1e2e)",
|
||||||
|
mantle = "rgb(181825)",
|
||||||
|
crust = "rgb(11111b)",
|
||||||
|
}
|
||||||
|
|
||||||
|
return T
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
# Central theme registry (basic/.config/themes/themes/registry.conf).
|
||||||
|
#
|
||||||
|
# One row per installed theme. Columns (pipe-separated):
|
||||||
|
# theme-id | nvim colorscheme | tmux plugin | gtk theme | notes
|
||||||
|
#
|
||||||
|
# Consumers must branch on THEME_ID / THEME_NVIM_COLORSCHEME /
|
||||||
|
# THEME_TMUX_PLUGIN only — never on hardcoded theme names elsewhere.
|
||||||
|
# Adding a future non-Catppuccin theme means: scaffold the directory with
|
||||||
|
# scripts/new-theme.sh, fill in its palette, add one row here.
|
||||||
|
catppuccin-mocha|catppuccin|catppuccin/tmux|Adwaita:dark|default; Catppuccin Mocha everywhere
|
||||||
Executable
+47
@@ -0,0 +1,47 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -Eeuo pipefail
|
||||||
|
|
||||||
|
SERVER="buntes-monster"
|
||||||
|
SERVER_IP="192.168.0.4"
|
||||||
|
|
||||||
|
MOUNTS=(
|
||||||
|
"/mnt/anbau:/mnt/anbau"
|
||||||
|
"/mnt/bilder:/mnt/bilder"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Re-run as root when needed.
|
||||||
|
if [[ "${EUID}" -ne 0 ]]; then
|
||||||
|
exec sudo "$0" "$@"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Preserve ownership for the user who invoked sudo.
|
||||||
|
OWNER="${SUDO_USER:-${USER}}"
|
||||||
|
OWNER_UID="$(id -u "$OWNER")"
|
||||||
|
OWNER_GID="$(id -g "$OWNER")"
|
||||||
|
|
||||||
|
for entry in "${MOUNTS[@]}"; do
|
||||||
|
IFS=":" read -r remote_path local_path <<< "$entry"
|
||||||
|
|
||||||
|
# Create the mount point if necessary and give it to the invoking user.
|
||||||
|
install -d \
|
||||||
|
-o "$OWNER_UID" \
|
||||||
|
-g "$OWNER_GID" \
|
||||||
|
-m 0755 \
|
||||||
|
"$local_path"
|
||||||
|
|
||||||
|
# Do not remount an already-mounted location.
|
||||||
|
if mountpoint -q "$local_path"; then
|
||||||
|
echo "Already mounted: $local_path"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Mounting $SERVER:$remote_path at $local_path..."
|
||||||
|
|
||||||
|
mount \
|
||||||
|
-t nfs \
|
||||||
|
-o rw,sync,addr="$SERVER_IP" \
|
||||||
|
"$SERVER:$remote_path" \
|
||||||
|
"$local_path"
|
||||||
|
|
||||||
|
echo "Mounted: $local_path"
|
||||||
|
done
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
{
|
||||||
|
}
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
{
|
||||||
|
}
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
{
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
"appearance": {
|
||||||
|
"transparency": {
|
||||||
|
"enabled": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"background": {
|
||||||
|
"wallpaperEnabled": true
|
||||||
|
},
|
||||||
|
"dashboard": {
|
||||||
|
"showWeather": true
|
||||||
|
},
|
||||||
|
"general": {
|
||||||
|
"apps": {
|
||||||
|
"audio": [
|
||||||
|
"supersonic-desktop"
|
||||||
|
],
|
||||||
|
"explorer": [
|
||||||
|
"dolphin"
|
||||||
|
],
|
||||||
|
"playback": [
|
||||||
|
"celluloid"
|
||||||
|
],
|
||||||
|
"terminal": [
|
||||||
|
"kitty"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"launcher": {
|
||||||
|
"showOnHover": true,
|
||||||
|
"useFuzzy": {
|
||||||
|
"apps": true
|
||||||
|
},
|
||||||
|
"vimKeybinds": true
|
||||||
|
},
|
||||||
|
"paths": {
|
||||||
|
"wallpaperDir": "~/nextcloud/Photos/Wallpapers"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1 +0,0 @@
|
|||||||
$HYPR_MONITOR_SETUP = ~/.config/hypr/modules/monitor_setup_0_auto.conf
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
export HYPR_WALLPAPER_LINK_SOURCE="$HOME/nextcloud/Photos/Wallpapers"
|
|
||||||
export HYPR_WALLPAPER_LINK="$HOME/.config/wpaperd/wallpapers/linked"
|
|
||||||
|
|
||||||
ln -sf "$HYPR_WALLPAPER_LINK_SOURCE" "$HYPR_WALLPAPER_LINK"
|
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
return {
|
||||||
|
-- Supported values: "noctalia" or "caelestia".
|
||||||
|
shell = "noctalia",
|
||||||
|
}
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
general {
|
|
||||||
lock_cmd = pidof hyprlock || hyprlock # avoid starting multiple hyprlock instances.
|
|
||||||
before_sleep_cmd = loginctl lock-session # lock before suspend.
|
|
||||||
after_sleep_cmd = hyprctl dispatch dpms on # to avoid having to press a key twice to turn on the display.
|
|
||||||
}
|
|
||||||
|
|
||||||
listener {
|
|
||||||
timeout = 300 # 5.0min.
|
|
||||||
on-timeout = brightnessctl -s set 10 # set monitor backlight to minimum, avoid 0 on OLED monitor.
|
|
||||||
on-resume = brightnessctl -r # monitor backlight restore.
|
|
||||||
}
|
|
||||||
|
|
||||||
# turn off keyboard backlight, comment out this section if you dont have a keyboard backlight.
|
|
||||||
listener {
|
|
||||||
timeout = 300 # 5.0min.
|
|
||||||
on-timeout = brightnessctl -sd rgb:kbd_backlight set 0 # turn off keyboard backlight.
|
|
||||||
on-resume = brightnessctl -rd rgb:kbd_backlight # turn on keyboard backlight.
|
|
||||||
}
|
|
||||||
|
|
||||||
listener {
|
|
||||||
timeout = 900 # 15min
|
|
||||||
on-timeout = loginctl lock-session # lock screen when timeout has passed
|
|
||||||
}
|
|
||||||
|
|
||||||
listener {
|
|
||||||
timeout = 1800 # 30min
|
|
||||||
on-timeout = hyprctl dispatch dpms off # screen off when timeout has passed
|
|
||||||
on-resume = hyprctl dispatch dpms on && brightnessctl -r # screen on when activity is detected after timeout has fired.
|
|
||||||
}
|
|
||||||
|
|
||||||
listener {
|
|
||||||
timeout = 2700 # 45min
|
|
||||||
on-timeout = systemctl suspend # suspend pc
|
|
||||||
}
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
-- Generated by HyprMod
|
|
||||||
|
|
||||||
-- Settings
|
|
||||||
hl.config({
|
|
||||||
general = {
|
|
||||||
border_size = 5,
|
|
||||||
col = {
|
|
||||||
active_border = "0xcbe0e89b",
|
|
||||||
inactive_border = "0xff0e0543",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
@@ -1,470 +0,0 @@
|
|||||||
# #######################################################################################
|
|
||||||
# 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
|
|
||||||
|
|
||||||
source = ~/.config/hypr/env.conf
|
|
||||||
exec = bash ~/.config/hypr/env.sh
|
|
||||||
|
|
||||||
|
|
||||||
################
|
|
||||||
### MONITORS ###
|
|
||||||
################
|
|
||||||
|
|
||||||
enable_color_management = true
|
|
||||||
|
|
||||||
# See https://wiki.hypr.land/Configuring/Monitors/
|
|
||||||
# monitor=,preferred,auto,auto
|
|
||||||
|
|
||||||
source = $HYPR_MONITOR_SETUP
|
|
||||||
# source = ~/.config/hypr/modules/monitor_setup_buntes_monster.conf
|
|
||||||
|
|
||||||
# unscale XWayland
|
|
||||||
xwayland {
|
|
||||||
force_zero_scaling = true
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
###################
|
|
||||||
### MY PROGRAMS ###
|
|
||||||
###################
|
|
||||||
|
|
||||||
# See https://wiki.hypr.land/Configuring/Keywords/
|
|
||||||
|
|
||||||
# Set programs that you use
|
|
||||||
$terminal = kitty
|
|
||||||
$fileManager = dolphin
|
|
||||||
#$menu = hyprlauncher
|
|
||||||
$menu = wofi --show drun
|
|
||||||
|
|
||||||
|
|
||||||
#################
|
|
||||||
### 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
|
|
||||||
exec-once = waybar &
|
|
||||||
# exec-one = hyprpaper &
|
|
||||||
exec-once = wpaperd &
|
|
||||||
exec-once = swaync &
|
|
||||||
exec-once = hypridle &
|
|
||||||
exec-once = nextcloud &
|
|
||||||
exec-once = sh ~/.config/hypr/scripts/portal-host-override.sh
|
|
||||||
exec-once = sh ~/.config/hypr/scripts/ensure-mime-defaults.sh
|
|
||||||
# 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/
|
|
||||||
|
|
||||||
env = XCURSOR_SIZE,24
|
|
||||||
env = HYPRCURSOR_SIZE,24
|
|
||||||
env = XDG_CURRENT_DESKTOP,Hyprland
|
|
||||||
env = XDG_SESSION_DESKTOP,Hyprland
|
|
||||||
env = XDG_SESSION_TYPE,wayland
|
|
||||||
env = XDG_MENU_PREFIX,plasma-
|
|
||||||
env = GTK_USE_PORTAL,1
|
|
||||||
env = GTK_THEME,Adwaita:dark
|
|
||||||
env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1
|
|
||||||
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 ###
|
|
||||||
#####################
|
|
||||||
|
|
||||||
source=themes/mocha.conf
|
|
||||||
$color_active_border = rgba($sapphireAlphaee)
|
|
||||||
$color_inactive_border = rgba($surface1Alphaee)
|
|
||||||
$color_decoration_shadow = rgba($sapphireAlphaee)
|
|
||||||
|
|
||||||
#####################
|
|
||||||
### LOOK AND FEEL ###
|
|
||||||
#####################
|
|
||||||
|
|
||||||
# Refer to https://wiki.hypr.land/Configuring/Variables/
|
|
||||||
|
|
||||||
# https://wiki.hypr.land/Configuring/Variables/#general
|
|
||||||
general {
|
|
||||||
gaps_in = 3
|
|
||||||
gaps_out = 4
|
|
||||||
|
|
||||||
border_size = 3
|
|
||||||
|
|
||||||
# https://wiki.hypr.land/Configuring/Variables/#variable-types for info about colors
|
|
||||||
col.active_border = $color_active_border
|
|
||||||
col.inactive_border = $color_inactive_border
|
|
||||||
|
|
||||||
# Set to true enable resizing windows by clicking and dragging on borders and gaps
|
|
||||||
resize_on_border = true
|
|
||||||
|
|
||||||
# Please see https://wiki.hypr.land/Configuring/Tearing/ before you turn this on
|
|
||||||
allow_tearing = false
|
|
||||||
|
|
||||||
layout = dwindle
|
|
||||||
}
|
|
||||||
|
|
||||||
# https://wiki.hypr.land/Configuring/Variables/#decoration
|
|
||||||
decoration {
|
|
||||||
rounding = 5
|
|
||||||
rounding_power = 2
|
|
||||||
|
|
||||||
# Change transparency of focused and unfocused windows
|
|
||||||
active_opacity = 1.00
|
|
||||||
inactive_opacity = 1.00
|
|
||||||
|
|
||||||
shadow {
|
|
||||||
enabled = true
|
|
||||||
range = 10
|
|
||||||
render_power = 3
|
|
||||||
color = $color_decoration_shadow
|
|
||||||
}
|
|
||||||
|
|
||||||
# https://wiki.hypr.land/Configuring/Variables/#blur
|
|
||||||
blur {
|
|
||||||
enabled = true
|
|
||||||
size = 10
|
|
||||||
passes = 2
|
|
||||||
|
|
||||||
vibrancy = 0.1696
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# https://wiki.hypr.land/Configuring/Variables/#animations
|
|
||||||
animations {
|
|
||||||
enabled = true
|
|
||||||
|
|
||||||
# Default curves, see https://wiki.hypr.land/Configuring/Animations/#curves
|
|
||||||
# NAME, X0, Y0, X1, Y1
|
|
||||||
bezier = easeOutQuint, 0.23, 1, 0.32, 1
|
|
||||||
bezier = easeInOutCubic, 0.65, 0.05, 0.36, 1
|
|
||||||
bezier = linear, 0, 0, 1, 1
|
|
||||||
bezier = almostLinear, 0.5, 0.5, 0.75, 1
|
|
||||||
bezier = quick, 0.15, 0, 0.1, 1
|
|
||||||
|
|
||||||
# Default animations, see https://wiki.hypr.land/Configuring/Animations/
|
|
||||||
# NAME, ONOFF, SPEED, CURVE, [STYLE]
|
|
||||||
animation = global, 1, 10, default
|
|
||||||
animation = border, 1, 5.39, easeOutQuint
|
|
||||||
animation = windows, 1, 4.79, easeOutQuint
|
|
||||||
animation = windowsIn, 1, 4.1, easeOutQuint, popin 87%
|
|
||||||
animation = windowsOut, 1, 1.49, linear, popin 87%
|
|
||||||
animation = fadeIn, 1, 1.73, almostLinear
|
|
||||||
animation = fadeOut, 1, 1.46, almostLinear
|
|
||||||
animation = fade, 1, 3.03, quick
|
|
||||||
animation = layers, 1, 3.81, easeOutQuint
|
|
||||||
animation = layersIn, 1, 4, easeOutQuint, fade
|
|
||||||
animation = layersOut, 1, 1.5, linear, fade
|
|
||||||
animation = fadeLayersIn, 1, 1.79, almostLinear
|
|
||||||
animation = fadeLayersOut, 1, 1.39, almostLinear
|
|
||||||
animation = workspaces, 1, 1.94, almostLinear, fade
|
|
||||||
animation = workspacesIn, 1, 1.21, almostLinear, fade
|
|
||||||
animation = workspacesOut, 1, 1.94, almostLinear, fade
|
|
||||||
animation = zoomFactor, 1, 7, quick
|
|
||||||
}
|
|
||||||
|
|
||||||
# Ref https://wiki.hypr.land/Configuring/Workspace-Rules/
|
|
||||||
# "Smart gaps" / "No gaps when only"
|
|
||||||
# uncomment all if you wish to use that.
|
|
||||||
workspace = w[tv1], gapsout:0, gapsin:0
|
|
||||||
workspace = f[1], gapsout:0, gapsin:0
|
|
||||||
windowrule {
|
|
||||||
name = no-gaps-wtv1
|
|
||||||
match:float = false
|
|
||||||
match:workspace = w[tv1]
|
|
||||||
|
|
||||||
border_size = 0
|
|
||||||
rounding = 0
|
|
||||||
}
|
|
||||||
|
|
||||||
windowrule {
|
|
||||||
name = no-gaps-f1
|
|
||||||
match:float = false
|
|
||||||
match:workspace = f[1]
|
|
||||||
|
|
||||||
border_size = 0
|
|
||||||
rounding = 0
|
|
||||||
}
|
|
||||||
|
|
||||||
# See https://wiki.hypr.land/Configuring/Dwindle-Layout/ for more
|
|
||||||
dwindle {
|
|
||||||
preserve_split = true # You probably want this
|
|
||||||
}
|
|
||||||
|
|
||||||
# See https://wiki.hypr.land/Configuring/Master-Layout/ for more
|
|
||||||
master {
|
|
||||||
new_status = master
|
|
||||||
}
|
|
||||||
|
|
||||||
# https://wiki.hypr.land/Configuring/Variables/#misc
|
|
||||||
misc {
|
|
||||||
force_default_wallpaper = -1 # Set to 0 or 1 to disable the anime mascot wallpapers
|
|
||||||
disable_hyprland_logo = false # If true disables the random hyprland logo / anime girl background. :(
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#############
|
|
||||||
### INPUT ###
|
|
||||||
#############
|
|
||||||
|
|
||||||
# https://wiki.hypr.land/Configuring/Variables/#input
|
|
||||||
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 # -1.0 - 1.0, 0 means no modification.
|
|
||||||
|
|
||||||
touchpad {
|
|
||||||
natural_scroll = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# See https://wiki.hypr.land/Configuring/Gestures
|
|
||||||
gesture = 3, horizontal, workspace
|
|
||||||
|
|
||||||
# Example per-device config
|
|
||||||
# See https://wiki.hypr.land/Configuring/Keywords/#per-device-input-configs for more
|
|
||||||
device {
|
|
||||||
name = epic-mouse-v1
|
|
||||||
sensitivity = -0.5
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
###################
|
|
||||||
### KEYBINDINGS ###
|
|
||||||
###################
|
|
||||||
|
|
||||||
# See https://wiki.hypr.land/Configuring/Keywords/
|
|
||||||
$mainMod = SUPER # Sets "Windows" key as main modifier
|
|
||||||
|
|
||||||
# Example binds, see https://wiki.hypr.land/Configuring/Binds/ for more
|
|
||||||
bind = $mainMod, RETURN, exec, $terminal
|
|
||||||
bind = $mainMod, Q, killactive,
|
|
||||||
bind = $mainMod, ESCAPE, exec, hyprshutdown
|
|
||||||
bind = $mainMod SHIFT, ESCAPE, exec, command -v hyprshutdown >/dev/null 2>&1 && hyprshutdown || hyprctl dispatch exit
|
|
||||||
bind = $mainMod CTRL, ESCAPE, exec, hyprshutdown -t 'Shutting down...' --post-cmd 'shutdown -P 0'
|
|
||||||
bind = $mainMod ALT, ESCAPE, exec, hyprshutdown -t 'Restarting...' --post-cmd 'reboot'
|
|
||||||
bind = $mainMod, E, exec, $fileManager
|
|
||||||
bind = $mainMod, V, togglefloating,
|
|
||||||
bind = $mainMod, SPACE, exec, $menu
|
|
||||||
bind = $mainMod SHIFT, SPACE, exec, nwg-drawer
|
|
||||||
bind = $mainMod, P, pseudo, # dwindle
|
|
||||||
bind = $mainMod SHIFT, J, layoutmsg, togglesplit # dwindle
|
|
||||||
bind = $mainMod, I, exec, firefox &
|
|
||||||
bind = $mainMod, n, exec, ~/.local/bin/hyprltm-net
|
|
||||||
|
|
||||||
# Move focus with mainMod + WASD or Vim-style
|
|
||||||
bind = $mainMod, h, movefocus, l
|
|
||||||
bind = $mainMod, l, movefocus, r
|
|
||||||
bind = $mainMod, k, movefocus, u
|
|
||||||
bind = $mainMod, j, movefocus, d
|
|
||||||
|
|
||||||
# Move windows with mainMod + WASD or Vim-style
|
|
||||||
bind = $mainMod SHIFT, a, movewindow, l
|
|
||||||
bind = $mainMod SHIFT, d, movewindow, r
|
|
||||||
bind = $mainMod SHIFT, w, movewindow, u
|
|
||||||
bind = $mainMod SHIFT, s, movewindow, d
|
|
||||||
bind = $mainMod SHIFT, h, movewindow, l
|
|
||||||
bind = $mainMod SHIFT, l, movewindow, r
|
|
||||||
bind = $mainMod SHIFT, k, movewindow, u
|
|
||||||
bind = $mainMod SHIFT, j, movewindow, d
|
|
||||||
|
|
||||||
# Resize focused window with mainMod + Arrows
|
|
||||||
bind = $mainMod, left, resizeactive, -10 0
|
|
||||||
bind = $mainMod, right, resizeactive, 10 0
|
|
||||||
bind = $mainMod, up, resizeactive, 0 -10
|
|
||||||
bind = $mainMod, down, resizeactive, 0 10
|
|
||||||
|
|
||||||
# Switch workspaces with mainMod + [0-9]
|
|
||||||
bind = $mainMod, 1, workspace, 1
|
|
||||||
bind = $mainMod, 2, workspace, 2
|
|
||||||
bind = $mainMod, 3, workspace, 3
|
|
||||||
bind = $mainMod, 4, workspace, 4
|
|
||||||
bind = $mainMod, 5, workspace, 5
|
|
||||||
bind = $mainMod, 6, workspace, 6
|
|
||||||
bind = $mainMod, 7, workspace, 7
|
|
||||||
bind = $mainMod, 8, workspace, 8
|
|
||||||
bind = $mainMod, 9, workspace, 9
|
|
||||||
bind = $mainMod, 0, workspace, 10
|
|
||||||
|
|
||||||
binde = , XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+
|
|
||||||
bindl = , XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
|
|
||||||
|
|
||||||
# Move active window to a workspace with mainMod + SHIFT + [0-9]
|
|
||||||
bind = $mainMod SHIFT, 1, movetoworkspace, 1
|
|
||||||
bind = $mainMod SHIFT, 2, movetoworkspace, 2
|
|
||||||
bind = $mainMod SHIFT, 3, movetoworkspace, 3
|
|
||||||
bind = $mainMod SHIFT, 4, movetoworkspace, 4
|
|
||||||
bind = $mainMod SHIFT, 5, movetoworkspace, 5
|
|
||||||
bind = $mainMod SHIFT, 6, movetoworkspace, 6
|
|
||||||
bind = $mainMod SHIFT, 7, movetoworkspace, 7
|
|
||||||
bind = $mainMod SHIFT, 8, movetoworkspace, 8
|
|
||||||
bind = $mainMod SHIFT, 9, movetoworkspace, 9
|
|
||||||
bind = $mainMod SHIFT, 0, movetoworkspace, 10
|
|
||||||
|
|
||||||
# # Example special workspace (scratchpad)
|
|
||||||
# bind = $mainMod, S, togglespecialworkspace, magic
|
|
||||||
# bind = $mainMod SHIFT, S, movetoworkspace, special:magic
|
|
||||||
|
|
||||||
# Scroll through existing workspaces with mainMod + scroll
|
|
||||||
bind = $mainMod, mouse_down, workspace, e+1
|
|
||||||
bind = $mainMod, mouse_up, workspace, e-1
|
|
||||||
|
|
||||||
# Move/resize windows with mainMod + LMB/RMB and dragging
|
|
||||||
bindm = $mainMod, mouse:272, movewindow
|
|
||||||
bindm = $mainMod, mouse:273, resizewindow
|
|
||||||
|
|
||||||
# Laptop multimedia keys for volume and LCD brightness
|
|
||||||
bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+
|
|
||||||
bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
|
|
||||||
bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
|
|
||||||
bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
|
|
||||||
bindel = ,XF86MonBrightnessUp, exec, brightnessctl -e4 -n2 set 5%+
|
|
||||||
bindel = ,XF86MonBrightnessDown, exec, brightnessctl -e4 -n2 set 5%-
|
|
||||||
|
|
||||||
# Requires playerctl
|
|
||||||
bindl = , XF86AudioNext, exec, playerctl next
|
|
||||||
bindl = , XF86AudioPause, exec, playerctl play-pause
|
|
||||||
bindl = , XF86AudioPlay, exec, playerctl play-pause
|
|
||||||
bindl = , XF86AudioPrev, exec, playerctl previous
|
|
||||||
|
|
||||||
# Screenshots
|
|
||||||
$screenshot_folder = ~/Bilder/Screenshots/
|
|
||||||
bindl = , PRINT, exec, hyprshot -m region --output-folder $screenshot_folder
|
|
||||||
bindl = LCTRL, PRINT, exec, hyprshot -m window --output-folder $screenshot_folder
|
|
||||||
bindl = SHIFT, PRINT, exec, hyprshot -m active --output-folder $screenshot_folder
|
|
||||||
|
|
||||||
# Screenlock
|
|
||||||
bindl = LCTRL ALT, L, exec, hyprlock
|
|
||||||
|
|
||||||
##############################
|
|
||||||
### 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
|
|
||||||
|
|
||||||
windowrule {
|
|
||||||
# Ignore maximize requests from all apps. You'll probably like this.
|
|
||||||
name = suppress-maximize-events
|
|
||||||
match:class = .*
|
|
||||||
|
|
||||||
suppress_event = maximize
|
|
||||||
}
|
|
||||||
|
|
||||||
windowrule {
|
|
||||||
# Fix some dragging issues with XWayland
|
|
||||||
name = fix-xwayland-drags
|
|
||||||
match:class = ^$
|
|
||||||
match:title = ^$
|
|
||||||
match:xwayland = true
|
|
||||||
match:float = true
|
|
||||||
match:fullscreen = false
|
|
||||||
match:pin = false
|
|
||||||
|
|
||||||
no_focus = true
|
|
||||||
}
|
|
||||||
|
|
||||||
# Hyprland-run windowrule
|
|
||||||
windowrule {
|
|
||||||
name = move-hyprland-run
|
|
||||||
|
|
||||||
match:class = hyprland-run
|
|
||||||
|
|
||||||
move = 20 monitor_h-120
|
|
||||||
float = yes
|
|
||||||
}
|
|
||||||
|
|
||||||
windowrule {
|
|
||||||
name = opacity-kitty-dolphin
|
|
||||||
match:class = .*(kitty|dolphin).*
|
|
||||||
opacity = 0.90 0.80
|
|
||||||
}
|
|
||||||
|
|
||||||
layerrule = blur on, ignore_alpha 0.30, match:namespace waybar
|
|
||||||
layerrule = blur_popups on, match:namespace waybar
|
|
||||||
|
|
||||||
decoration {
|
|
||||||
blur {
|
|
||||||
size = 8
|
|
||||||
passes = 2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
windowrule {
|
|
||||||
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
|
|
||||||
source = /home/mathias/.config/hypr/hyprland-gui.conf
|
|
||||||
+41
-688
@@ -1,49 +1,26 @@
|
|||||||
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/"
|
|
||||||
|
|
||||||
-- #######################################################################################
|
local config_home = os.getenv("XDG_CONFIG_HOME") or os.getenv("HOME") .. "/.config"
|
||||||
|
|
||||||
-- AUTOGENERATED HYPRLAND CONFIG.
|
local fid_env = io.open(config_home .. "/hypr/env.lua")
|
||||||
|
local env = {}
|
||||||
|
if fid_env then
|
||||||
|
env = require("env")
|
||||||
|
else
|
||||||
|
env = require("env_example")
|
||||||
|
end
|
||||||
|
|
||||||
-- EDIT THIS CONFIG ACCORDING TO THE WIKI INSTRUCTIONS.
|
if env.shell ~= "noctalia" and env.shell ~= "caelestia" then
|
||||||
|
error("Unsupported shell '" .. tostring(env.shell) .. "' in ~/.config/hypr/env.lua; choose 'noctalia' or 'caelestia'")
|
||||||
|
end
|
||||||
|
|
||||||
-- #######################################################################################
|
|
||||||
|
|
||||||
-- 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")
|
hl.exec_cmd("bash ~/.config/hypr/env.sh")
|
||||||
|
|
||||||
-- ###############
|
-- ###############
|
||||||
|
|
||||||
-- ## MONITORS ###
|
-- ## MONITORS ###
|
||||||
|
|
||||||
-- ###############
|
-- ###############
|
||||||
-- See https://wiki.hypr.land/Configuring/Monitors/
|
|
||||||
|
|
||||||
-- monitor=,preferred,auto,auto
|
-- load default monitor config
|
||||||
require("modules.monitor_setup_buntes_monster")
|
require("modules.monitor_setup_default")
|
||||||
|
|
||||||
-- source = ~/.config/hypr/modules/monitor_setup_buntes_monster.conf
|
|
||||||
|
|
||||||
-- unscale XWayland
|
-- unscale XWayland
|
||||||
hl.config({
|
hl.config({
|
||||||
@@ -53,666 +30,42 @@ hl.config({
|
|||||||
})
|
})
|
||||||
|
|
||||||
-- ##################
|
-- ##################
|
||||||
|
|
||||||
-- ## MY PROGRAMS ###
|
-- ## 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.on("hyprland.start", function()
|
||||||
hl.exec_cmd("waybar &")
|
-- start selected shell
|
||||||
end)
|
if env.shell == "caelestia" then
|
||||||
|
hl.exec_cmd("caelestia shell -d")
|
||||||
-- exec-one = hyprpaper &
|
else -- default: "noctalia"
|
||||||
hl.on("hyprland.start", function()
|
hl.exec_cmd("noctalia &")
|
||||||
hl.exec_cmd("wpaperd &")
|
end
|
||||||
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/portal-host-override.sh")
|
||||||
hl.exec_cmd("sh ~/.config/hypr/scripts/ensure-mime-defaults.sh")
|
hl.exec_cmd("sh ~/.config/hypr/scripts/ensure-mime-defaults.sh")
|
||||||
end)
|
end)
|
||||||
|
|
||||||
-- exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP XDG_SESSION_TYPE XDG_MENU_PREFIX
|
require("modules.environment_variables")
|
||||||
|
require("modules.look_and_feel")
|
||||||
-- exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP XDG_SESSION_TYPE XDG_MENU_PREFIX
|
require("modules.input")
|
||||||
|
require("modules.keybinds")
|
||||||
-- exec = gsettings set org.gnome.desktop.interface gtk-theme "Breeze-Dark" # for GTK3 apps
|
require("modules.windows_and_workspaces")
|
||||||
|
|
||||||
-- 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
|
-- HyprMod managed settings
|
||||||
|
local fid_gui = io.open(config_home .. "/hypr/hyprland-buntes-monster-gui.lua")
|
||||||
|
if fid_gui then
|
||||||
|
fid_gui:close()
|
||||||
|
require("hyprland-buntes-monster-gui")
|
||||||
|
end
|
||||||
|
|
||||||
|
-- For Noctalia Color templates. Noctalia-only: under Caelestia this would
|
||||||
|
-- otherwise push Noctalia's Catppuccin border colors into the compositor.
|
||||||
|
if env.shell == "noctalia" then
|
||||||
|
require("noctalia").apply_theme()
|
||||||
|
end
|
||||||
|
|
||||||
|
-- HyprMod managed settings
|
||||||
|
local fid_gui2 = io.open(config_home .. "/hypr/hyprland-gui.lua")
|
||||||
|
if fid_gui2 then
|
||||||
|
fid_gui2:close()
|
||||||
require("hyprland-gui")
|
require("hyprland-gui")
|
||||||
|
end
|
||||||
|
|||||||
@@ -1,106 +0,0 @@
|
|||||||
# sample hyprlock.conf
|
|
||||||
# for more configuration options, refer https://wiki.hyprland.org/Hypr-Ecosystem/hyprlock
|
|
||||||
#
|
|
||||||
# rendered text in all widgets supports pango markup (e.g. <b> or <i> tags)
|
|
||||||
# ref. https://wiki.hyprland.org/Hypr-Ecosystem/hyprlock/#general-remarks
|
|
||||||
#
|
|
||||||
# shortcuts to clear password buffer: ESC, Ctrl+U, Ctrl+Backspace
|
|
||||||
#
|
|
||||||
# you can get started by copying this config to ~/.config/hypr/hyprlock.conf
|
|
||||||
#
|
|
||||||
|
|
||||||
$font = Monospace
|
|
||||||
|
|
||||||
general {
|
|
||||||
hide_cursor = false
|
|
||||||
}
|
|
||||||
|
|
||||||
# uncomment to enable fingerprint authentication
|
|
||||||
# auth {
|
|
||||||
# fingerprint {
|
|
||||||
# enabled = true
|
|
||||||
# ready_message = Scan fingerprint to unlock
|
|
||||||
# present_message = Scanning...
|
|
||||||
# retry_delay = 250 # in milliseconds
|
|
||||||
# }
|
|
||||||
# }
|
|
||||||
|
|
||||||
animations {
|
|
||||||
enabled = true
|
|
||||||
bezier = linear, 1, 1, 0, 0
|
|
||||||
animation = fadeIn, 1, 5, linear
|
|
||||||
animation = fadeOut, 1, 5, linear
|
|
||||||
animation = inputFieldDots, 1, 2, linear
|
|
||||||
}
|
|
||||||
|
|
||||||
background {
|
|
||||||
monitor =
|
|
||||||
path = screenshot
|
|
||||||
blur_passes = 3
|
|
||||||
}
|
|
||||||
|
|
||||||
input-field {
|
|
||||||
monitor =
|
|
||||||
size = 20%, 5%
|
|
||||||
outline_thickness = 3
|
|
||||||
inner_color = rgba(0, 0, 0, 0.0) # no fill
|
|
||||||
|
|
||||||
outer_color = rgba(33ccffee) rgba(00ff99ee) 45deg
|
|
||||||
check_color = rgba(00ff99ee) rgba(ff6633ee) 120deg
|
|
||||||
fail_color = rgba(ff6633ee) rgba(ff0066ee) 40deg
|
|
||||||
|
|
||||||
font_color = rgb(143, 143, 143)
|
|
||||||
fade_on_empty = false
|
|
||||||
rounding = 15
|
|
||||||
|
|
||||||
font_family = $font
|
|
||||||
placeholder_text = Input password...
|
|
||||||
fail_text = $PAMFAIL
|
|
||||||
|
|
||||||
# uncomment to use a letter instead of a dot to indicate the typed password
|
|
||||||
# dots_text_format = *
|
|
||||||
# dots_size = 0.4
|
|
||||||
dots_spacing = 0.3
|
|
||||||
|
|
||||||
# uncomment to use an input indicator that does not show the password length (similar to swaylock's input indicator)
|
|
||||||
# hide_input = true
|
|
||||||
|
|
||||||
position = 0, -20
|
|
||||||
halign = center
|
|
||||||
valign = center
|
|
||||||
}
|
|
||||||
|
|
||||||
# TIME
|
|
||||||
label {
|
|
||||||
monitor =
|
|
||||||
text = $TIME # ref. https://wiki.hyprland.org/Hypr-Ecosystem/hyprlock/#variable-substitution
|
|
||||||
font_size = 90
|
|
||||||
font_family = $font
|
|
||||||
|
|
||||||
position = -30, 0
|
|
||||||
halign = right
|
|
||||||
valign = top
|
|
||||||
}
|
|
||||||
|
|
||||||
# DATE
|
|
||||||
label {
|
|
||||||
monitor =
|
|
||||||
text = cmd[update:60000] date +"%A, %d %B %Y" # update every 60 seconds
|
|
||||||
font_size = 25
|
|
||||||
font_family = $font
|
|
||||||
|
|
||||||
position = -30, -150
|
|
||||||
halign = right
|
|
||||||
valign = top
|
|
||||||
}
|
|
||||||
|
|
||||||
label {
|
|
||||||
monitor =
|
|
||||||
text = $LAYOUT[en,ru]
|
|
||||||
font_size = 24
|
|
||||||
onclick = hyprctl switchxkblayout all next
|
|
||||||
|
|
||||||
position = 250, -20
|
|
||||||
halign = center
|
|
||||||
valign = center
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
|
||||||
|
-- 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", os.getenv("THEME_GTK") or "Adwaita:dark")
|
||||||
|
hl.env("QT_WAYLAND_DISABLE_WINDOWDECORATION", "1")
|
||||||
|
hl.env("QT_QPA_PLATFORMTHEME", "kde")
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
|
||||||
|
|
||||||
|
-- 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,
|
||||||
|
})
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
-- keybind_registry.lua — wrap hl.bind so every keybind records a runnable
|
||||||
|
-- action alongside its chord/description.
|
||||||
|
--
|
||||||
|
-- Hyprland's Lua API registers binds through hl.bind(keys, dispatcher, opts),
|
||||||
|
-- and `hyprctl binds -j` reports those as `dispatcher: "__lua"` with an opaque
|
||||||
|
-- registry reference — the underlying command is not recoverable from the
|
||||||
|
-- compositor afterwards. This module captures the action at registration time:
|
||||||
|
--
|
||||||
|
-- exec(cmd) -> a tagged placeholder for the exec_cmd dispatcher (the final
|
||||||
|
-- command string is resolved here, so concatenations like
|
||||||
|
-- "hyprshot ... " .. var.screenshot_folder work automatically)
|
||||||
|
-- bind(...) -> same signature/behavior as hl.bind; converts the exec
|
||||||
|
-- placeholder back into a real dispatcher and records the row
|
||||||
|
-- write(path)-> dump the registry as "keys\x1fdescription\x1fcmd" TSV so the
|
||||||
|
-- show-keybinds picker can execute the selected entry
|
||||||
|
--
|
||||||
|
-- Pure dispatcher binds (hl.dsp.window.close(), hl.dsp.focus(...), ...) pass
|
||||||
|
-- through unchanged and are recorded with an empty cmd (informational only).
|
||||||
|
|
||||||
|
local registry = {}
|
||||||
|
|
||||||
|
local M = {}
|
||||||
|
|
||||||
|
--- Tag a shell command so bind() knows to turn it into an exec_cmd dispatcher.
|
||||||
|
function M.exec(cmd)
|
||||||
|
return { __cmd = cmd }
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Register a keybind like hl.bind, but record it in the registry first.
|
||||||
|
--- @param keys string final key string (e.g. "SUPER + Q")
|
||||||
|
--- @param action any M.exec(cmd) or a real dispatcher from hl.dsp.*
|
||||||
|
--- @param opts? table hl.bind options (description, flags, ...)
|
||||||
|
function M.bind(keys, action, opts)
|
||||||
|
opts = opts or {}
|
||||||
|
local dsp = action
|
||||||
|
local cmd = ""
|
||||||
|
if type(action) == "table" and action.__cmd ~= nil then
|
||||||
|
cmd = action.__cmd
|
||||||
|
dsp = hl.dsp.exec_cmd(cmd)
|
||||||
|
end
|
||||||
|
table.insert(registry, { keys = keys, description = opts.description or "", cmd = cmd })
|
||||||
|
return hl.bind(keys, dsp, opts)
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Dump the registry as "keys\x1fdescription\x1fcmd" lines (one per bind).
|
||||||
|
function M.write(path)
|
||||||
|
local f, err = io.open(path, "w")
|
||||||
|
if not f then
|
||||||
|
return nil, err
|
||||||
|
end
|
||||||
|
for _, b in ipairs(registry) do
|
||||||
|
f:write(b.keys, "\x1f", b.description, "\x1f", b.cmd, "\n")
|
||||||
|
end
|
||||||
|
f:close()
|
||||||
|
return registry
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Access the raw registry rows ({keys, description, cmd}).
|
||||||
|
function M.get()
|
||||||
|
return registry
|
||||||
|
end
|
||||||
|
|
||||||
|
return M
|
||||||
@@ -0,0 +1,248 @@
|
|||||||
|
local var = require("modules.variables")
|
||||||
|
local command = require("modules.shell_commands")
|
||||||
|
local env = require("env")
|
||||||
|
-- bind/exec wrap hl.bind so each keybind also records a runnable command for
|
||||||
|
-- the show-keybinds picker (see modules/keybind_registry.lua).
|
||||||
|
local reg = require("modules.keybind_registry")
|
||||||
|
local bind = reg.bind
|
||||||
|
local exec = reg.exec
|
||||||
|
-- See https://wiki.hypr.land/Configuring/Keywords/
|
||||||
|
|
||||||
|
-- Example binds, see https://wiki.hypr.land/Configuring/Binds/ for more
|
||||||
|
bind(var.mainMod .. " + RETURN", exec(var.terminal), { description = "Open terminal" })
|
||||||
|
bind(var.mainMod .. " + ALT + RETURN", exec(var.terminal_tmux), { description = "Open tmux in terminal" })
|
||||||
|
bind(var.mainMod .. " + Q", hl.dsp.window.close(), { description = "Close focused window" })
|
||||||
|
bind(
|
||||||
|
var.mainMod .. " + ESCAPE",
|
||||||
|
exec(command.session),
|
||||||
|
{ description = "Session menu (logout/reboot/shutdown)" }
|
||||||
|
)
|
||||||
|
bind(var.mainMod .. " + SHIFT + ESCAPE", exec(command.logout), { description = "Session: logout" })
|
||||||
|
bind(var.mainMod .. " + CTRL + ESCAPE", exec(command.shutdown), { description = "Session: power off" })
|
||||||
|
bind(var.mainMod .. " + ALT + ESCAPE", exec(command.reboot), { description = "Session: reboot" })
|
||||||
|
bind(var.mainMod .. " + E", exec(var.fileManager), { description = "Open file manager" })
|
||||||
|
bind(var.mainMod .. " + V", hl.dsp.window.float({ action = "toggle" }), { description = "Floating window toggle" })
|
||||||
|
bind(var.mainMod .. " + SPACE", exec(command.menu), { description = "Open app launcher" })
|
||||||
|
bind(var.mainMod .. " + P", hl.dsp.window.pseudo(), { description = "Pseudo-tiling toggle" })
|
||||||
|
bind(var.mainMod .. " + SHIFT + J", hl.dsp.layout("togglesplit"), { description = "Split layout toggle" })
|
||||||
|
bind(var.mainMod .. " + I", exec(var.internet_explorer), { description = "Open internet explorer" })
|
||||||
|
bind(var.mainMod .. " + n", exec("nm-connection-editor"), { description = "Open network manager" })
|
||||||
|
bind(var.mainMod .. " + comma", exec(command.settings), { description = "Open settings" })
|
||||||
|
bind(var.mainMod .. " + S", exec(command.control_center), { description = "Open start menu" })
|
||||||
|
bind(var.mainMod .. " + ALT + H", exec("hyprmod"), {description = "Open hyprmod (hyprland config GUI)"})
|
||||||
|
bind(var.mainMod .. " + period", exec(command.emoji), { description = "Open emoji picker" })
|
||||||
|
bind(var.mainMod .. " + ALT + S", exec(var.systemmonitor), {description = "Open systemmonitor"})
|
||||||
|
|
||||||
|
bind(var.mainMod .. " + TAB", function()
|
||||||
|
hl.plugin.hyprtasking.toggle("cursor")
|
||||||
|
end, { description = "Workspace: overview" })
|
||||||
|
|
||||||
|
-- Move focus with mainMod or Vim-style
|
||||||
|
bind(var.mainMod .. " + CTRL + h", hl.dsp.focus({ direction = "left" }), { description = "Window: focus left" })
|
||||||
|
bind(var.mainMod .. " + CTRL + l", hl.dsp.focus({ direction = "right" }), { description = "Window: focus right" })
|
||||||
|
bind(var.mainMod .. " + CTRL + k", hl.dsp.focus({ direction = "up" }), { description = "Window: focus up" })
|
||||||
|
bind(var.mainMod .. " + CTRL + j", hl.dsp.focus({ direction = "down" }), { description = "Window: focus down" })
|
||||||
|
|
||||||
|
-- Move windows with mainMod or Vim-style
|
||||||
|
bind(var.mainMod .. " + SHIFT + h", hl.dsp.window.move({ direction = "left" }), { description = "Window: move left" })
|
||||||
|
bind(
|
||||||
|
var.mainMod .. " + SHIFT + l",
|
||||||
|
hl.dsp.window.move({ direction = "right" }),
|
||||||
|
{ description = "Window: move right" }
|
||||||
|
)
|
||||||
|
bind(var.mainMod .. " + SHIFT + k", hl.dsp.window.move({ direction = "up" }), { description = "Window: move up" })
|
||||||
|
bind(var.mainMod .. " + SHIFT + j", hl.dsp.window.move({ direction = "down" }), { description = "Window: move down" })
|
||||||
|
|
||||||
|
-- Resize focused window with mainMod + Arrows
|
||||||
|
bind(
|
||||||
|
var.mainMod .. " + left",
|
||||||
|
hl.dsp.window.resize({ x = -10, y = 0, relative = true }),
|
||||||
|
{ description = "Window: resize left" }
|
||||||
|
)
|
||||||
|
bind(
|
||||||
|
var.mainMod .. " + right",
|
||||||
|
hl.dsp.window.resize({ x = 10, y = 0, relative = true }),
|
||||||
|
{ description = "Window: resize right" }
|
||||||
|
)
|
||||||
|
bind(
|
||||||
|
var.mainMod .. " + up",
|
||||||
|
hl.dsp.window.resize({ x = 0, y = -10, relative = true }),
|
||||||
|
{ description = "Window: resize up" }
|
||||||
|
)
|
||||||
|
bind(
|
||||||
|
var.mainMod .. " + down",
|
||||||
|
hl.dsp.window.resize({ x = 0, y = 10, relative = true }),
|
||||||
|
{ description = "Window: resize down" }
|
||||||
|
)
|
||||||
|
|
||||||
|
-- Switch workspaces with mainMod + [0-9]
|
||||||
|
bind(var.mainMod .. " + 1", hl.dsp.focus({ workspace = 1 }), { description = "Workspace: switch to 1" })
|
||||||
|
bind(var.mainMod .. " + 2", hl.dsp.focus({ workspace = 2 }), { description = "Workspace: Switch to 2" })
|
||||||
|
bind(var.mainMod .. " + 3", hl.dsp.focus({ workspace = 3 }), { description = "Workspace: Switch to 3" })
|
||||||
|
bind(var.mainMod .. " + 4", hl.dsp.focus({ workspace = 4 }), { description = "Workspace: Switch to 4" })
|
||||||
|
bind(var.mainMod .. " + 5", hl.dsp.focus({ workspace = 5 }), { description = "Workspace: Switch to 5" })
|
||||||
|
bind(var.mainMod .. " + 6", hl.dsp.focus({ workspace = 6 }), { description = "Workspace: Switch to 6" })
|
||||||
|
bind(var.mainMod .. " + 7", hl.dsp.focus({ workspace = 7 }), { description = "Workspace: Switch to 7" })
|
||||||
|
bind(var.mainMod .. " + 8", hl.dsp.focus({ workspace = 8 }), { description = "Workspace: Switch to 8" })
|
||||||
|
bind(var.mainMod .. " + 9", hl.dsp.focus({ workspace = 9 }), { description = "Workspace: Switch to 9" })
|
||||||
|
bind(var.mainMod .. " + 0", hl.dsp.focus({ workspace = 10 }), { description = "Workspace: Switch to 10" })
|
||||||
|
|
||||||
|
-- Move active window to a workspace with mainMod + SHIFT + [0-9]
|
||||||
|
bind(
|
||||||
|
var.mainMod .. " + SHIFT + 1",
|
||||||
|
hl.dsp.window.move({ workspace = 1 }),
|
||||||
|
{ description = "Window: move to workspace 1" }
|
||||||
|
)
|
||||||
|
bind(
|
||||||
|
var.mainMod .. " + SHIFT + 2",
|
||||||
|
hl.dsp.window.move({ workspace = 2 }),
|
||||||
|
{ description = "Window: move to workspace 2" }
|
||||||
|
)
|
||||||
|
bind(
|
||||||
|
var.mainMod .. " + SHIFT + 3",
|
||||||
|
hl.dsp.window.move({ workspace = 3 }),
|
||||||
|
{ description = "Window: move to workspace 3" }
|
||||||
|
)
|
||||||
|
bind(
|
||||||
|
var.mainMod .. " + SHIFT + 4",
|
||||||
|
hl.dsp.window.move({ workspace = 4 }),
|
||||||
|
{ description = "Window: move to workspace 4" }
|
||||||
|
)
|
||||||
|
bind(
|
||||||
|
var.mainMod .. " + SHIFT + 5",
|
||||||
|
hl.dsp.window.move({ workspace = 5 }),
|
||||||
|
{ description = "Window: move to workspace 5" }
|
||||||
|
)
|
||||||
|
bind(
|
||||||
|
var.mainMod .. " + SHIFT + 6",
|
||||||
|
hl.dsp.window.move({ workspace = 6 }),
|
||||||
|
{ description = "Window: move to workspace 6" }
|
||||||
|
)
|
||||||
|
bind(
|
||||||
|
var.mainMod .. " + SHIFT + 7",
|
||||||
|
hl.dsp.window.move({ workspace = 7 }),
|
||||||
|
{ description = "Window: move to workspace 7" }
|
||||||
|
)
|
||||||
|
bind(
|
||||||
|
var.mainMod .. " + SHIFT + 8",
|
||||||
|
hl.dsp.window.move({ workspace = 8 }),
|
||||||
|
{ description = "Window: move to workspace 8" }
|
||||||
|
)
|
||||||
|
bind(
|
||||||
|
var.mainMod .. " + SHIFT + 9",
|
||||||
|
hl.dsp.window.move({ workspace = 9 }),
|
||||||
|
{ description = "Window: move to workspace 9" }
|
||||||
|
)
|
||||||
|
bind(
|
||||||
|
var.mainMod .. " + SHIFT + 0",
|
||||||
|
hl.dsp.window.move({ workspace = 10 }),
|
||||||
|
{ description = "Window: move to 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
|
||||||
|
bind(
|
||||||
|
var.mainMod .. " + mouse_down",
|
||||||
|
hl.dsp.focus({ workspace = "e+1" }),
|
||||||
|
{ description = "Workspace: next (scroll down)" }
|
||||||
|
)
|
||||||
|
bind(
|
||||||
|
var.mainMod .. " + mouse_up",
|
||||||
|
hl.dsp.focus({ workspace = "e-1" }),
|
||||||
|
{ description = "Workspace: previous (scroll up)" }
|
||||||
|
)
|
||||||
|
|
||||||
|
-- Move/resize windows with mainMod + LMB/RMB and dragging
|
||||||
|
bind(var.mainMod .. " + mouse:272", hl.dsp.window.drag(), {
|
||||||
|
mouse = true,
|
||||||
|
description = "Window: move with mouse",
|
||||||
|
})
|
||||||
|
bind(var.mainMod .. " + mouse:273", hl.dsp.window.resize(), {
|
||||||
|
mouse = true,
|
||||||
|
description = "Window: resize with mouse",
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Laptop multimedia keys for volume and LCD brightness
|
||||||
|
bind("XF86AudioRaiseVolume", exec("wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+"), {
|
||||||
|
repeating = true,
|
||||||
|
locked = true,
|
||||||
|
description = "Media: volume up (repeat)",
|
||||||
|
})
|
||||||
|
bind("XF86AudioLowerVolume", exec("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"), {
|
||||||
|
repeating = true,
|
||||||
|
locked = true,
|
||||||
|
description = "Media: volume down (repeat)",
|
||||||
|
})
|
||||||
|
bind("XF86AudioMute", exec("wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"), {
|
||||||
|
repeating = true,
|
||||||
|
locked = true,
|
||||||
|
description = "Media: mute audio",
|
||||||
|
})
|
||||||
|
bind("XF86AudioMicMute", exec("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"), {
|
||||||
|
repeating = true,
|
||||||
|
locked = true,
|
||||||
|
description = "Media: mute microphone",
|
||||||
|
})
|
||||||
|
bind("XF86MonBrightnessUp", exec("brightnessctl -e4 -n2 set 5%+"), {
|
||||||
|
repeating = true,
|
||||||
|
locked = true,
|
||||||
|
description = "Brightness up",
|
||||||
|
})
|
||||||
|
bind("XF86MonBrightnessDown", exec("brightnessctl -e4 -n2 set 5%-"), {
|
||||||
|
repeating = true,
|
||||||
|
locked = true,
|
||||||
|
description = "Brightness down",
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Requires playerctl
|
||||||
|
bind("XF86AudioNext", exec("playerctl next"), {
|
||||||
|
locked = true,
|
||||||
|
description = "Media: next track",
|
||||||
|
})
|
||||||
|
bind("XF86AudioPause", exec("playerctl play-pause"), {
|
||||||
|
locked = true,
|
||||||
|
description = "Media: play/pause",
|
||||||
|
})
|
||||||
|
bind("XF86AudioPlay", exec("playerctl play-pause"), {
|
||||||
|
locked = true,
|
||||||
|
description = "Media: play/pause",
|
||||||
|
})
|
||||||
|
bind("XF86AudioPrev", exec("playerctl previous"), {
|
||||||
|
locked = true,
|
||||||
|
description = "Media: previous track",
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Screenshots
|
||||||
|
bind("PRINT", exec("hyprshot -m region --output-folder " .. var.screenshot_folder), {
|
||||||
|
locked = true,
|
||||||
|
description = "Screenshot region",
|
||||||
|
})
|
||||||
|
bind("CTRL + PRINT", exec("hyprshot -m window --output-folder " .. var.screenshot_folder), {
|
||||||
|
locked = true,
|
||||||
|
description = "Screenshot window",
|
||||||
|
})
|
||||||
|
bind("SHIFT + PRINT", exec("hyprshot -m active --output-folder " .. var.screenshot_folder), {
|
||||||
|
locked = true,
|
||||||
|
description = "Screenshot active monitor",
|
||||||
|
})
|
||||||
|
|
||||||
|
bind(var.mainMod .. " + L", exec(command.lock), { locked = true, description = "Lock screen" })
|
||||||
|
bind(var.mainMod .. " + K", exec(command.keybinds_show), { description = "Keybinds: show overview" })
|
||||||
|
bind(var.mainMod .. " + W", exec(command.wallpaper_select), { description = "Wallpaper select" })
|
||||||
|
|
||||||
|
-- Caelestia extras
|
||||||
|
if env.shell == "caelestia" then
|
||||||
|
bind(var.mainMod .. " + SHIFT + V", exec(command.clipboard), { description = "Clipboard history" })
|
||||||
|
bind(var.mainMod .. " + SHIFT + K", exec(command.show_all), { description = "Toggle utilities" })
|
||||||
|
bind("CTRL + ALT + C", exec(command.clear_notifications), { description = "Clear notifications" })
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Persist the registry for the show-keybinds picker
|
||||||
|
-- (scripts/show-keybinds.sh reads this TSV to resolve selected commands).
|
||||||
|
-- Runs on every config load/reload, keeping the picker in sync with the binds.
|
||||||
|
reg.write("/tmp/hypr-keybinds.tsv")
|
||||||
@@ -0,0 +1,260 @@
|
|||||||
|
|
||||||
|
local var = require("modules.variables")
|
||||||
|
|
||||||
|
-- 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 = "slide",
|
||||||
|
})
|
||||||
|
hl.animation({
|
||||||
|
leaf = "workspacesIn",
|
||||||
|
enabled = true,
|
||||||
|
speed = 1.21,
|
||||||
|
bezier = "almostLinear",
|
||||||
|
style = "slide",
|
||||||
|
})
|
||||||
|
hl.animation({
|
||||||
|
leaf = "workspacesOut",
|
||||||
|
enabled = true,
|
||||||
|
speed = 1.94,
|
||||||
|
bezier = "almostLinear",
|
||||||
|
style = "slide",
|
||||||
|
})
|
||||||
|
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,
|
||||||
|
-- Both *_enables_dpms default to false, so a display left in DPMS-off
|
||||||
|
-- is unrecoverable without a TTY switch. A keypress should wake it.
|
||||||
|
key_press_enables_dpms = true,
|
||||||
|
},
|
||||||
|
})
|
||||||
@@ -1 +0,0 @@
|
|||||||
monitor=,preferred,auto,1.0
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
monitor=,preferred,auto,1.0
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
# 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
|
|
||||||
# }
|
|
||||||
|
|
||||||
monitor = DP-2, preferred, auto-left, 1.5
|
|
||||||
monitor = DP-3, preferred, auto-right, 1.0
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
-- 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,
|
|
||||||
})
|
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
|
||||||
|
|
||||||
|
-- Default
|
||||||
|
hl.monitor({
|
||||||
|
output = "",
|
||||||
|
disabled = false,
|
||||||
|
mode = "preferred",
|
||||||
|
position = "auto",
|
||||||
|
scale = 1.0,
|
||||||
|
})
|
||||||
|
|
||||||
|
-- -- Buntes Monster
|
||||||
|
-- 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,
|
||||||
|
-- })
|
||||||
|
|
||||||
|
-- -- Archtop
|
||||||
|
-- hl.monitor({
|
||||||
|
-- output = "",
|
||||||
|
-- disabled = false,
|
||||||
|
-- mode = "preferred",
|
||||||
|
-- position = "auto",
|
||||||
|
-- scale = 1.0,
|
||||||
|
-- })
|
||||||
|
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
local env = require("env")
|
||||||
|
|
||||||
|
local commands = {
|
||||||
|
session = "",
|
||||||
|
logout = "",
|
||||||
|
shutdown = "",
|
||||||
|
reboot = "",
|
||||||
|
menu = "",
|
||||||
|
settings = "",
|
||||||
|
control_center = "",
|
||||||
|
lock = "",
|
||||||
|
wallpaper_select = "",
|
||||||
|
keybinds_show = "sh ~/.config/hypr/scripts/show-keybinds.sh",
|
||||||
|
clipboard = "",
|
||||||
|
clipboard_delete = "",
|
||||||
|
emoji = "",
|
||||||
|
show_all = "",
|
||||||
|
clear_notifications = "",
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Noctalia
|
||||||
|
if env.shell == "noctalia" then
|
||||||
|
commands.session = "noctalia msg panel-toggle session"
|
||||||
|
commands.logout = "command -v noctalia >/dev/null 2>&1 && noctalia msg session logout || hyprctl dispatch exit"
|
||||||
|
commands.shutdown = "noctalia msg session shutdown"
|
||||||
|
commands.reboot = "noctalia msg session reboot"
|
||||||
|
commands.menu = "noctalia msg panel-toggle launcher"
|
||||||
|
commands.settings = "noctalia msg settings-toggle"
|
||||||
|
commands.control_center = "noctalia msg panel-toggle control-center"
|
||||||
|
commands.wallpaper_select = "noctalia msg panel-toggle wallpaper"
|
||||||
|
commands.lock = "noctalia msg session lock"
|
||||||
|
commands.emoji = "noctalia msg panel-toggle launcher '/emo '"
|
||||||
|
|
||||||
|
-- Caelesia
|
||||||
|
elseif env.shell == "caelestia" then
|
||||||
|
commands.session = "caelestia shell drawers toggle session"
|
||||||
|
commands.logout = "hyprctl dispatch exit"
|
||||||
|
commands.shutdown = "systemctl poweroff"
|
||||||
|
commands.reboot = "systemctl reboot"
|
||||||
|
commands.menu = "caelestia shell drawers toggle launcher"
|
||||||
|
commands.settings = "caelestia shell drawers toggle dashboard"
|
||||||
|
commands.control_center = "caelestia shell drawers toggle sidebar"
|
||||||
|
commands.wallpaper_select = 'caelestia shell drawers toggle launcher && sleep 0.1 && wtype ">wallpaper "'
|
||||||
|
commands.clipboard = "caelestia clipboard"
|
||||||
|
commands.clipboard_delete = "caelestia clipboard -d"
|
||||||
|
commands.emoji = "caelestia emoji -p"
|
||||||
|
commands.show_all = "caelestia shell drawers toggle utilities"
|
||||||
|
commands.clear_notifications = "caelestia shell notifs clear"
|
||||||
|
commands.lock = "caelestia shell lock lock"
|
||||||
|
end
|
||||||
|
|
||||||
|
return commands
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
|
||||||
|
local theme = dofile(os.getenv("HOME") .. "/.config/themes/current/theme.lua")
|
||||||
|
-- local var_color_active_border = theme.border_active
|
||||||
|
-- local var_color_inactive_border = theme.border_inactive
|
||||||
|
-- local var_color_decoration_shadow = theme.shadow
|
||||||
|
-- local var_mainMod = "SUPER"
|
||||||
|
-- local var_terminal = "kitty"
|
||||||
|
-- local var_fileManager = "dolphin"
|
||||||
|
-- local var_menu = "noctalia msg panel-toggle launcher"
|
||||||
|
-- local var_screenshot_folder = "~/Bilder/Screenshots/"
|
||||||
|
|
||||||
|
local terminal = "kitty"
|
||||||
|
|
||||||
|
return {
|
||||||
|
color_active_border = theme.border_active,
|
||||||
|
color_inactive_border = theme.border_inactive,
|
||||||
|
color_decoration_shadow = theme.shadow,
|
||||||
|
mainMod = "SUPER",
|
||||||
|
terminal = terminal,
|
||||||
|
terminal_tmux = terminal .. " -e tmux",
|
||||||
|
fileManager = terminal .. " -e yazi", -- "dolphin",
|
||||||
|
screenshot_folder = "~/Bilder/Screenshots/",
|
||||||
|
internet_explorer = "firefox",
|
||||||
|
systemmonitor = terminal .. " -e btop",
|
||||||
|
}
|
||||||
@@ -0,0 +1,115 @@
|
|||||||
|
-- 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 = "keybinds-float",
|
||||||
|
match = {
|
||||||
|
class = "keybinds",
|
||||||
|
},
|
||||||
|
float = true,
|
||||||
|
size = "900 700",
|
||||||
|
center = true,
|
||||||
|
dim_around = true,
|
||||||
|
})
|
||||||
|
hl.window_rule({
|
||||||
|
name = "opacity-kitty-dolphin",
|
||||||
|
match = {
|
||||||
|
class = ".*(kitty|dolphin).*",
|
||||||
|
},
|
||||||
|
opacity = "0.90 0.80",
|
||||||
|
})
|
||||||
|
hl.window_rule({
|
||||||
|
match = {
|
||||||
|
class = ".*keybinds.*",
|
||||||
|
},
|
||||||
|
opacity = "0.75 0.50",
|
||||||
|
})
|
||||||
|
-- Noctalia shell surfaces: blur bars/panels/dock/notifications and let
|
||||||
|
-- Noctalia run its own animations (no Hyprland layer animation on top).
|
||||||
|
hl.layer_rule({
|
||||||
|
name = "noctalia",
|
||||||
|
match = {
|
||||||
|
namespace = "^noctalia-(bar-.+|notification|dock|panel|attached-panel|osd|window-switcher)$",
|
||||||
|
},
|
||||||
|
no_anim = true,
|
||||||
|
ignore_alpha = 0.5,
|
||||||
|
blur = true,
|
||||||
|
blur_popups = true,
|
||||||
|
})
|
||||||
|
hl.layer_rule({
|
||||||
|
name = "caelestia",
|
||||||
|
match = {
|
||||||
|
namespace = "^caelestia-.*$",
|
||||||
|
},
|
||||||
|
no_anim = true,
|
||||||
|
ignore_alpha = 0.5,
|
||||||
|
blur = true,
|
||||||
|
blur_popups = true,
|
||||||
|
})
|
||||||
|
hl.window_rule({
|
||||||
|
name = "noctalia-settings",
|
||||||
|
match = {
|
||||||
|
class = "dev.noctalia.Noctalia",
|
||||||
|
},
|
||||||
|
float = true,
|
||||||
|
size = "1080 920",
|
||||||
|
})
|
||||||
|
hl.window_rule({
|
||||||
|
name = "no-rounding-fullscreen",
|
||||||
|
match = {
|
||||||
|
fullscreen = 1,
|
||||||
|
},
|
||||||
|
rounding = 0,
|
||||||
|
border_size = 0,
|
||||||
|
})
|
||||||
|
|
||||||
|
hl.window_rule({
|
||||||
|
name = "floating-windows",
|
||||||
|
float = true,
|
||||||
|
match = { class = "(imv|.*hyprmod|.*[Bb]itwarden.*|ktouch)" },
|
||||||
|
size = "1080 920",
|
||||||
|
})
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
|
||||||
|
-- Default
|
||||||
|
hl.monitor({
|
||||||
|
output = "",
|
||||||
|
disabled = false,
|
||||||
|
mode = "preferred",
|
||||||
|
position = "auto",
|
||||||
|
scale = 1.0,
|
||||||
|
})
|
||||||
|
|
||||||
|
-- -- Buntes Monster
|
||||||
|
-- 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,
|
||||||
|
-- })
|
||||||
|
|
||||||
|
-- -- Archtop
|
||||||
|
-- hl.monitor({
|
||||||
|
-- output = "",
|
||||||
|
-- disabled = false,
|
||||||
|
-- mode = "preferred",
|
||||||
|
-- position = "auto",
|
||||||
|
-- scale = 1.0,
|
||||||
|
-- })
|
||||||
|
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
-- Generated by Noctalia
|
||||||
|
|
||||||
|
local primary = "rgb(cba6f7)"
|
||||||
|
local surface = "rgb(1e1e2e)"
|
||||||
|
local on_surface = "rgb(cdd6f4)"
|
||||||
|
local secondary = "rgb(fab387)"
|
||||||
|
local on_secondary = "rgb(11111b)"
|
||||||
|
local error = "rgb(f38ba8)"
|
||||||
|
local on_error = "rgb(11111b)"
|
||||||
|
|
||||||
|
local function apply_theme()
|
||||||
|
hl.config({
|
||||||
|
general = {
|
||||||
|
col = {
|
||||||
|
active_border = primary,
|
||||||
|
inactive_border = surface,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
group = {
|
||||||
|
col = {
|
||||||
|
border_active = secondary,
|
||||||
|
border_inactive = surface,
|
||||||
|
border_locked_active = error,
|
||||||
|
border_locked_inactive = surface,
|
||||||
|
},
|
||||||
|
|
||||||
|
groupbar = {
|
||||||
|
col = {
|
||||||
|
active = secondary,
|
||||||
|
inactive = surface,
|
||||||
|
locked_active = error,
|
||||||
|
locked_inactive = surface,
|
||||||
|
},
|
||||||
|
text_color = on_secondary,
|
||||||
|
text_color_inactive = on_surface,
|
||||||
|
text_color_locked_active = on_error,
|
||||||
|
text_color_locked_inactive = on_surface,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
return {
|
||||||
|
colors = {
|
||||||
|
primary = primary,
|
||||||
|
surface = surface,
|
||||||
|
on_surface = on_surface,
|
||||||
|
secondary = secondary,
|
||||||
|
on_secondary = on_secondary,
|
||||||
|
error = error,
|
||||||
|
on_error = on_error,
|
||||||
|
},
|
||||||
|
apply_theme = apply_theme
|
||||||
|
}
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
#!/usr/bin/env sh
|
|
||||||
|
|
||||||
|
|
||||||
set -eu # Exit immediately if a command exits with a non-zero status, and treat unset variables as an error.
|
|
||||||
|
|
||||||
CONF_SOURCE="$HOME/.config/hypr/env.conf.template"
|
|
||||||
CONF_TARGET="$HOME/.config/hypr/env.conf"
|
|
||||||
SH_SOURCE="$HOME/.config/hypr/env.sh.template"
|
|
||||||
SH_TARGET="$HOME/.config/hypr/env.sh"
|
|
||||||
|
|
||||||
|
|
||||||
if [ ! -f "$CONF_TARGET" ]; then
|
|
||||||
cp "$CONF_SOURCE" "$CONF_TARGET"
|
|
||||||
echo "Created $CONF_TARGET from template $CONF_SOURCE"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f "$SH_TARGET" ]; then
|
|
||||||
cp "$SH_SOURCE" "$SH_TARGET"
|
|
||||||
echo "Created $SH_TARGET from template $SH_SOURCE"
|
|
||||||
fi
|
|
||||||
Executable
+162
@@ -0,0 +1,162 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# show-keybinds.sh — fuzzy, executable keybind picker.
|
||||||
|
#
|
||||||
|
# SUPER+K opens a floating kitty (class `keybinds`, see
|
||||||
|
# windows_and_workspaces.lua) running fzf over the keybind list:
|
||||||
|
# - start typing immediately: the fzf prompt is focused on open
|
||||||
|
# - arrow keys browse the (filtered) list
|
||||||
|
# - Enter executes the selected entry's command, then the picker closes
|
||||||
|
# - Esc closes without action
|
||||||
|
#
|
||||||
|
# Display data is read live from `hyprctl binds -j`. The command behind each
|
||||||
|
# entry cannot come from hyprctl — Lua-registered binds report as opaque
|
||||||
|
# `__lua` dispatchers there — so modules/keybind_registry.lua records every
|
||||||
|
# command at bind time and writes /tmp/hypr-keybinds.tsv on config load
|
||||||
|
# ("keys\x1fdescription\x1fcmd" lines). Entries without a recorded command
|
||||||
|
# (pure dispatchers like window.close) are informational only: Enter closes.
|
||||||
|
#
|
||||||
|
# Usage: show-keybinds.sh [--print | --internal-pick FILE]
|
||||||
|
# --print print the formatted list to stdout (debug/testing)
|
||||||
|
# --internal-pick F run fzf over picker file F and execute the selection
|
||||||
|
# (spawned by the default mode inside the kitty window)
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
readonly SEP=$'\x1f'
|
||||||
|
# modmask bits reported by hyprctl (XKB modifiers), pairwise bit:name in
|
||||||
|
# display order. See https://wiki.hypr.land/Configuring/Binds/
|
||||||
|
readonly MOD_ORDER=(64 SUPER 8 ALT 4 CTRL 1 SHIFT 2 CAPS 16 MOD2 32 MOD3 128 MOD5)
|
||||||
|
readonly SIDECAR=/tmp/hypr-keybinds.tsv
|
||||||
|
|
||||||
|
# --internal-pick mode: runs INSIDE the floating kitty. fzf over the picker
|
||||||
|
# list (lines are "cmd\x1fdisplay"), then execute the chosen command and let
|
||||||
|
# the window close.
|
||||||
|
if [[ "${1:-}" == "--internal-pick" ]]; then
|
||||||
|
pick_file="${2:-}"
|
||||||
|
if [[ -z "$pick_file" || ! -s "$pick_file" ]]; then
|
||||||
|
echo "show-keybinds: --internal-pick needs an existing picker list file" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
# `|| rc=$?` keeps `set -e` from aborting before cleanup when fzf is
|
||||||
|
# cancelled (e.g. Esc) or filters to no match.
|
||||||
|
rc=0
|
||||||
|
sel="$(fzf --delimiter "$SEP" --with-nth 2.. --cycle --info=inline \
|
||||||
|
--prompt 'keybinds> ' --header 'type to filter · Enter executes · Esc closes' \
|
||||||
|
<"$pick_file")" || rc=$?
|
||||||
|
rm -f "$pick_file"
|
||||||
|
if ((rc != 0)) || [[ -z "$sel" ]]; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
cmd="${sel%%"$SEP"*}"
|
||||||
|
if [[ -n "$cmd" ]]; then
|
||||||
|
# Detach into its own session so the command outlives the picker
|
||||||
|
# window (kitty/pty teardown would otherwise signal its process group).
|
||||||
|
setsid -f sh -c "$cmd" >/dev/null 2>&1 </dev/null
|
||||||
|
fi
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Gather rows: prefer the sidecar (has commands); fall back to live `hyprctl
|
||||||
|
# binds -j` (display only, e.g. right after a fresh clone without a reload).
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
have_sidecar=0
|
||||||
|
if [[ -s "$SIDECAR" ]]; then
|
||||||
|
have_sidecar=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ((! have_sidecar)) && ! hyprctl binds -j >/dev/null 2>&1; then
|
||||||
|
echo "show-keybinds: nothing to show: no keybind registry ($SIDECAR) and no Hyprland session" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
rows=()
|
||||||
|
cmds=()
|
||||||
|
keys=()
|
||||||
|
|
||||||
|
if ((have_sidecar)); then
|
||||||
|
while IFS="$SEP" read -r key description cmd; do
|
||||||
|
key="${key//mouse:272/LMB}"
|
||||||
|
key="${key//mouse:273/RMB}"
|
||||||
|
if [[ -z "$description" ]]; then
|
||||||
|
description="(no description)"
|
||||||
|
fi
|
||||||
|
rows+=("$(printf '%-26s %s' "$key" "$description")")
|
||||||
|
cmds+=("$cmd")
|
||||||
|
keys+=("$key")
|
||||||
|
done <"$SIDECAR"
|
||||||
|
else
|
||||||
|
while IFS="$SEP" read -r modmask key description submap; do
|
||||||
|
case "$key" in
|
||||||
|
mouse:272) key="LMB" ;;
|
||||||
|
mouse:273) key="RMB" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
chord=""
|
||||||
|
# Rebuild "SUPER + SHIFT + Q" from the modmask bits.
|
||||||
|
i=0
|
||||||
|
while ((i < ${#MOD_ORDER[@]})); do
|
||||||
|
bit=${MOD_ORDER[i]}
|
||||||
|
name=${MOD_ORDER[i + 1]}
|
||||||
|
if ((modmask & bit)); then
|
||||||
|
chord+="${name} + "
|
||||||
|
fi
|
||||||
|
i=$((i + 2))
|
||||||
|
done
|
||||||
|
chord+="$key"
|
||||||
|
|
||||||
|
if [[ -n "$submap" ]]; then
|
||||||
|
chord="[$submap] $chord"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -n "$description" ]]; then
|
||||||
|
rows+=("$(printf '%-26s %s' "$chord" "$description")")
|
||||||
|
else
|
||||||
|
rows+=("$(printf '%-26s %s' "$chord" "(no description)")")
|
||||||
|
fi
|
||||||
|
cmds+=("")
|
||||||
|
keys+=("$chord")
|
||||||
|
done < <(hyprctl binds -j | jq -r '.[] | [(.modmask | tostring), .key, .description, .submap] | join("\u001f")')
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ((${#rows[@]} == 0)); then
|
||||||
|
echo "show-keybinds: no keybinds found." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Drop duplicate chords (e.g. media keys bound twice with different flags),
|
||||||
|
# keeping the first occurrence; carry the matching cmd along. Then sort by
|
||||||
|
# the display column A-Z.
|
||||||
|
declare -A seen=()
|
||||||
|
lines=()
|
||||||
|
for i in "${!rows[@]}"; do
|
||||||
|
if [[ -z "${seen[${keys[$i]}]:-}" ]]; then
|
||||||
|
seen["${keys[$i]}"]=1
|
||||||
|
lines+=("${cmds[$i]}$SEP${rows[$i]}")
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
mapfile -t lines < <(printf '%s\n' "${lines[@]}" | LC_ALL=C sort -f -t "$SEP" -k2.29,2)
|
||||||
|
|
||||||
|
if [[ "${1:-}" == "--print" ]]; then
|
||||||
|
printf '%s\n' "${lines[@]}" | cut -d "$SEP" -f2-
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Default mode: floating kitty + fzf. Rows go through a temp file; the inner
|
||||||
|
# --internal-pick run removes it when done, stale leftovers get cleaned on the
|
||||||
|
# next invocation.
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
rm -f /tmp/keybinds.??????.list 2>/dev/null || true
|
||||||
|
list="$(mktemp /tmp/keybinds.XXXXXX.list)"
|
||||||
|
printf '%s\n' "${lines[@]}" >"$list"
|
||||||
|
|
||||||
|
if command -v kitty >/dev/null 2>&1; then
|
||||||
|
kitty --override font_size=16 --class keybinds --title Keybinds "$0" \
|
||||||
|
--internal-pick "$list"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# No kitty: fall back to a plain printout.
|
||||||
|
printf '%s\n' "${lines[@]}" | cut -d "$SEP" -f2-
|
||||||
|
rm -f "$list"
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
out_dir="$HOME/dotfiles/themes/.config/catppuccin/mocha.conf"
|
|
||||||
url="https://raw.githubusercontent.com/catppuccin/hyprland/main/themes/mocha.conf"
|
|
||||||
|
|
||||||
curl -o "$out_dir" "$url"
|
|
||||||
@@ -3,7 +3,8 @@ map ctrl+shift+c copy_to_clipboard
|
|||||||
map ctrl+shift+v paste_from_clipboard
|
map ctrl+shift+v paste_from_clipboard
|
||||||
copy_on_select yes
|
copy_on_select yes
|
||||||
|
|
||||||
# Coloer theme
|
# Color theme: central theme (basic/.config/themes). themes/mocha.conf is a
|
||||||
|
# symlink into the central palette — edit colors there, never here.
|
||||||
include themes/mocha.conf
|
include themes/mocha.conf
|
||||||
|
|
||||||
# Font
|
# Font
|
||||||
@@ -13,3 +14,4 @@ italic_font auto
|
|||||||
bold_italic_font auto
|
bold_italic_font auto
|
||||||
font_size 10.0
|
font_size 10.0
|
||||||
|
|
||||||
|
include themes/noctalia.conf
|
||||||
|
|||||||
@@ -1,6 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
out_dir="$HOME/dotfiles/themes/.config/themes/kitty/catppuccin/mocha.conf"
|
|
||||||
url="https://raw.githubusercontent.com/catppuccin/kitty/main/themes/mocha.conf"
|
|
||||||
|
|
||||||
curl -o "$out_dir" "$url"
|
|
||||||
@@ -1,84 +0,0 @@
|
|||||||
# vim:ft=kitty
|
|
||||||
|
|
||||||
## name: Catppuccin Kitty Mocha
|
|
||||||
## author: Catppuccin Org
|
|
||||||
## license: MIT
|
|
||||||
## upstream: https://github.com/catppuccin/kitty/blob/main/themes/mocha.conf
|
|
||||||
## blurb: Soothing pastel theme for the high-spirited!
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# The basic colors
|
|
||||||
foreground #cdd6f4
|
|
||||||
background #1e1e2e
|
|
||||||
selection_foreground #1e1e2e
|
|
||||||
selection_background #f5e0dc
|
|
||||||
|
|
||||||
# Cursor colors
|
|
||||||
cursor #f5e0dc
|
|
||||||
cursor_text_color #1e1e2e
|
|
||||||
|
|
||||||
# Scrollbar colors
|
|
||||||
scrollbar_handle_color #9399b2
|
|
||||||
scrollbar_track_color #45475a
|
|
||||||
|
|
||||||
# URL color when hovering with mouse
|
|
||||||
url_color #f5e0dc
|
|
||||||
|
|
||||||
# Kitty window border colors
|
|
||||||
active_border_color #b4befe
|
|
||||||
inactive_border_color #6c7086
|
|
||||||
bell_border_color #f9e2af
|
|
||||||
|
|
||||||
# OS Window titlebar colors
|
|
||||||
wayland_titlebar_color system
|
|
||||||
macos_titlebar_color system
|
|
||||||
|
|
||||||
# Tab bar colors
|
|
||||||
active_tab_foreground #11111b
|
|
||||||
active_tab_background #cba6f7
|
|
||||||
inactive_tab_foreground #cdd6f4
|
|
||||||
inactive_tab_background #181825
|
|
||||||
tab_bar_background #11111b
|
|
||||||
|
|
||||||
# Colors for marks (marked text in the terminal)
|
|
||||||
mark1_foreground #1e1e2e
|
|
||||||
mark1_background #b4befe
|
|
||||||
mark2_foreground #1e1e2e
|
|
||||||
mark2_background #cba6f7
|
|
||||||
mark3_foreground #1e1e2e
|
|
||||||
mark3_background #74c7ec
|
|
||||||
|
|
||||||
# The 16 terminal colors
|
|
||||||
|
|
||||||
# black
|
|
||||||
color0 #45475a
|
|
||||||
color8 #585b70
|
|
||||||
|
|
||||||
# red
|
|
||||||
color1 #f38ba8
|
|
||||||
color9 #f38ba8
|
|
||||||
|
|
||||||
# green
|
|
||||||
color2 #a6e3a1
|
|
||||||
color10 #a6e3a1
|
|
||||||
|
|
||||||
# yellow
|
|
||||||
color3 #f9e2af
|
|
||||||
color11 #f9e2af
|
|
||||||
|
|
||||||
# blue
|
|
||||||
color4 #89b4fa
|
|
||||||
color12 #89b4fa
|
|
||||||
|
|
||||||
# magenta
|
|
||||||
color5 #f5c2e7
|
|
||||||
color13 #f5c2e7
|
|
||||||
|
|
||||||
# cyan
|
|
||||||
color6 #94e2d5
|
|
||||||
color14 #94e2d5
|
|
||||||
|
|
||||||
# white
|
|
||||||
color7 #bac2de
|
|
||||||
color15 #a6adc8
|
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
../../../../basic/.config/themes/themes/catppuccin-mocha/kitty.conf
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
color0 #45475a
|
||||||
|
color1 #f38ba8
|
||||||
|
color2 #a6e3a1
|
||||||
|
color3 #f9e2af
|
||||||
|
color4 #89b4fa
|
||||||
|
color5 #f5c2e7
|
||||||
|
color6 #94e2d5
|
||||||
|
color7 #a6adc8
|
||||||
|
color8 #585b70
|
||||||
|
color9 #f37799
|
||||||
|
color10 #89d88b
|
||||||
|
color11 #ebd391
|
||||||
|
color12 #74a8fc
|
||||||
|
color13 #f2aede
|
||||||
|
color14 #6bd7ca
|
||||||
|
color15 #bac2de
|
||||||
|
|
||||||
|
cursor #f5e0dc
|
||||||
|
cursor_text_color #1e1e2e
|
||||||
|
background #1e1e2e
|
||||||
|
foreground #cdd6f4
|
||||||
|
selection_foreground #cdd6f4
|
||||||
|
selection_background #585b70
|
||||||
|
active_border_color #cba6f7
|
||||||
|
inactive_border_color #313244
|
||||||
|
url_color #cba6f7
|
||||||
|
|
||||||
|
active_tab_foreground #11111b
|
||||||
|
active_tab_background #cba6f7
|
||||||
|
inactive_tab_foreground #a3b4eb
|
||||||
|
inactive_tab_background #313244
|
||||||
|
cursor_trail_color #a3b4eb
|
||||||
@@ -0,0 +1,153 @@
|
|||||||
|
[bar.default]
|
||||||
|
background_opacity = 0.50999998860061169
|
||||||
|
capsule = true
|
||||||
|
center = [ "session", "launcher", "control-center", "wallpaper" ]
|
||||||
|
end = [
|
||||||
|
"tray",
|
||||||
|
"notifications",
|
||||||
|
"network",
|
||||||
|
"bluetooth",
|
||||||
|
"volume",
|
||||||
|
"brightness",
|
||||||
|
"temp",
|
||||||
|
"cpu",
|
||||||
|
"sysmon",
|
||||||
|
"battery",
|
||||||
|
"clock"
|
||||||
|
]
|
||||||
|
margin_ends = 0
|
||||||
|
panel_overlap = 0
|
||||||
|
position = "bottom"
|
||||||
|
radius = 0
|
||||||
|
start = [ "workspaces", "media" ]
|
||||||
|
thickness = 28
|
||||||
|
|
||||||
|
[desktop_widgets]
|
||||||
|
enabled = false
|
||||||
|
schema_version = 2
|
||||||
|
widget_order = []
|
||||||
|
|
||||||
|
[desktop_widgets.grid]
|
||||||
|
cell_size = 16
|
||||||
|
major_interval = 4
|
||||||
|
visible = true
|
||||||
|
|
||||||
|
[desktop_widgets.widget]
|
||||||
|
|
||||||
|
[dock]
|
||||||
|
background_opacity = 0.67999998480081558
|
||||||
|
|
||||||
|
[idle]
|
||||||
|
behavior_order = [ "backlight-dim", "kbd-off", "lock", "screen-off", "suspend" ]
|
||||||
|
|
||||||
|
[idle.behavior.backlight-dim]
|
||||||
|
action = "command"
|
||||||
|
command = "brightnessctl -s set 10"
|
||||||
|
enabled = true
|
||||||
|
resume_command = "brightnessctl -r"
|
||||||
|
timeout = 300.0
|
||||||
|
|
||||||
|
[idle.behavior.kbd-off]
|
||||||
|
action = "command"
|
||||||
|
command = "brightnessctl -sd rgb:kbd_backlight set 0"
|
||||||
|
enabled = true
|
||||||
|
resume_command = "brightnessctl -rd rgb:kbd_backlight"
|
||||||
|
timeout = 300.0
|
||||||
|
|
||||||
|
[idle.behavior.lock]
|
||||||
|
action = "lock"
|
||||||
|
enabled = true
|
||||||
|
timeout = 900.0
|
||||||
|
|
||||||
|
[idle.behavior.screen-off]
|
||||||
|
action = "screen_off"
|
||||||
|
enabled = false
|
||||||
|
timeout = 1800.0
|
||||||
|
|
||||||
|
[idle.behavior.suspend]
|
||||||
|
action = "lock_and_suspend"
|
||||||
|
enabled = true
|
||||||
|
timeout = 2700.0
|
||||||
|
|
||||||
|
[keybinds]
|
||||||
|
down = [ "Down", "Ctrl+j" ]
|
||||||
|
left = [ "Left", "Ctrl+h" ]
|
||||||
|
right = [ "Right", "Ctrl+l" ]
|
||||||
|
up = [ "Up", "Ctrl+k" ]
|
||||||
|
|
||||||
|
[location]
|
||||||
|
auto_locate = true
|
||||||
|
|
||||||
|
[lockscreen_widgets]
|
||||||
|
enabled = false
|
||||||
|
schema_version = 2
|
||||||
|
widget_order = [ "lockscreen-login-box@eDP-1" ]
|
||||||
|
|
||||||
|
[lockscreen_widgets.grid]
|
||||||
|
cell_size = 16
|
||||||
|
major_interval = 4
|
||||||
|
visible = true
|
||||||
|
|
||||||
|
[lockscreen_widgets.widget."lockscreen-login-box@eDP-1"]
|
||||||
|
box_height = 196.0
|
||||||
|
box_width = 810.0
|
||||||
|
cx = 960.0
|
||||||
|
cy = 898.0
|
||||||
|
output = "eDP-1"
|
||||||
|
placement_height = 1080.0
|
||||||
|
placement_width = 1920.0
|
||||||
|
rotation = 0.0
|
||||||
|
type = "login_box"
|
||||||
|
|
||||||
|
[lockscreen_widgets.widget."lockscreen-login-box@eDP-1".settings]
|
||||||
|
background_color = "surface_variant"
|
||||||
|
background_opacity = 0.88
|
||||||
|
background_radius = 12.0
|
||||||
|
center_password_text = false
|
||||||
|
input_opacity = 1.0
|
||||||
|
input_radius = 6.0
|
||||||
|
layout = "regular"
|
||||||
|
show_caps_lock = true
|
||||||
|
show_keyboard_layout = true
|
||||||
|
show_login_button = true
|
||||||
|
show_media = true
|
||||||
|
show_session_buttons = true
|
||||||
|
show_unlock_hint = true
|
||||||
|
show_weather = true
|
||||||
|
|
||||||
|
[shell]
|
||||||
|
font_family = "JetBrainsMono Nerd Font Mono"
|
||||||
|
telemetry_enabled = true
|
||||||
|
|
||||||
|
[shell.panel]
|
||||||
|
launcher_placement = "attached"
|
||||||
|
transparency_mode = "glass"
|
||||||
|
|
||||||
|
[theme]
|
||||||
|
builtin = "Catppuccin"
|
||||||
|
mode = "dark"
|
||||||
|
|
||||||
|
[theme.templates]
|
||||||
|
builtin_ids = [ "gtk3", "gtk4", "hyprland", "kitty" ]
|
||||||
|
enable_builtin_templates = true
|
||||||
|
|
||||||
|
[wallpaper]
|
||||||
|
directory = "/home/mathias/nextcloud/Photos/Wallpapers"
|
||||||
|
|
||||||
|
[wallpaper.default]
|
||||||
|
path = "/home/mathias/nextcloud/Photos/Wallpapers/eigen/20180318-4825-Teneriffa_LaPalma-2.jpg"
|
||||||
|
|
||||||
|
[wallpaper.last]
|
||||||
|
path = "/home/mathias/nextcloud/Photos/Wallpapers/eigen/20180318-4825-Teneriffa_LaPalma-2.jpg"
|
||||||
|
|
||||||
|
[wallpaper.monitors.eDP-1]
|
||||||
|
path = "/home/mathias/nextcloud/Photos/Wallpapers/eigen/20180318-4825-Teneriffa_LaPalma-2.jpg"
|
||||||
|
|
||||||
|
[widget.clock]
|
||||||
|
format = "{:%Y-%m-%d|%H:%M}"
|
||||||
|
|
||||||
|
[widget.network]
|
||||||
|
show_label = false
|
||||||
|
|
||||||
|
[widget.sysmon]
|
||||||
|
stat = "gpu_usage"
|
||||||
@@ -1,230 +0,0 @@
|
|||||||
// -*- mode: jsonc -*-
|
|
||||||
{
|
|
||||||
"custom/gpu": {
|
|
||||||
"format": "{text}",
|
|
||||||
"tooltip": false,
|
|
||||||
"exec": "~/.config/waybar/scripts/gpu-info.sh",
|
|
||||||
"exec-interval": 1,
|
|
||||||
"return-type": "json"
|
|
||||||
},
|
|
||||||
// "layer": "top", // Waybar at top layer
|
|
||||||
"position": "bottom", // Waybar position (top|bottom|left|right)
|
|
||||||
"height": 30, // Waybar height (to be removed for auto height)
|
|
||||||
// "width": 800, // Waybar width
|
|
||||||
"spacing": 4, // Gaps between modules (4px)
|
|
||||||
// Choose the order of the modules
|
|
||||||
"modules-left": [
|
|
||||||
"hyprland/workspaces"
|
|
||||||
//"hyprland/mode",
|
|
||||||
//"hyprland/scratchpad",
|
|
||||||
//"custom/media"
|
|
||||||
],
|
|
||||||
"modules-center": [
|
|
||||||
"hyprland/window"
|
|
||||||
],
|
|
||||||
"modules-right": [
|
|
||||||
"mpd",
|
|
||||||
"idle_inhibitor",
|
|
||||||
"pulseaudio",
|
|
||||||
//"network",
|
|
||||||
//"power-profiles-daemon",
|
|
||||||
"cpu",
|
|
||||||
"memory",
|
|
||||||
"temperature",
|
|
||||||
"backlight",
|
|
||||||
"keyboard-state",
|
|
||||||
//"hyprland/language",
|
|
||||||
"battery",
|
|
||||||
//"battery#bat2",
|
|
||||||
"custom/gpu",
|
|
||||||
"clock",
|
|
||||||
"tray",
|
|
||||||
"custom/power"
|
|
||||||
],
|
|
||||||
// Modules configuration
|
|
||||||
"hyprland/workspaces": {
|
|
||||||
"disable-scroll": true,
|
|
||||||
"all-outputs": true,
|
|
||||||
"warp-on-scroll": true,
|
|
||||||
"format": "{name}: {icon}",
|
|
||||||
"format-icons": {
|
|
||||||
// "1": "",
|
|
||||||
// "2": "",
|
|
||||||
// "3": "",
|
|
||||||
// "4": "",
|
|
||||||
// "5": "",
|
|
||||||
// "urgent": "",
|
|
||||||
"active": "",
|
|
||||||
"default": ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"keyboard-state": {
|
|
||||||
"numlock": true,
|
|
||||||
"capslock": true,
|
|
||||||
"format": "{name} {icon}",
|
|
||||||
"format-icons": {
|
|
||||||
"locked": "",
|
|
||||||
"unlocked": ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"hyprland/mode": {
|
|
||||||
"format": "<span style=\"italic\">{}</span>"
|
|
||||||
},
|
|
||||||
"hyprland/scratchpad": {
|
|
||||||
"format": "{icon} {count}",
|
|
||||||
"show-empty": false,
|
|
||||||
"format-icons": ["", ""],
|
|
||||||
"tooltip": true,
|
|
||||||
"tooltip-format": "{app}: {title}"
|
|
||||||
},
|
|
||||||
"mpd": {
|
|
||||||
"format": "{stateIcon} {consumeIcon}{randomIcon}{repeatIcon}{singleIcon}{artist} - {album} - {title} ({elapsedTime:%M:%S}/{totalTime:%M:%S}) ⸨{songPosition}|{queueLength}⸩ {volume}% ",
|
|
||||||
"format-disconnected": "Disconnected ",
|
|
||||||
"format-stopped": "{consumeIcon}{randomIcon}{repeatIcon}{singleIcon}Stopped ",
|
|
||||||
"unknown-tag": "N/A",
|
|
||||||
"interval": 5,
|
|
||||||
"consume-icons": {
|
|
||||||
"on": " "
|
|
||||||
},
|
|
||||||
"random-icons": {
|
|
||||||
"off": "<span color=\"#f53c3c\"></span> ",
|
|
||||||
"on": " "
|
|
||||||
},
|
|
||||||
"repeat-icons": {
|
|
||||||
"on": " "
|
|
||||||
},
|
|
||||||
"single-icons": {
|
|
||||||
"on": "1 "
|
|
||||||
},
|
|
||||||
"state-icons": {
|
|
||||||
"paused": "",
|
|
||||||
"playing": ""
|
|
||||||
},
|
|
||||||
"tooltip-format": "MPD (connected)",
|
|
||||||
"tooltip-format-disconnected": "MPD (disconnected)"
|
|
||||||
},
|
|
||||||
"idle_inhibitor": {
|
|
||||||
"format": "{icon}",
|
|
||||||
"format-icons": {
|
|
||||||
"activated": "",
|
|
||||||
"deactivated": ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"tray": {
|
|
||||||
// "icon-size": 21,
|
|
||||||
"spacing": 10//,
|
|
||||||
// "icons": {
|
|
||||||
// "blueman": "bluetooth",
|
|
||||||
// "TelegramDesktop": "$HOME/.local/share/icons/hicolor/16x16/apps/telegram.png"
|
|
||||||
// }
|
|
||||||
},
|
|
||||||
"clock": {
|
|
||||||
"format": "{:%Y-%m-%d %H:%M}",
|
|
||||||
"tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>",
|
|
||||||
"on-click": "~/.config/waybar/scripts/copy-date.sh"
|
|
||||||
//"format-alt": "{:%Y-%m-%d}"
|
|
||||||
},
|
|
||||||
"cpu": {
|
|
||||||
"interval": 1,
|
|
||||||
"format": "cpu:{usage:02}%@{avg_frequency:4.2f}MHz",
|
|
||||||
"tooltip": false
|
|
||||||
},
|
|
||||||
"memory": {
|
|
||||||
"interval": 1,
|
|
||||||
"format": "mem:{:02}%"
|
|
||||||
},
|
|
||||||
"temperature": {
|
|
||||||
// "thermal-zone": 2,
|
|
||||||
// "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input",
|
|
||||||
"critical-threshold": 80,
|
|
||||||
// "format-critical": "{temperatureC}°C {icon}",
|
|
||||||
"format": "{temperatureC}°C {icon}",
|
|
||||||
"format-icons": ["", "", ""]
|
|
||||||
},
|
|
||||||
"backlight": {
|
|
||||||
// "device": "acpi_video1",
|
|
||||||
"format": "{percent}% {icon}",
|
|
||||||
"format-icons": ["", "", "", "", "", "", "", "", ""]
|
|
||||||
},
|
|
||||||
"battery": {
|
|
||||||
"states": {
|
|
||||||
// "good": 95,
|
|
||||||
"warning": 30,
|
|
||||||
"critical": 15
|
|
||||||
},
|
|
||||||
"format": "{capacity}% {icon}",
|
|
||||||
"format-full": "{capacity}% {icon}",
|
|
||||||
"format-charging": "{capacity}% ",
|
|
||||||
"format-plugged": "{capacity}% ",
|
|
||||||
"format-alt": "{time} {icon}",
|
|
||||||
// "format-good": "", // An empty format will hide the module
|
|
||||||
// "format-full": "",
|
|
||||||
"format-icons": ["", "", "", "", ""]
|
|
||||||
},
|
|
||||||
"battery#bat2": {
|
|
||||||
"bat": "BAT2"
|
|
||||||
},
|
|
||||||
"power-profiles-daemon": {
|
|
||||||
"format": "{icon}",
|
|
||||||
"tooltip-format": "Power profile: {profile}\nDriver: {driver}",
|
|
||||||
"tooltip": true,
|
|
||||||
"format-icons": {
|
|
||||||
"default": "",
|
|
||||||
"performance": "",
|
|
||||||
"balanced": "",
|
|
||||||
"power-saver": ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"network": {
|
|
||||||
// "interface": "wlp2*", // (Optional) To force the use of this interface
|
|
||||||
"format-wifi": "{essid} ({signalStrength}%) ",
|
|
||||||
"format-ethernet": "{ipaddr}/{cidr} ",
|
|
||||||
"tooltip-format": "{ifname} via {gwaddr} ",
|
|
||||||
"format-linked": "{ifname} (No IP) ",
|
|
||||||
"format-disconnected": "Disconnected ⚠",
|
|
||||||
"format-alt": "{ifname}: {ipaddr}/{cidr}"
|
|
||||||
},
|
|
||||||
"pulseaudio": {
|
|
||||||
// "scroll-step": 1, // %, can be a float
|
|
||||||
"format": "{volume}% {icon} {format_source}",
|
|
||||||
"format-bluetooth": "{volume}% {icon} {format_source}",
|
|
||||||
"format-bluetooth-muted": " {icon} {format_source}",
|
|
||||||
"format-muted": " {format_source}",
|
|
||||||
"format-source": "{volume}% ",
|
|
||||||
"format-source-muted": "",
|
|
||||||
"format-icons": {
|
|
||||||
"headphone": "",
|
|
||||||
"hands-free": "",
|
|
||||||
"headset": "",
|
|
||||||
"phone": "",
|
|
||||||
"portable": "",
|
|
||||||
"car": "",
|
|
||||||
"default": ["", "", ""]
|
|
||||||
},
|
|
||||||
"on-click": "pavucontrol"
|
|
||||||
},
|
|
||||||
"custom/media": {
|
|
||||||
"format": "{icon} {text}",
|
|
||||||
"return-type": "json",
|
|
||||||
"max-length": 40,
|
|
||||||
"format-icons": {
|
|
||||||
"spotify": "",
|
|
||||||
"default": "🎜"
|
|
||||||
},
|
|
||||||
"escape": true,
|
|
||||||
"exec": "$HOME/.config/waybar/mediaplayer.py 2> /dev/null" // Script in resources folder
|
|
||||||
// "exec": "$HOME/.config/waybar/mediaplayer.py --player spotify 2> /dev/null" // Filter player based on name
|
|
||||||
},
|
|
||||||
"custom/power": {
|
|
||||||
"format" : "⏻ ",
|
|
||||||
"tooltip": false,
|
|
||||||
"menu": "on-click",
|
|
||||||
"menu-file": "$HOME/.config/waybar/power_menu.xml", // Menu file in resources folder
|
|
||||||
"menu-actions": {
|
|
||||||
"shutdown": "shutdown",
|
|
||||||
"reboot": "reboot",
|
|
||||||
"suspend": "systemctl suspend",
|
|
||||||
"hibernate": "systemctl hibernate"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
DATE=$(date +"%Y-%m-%d_%H%M")
|
|
||||||
echo -n "$DATE" | wl-copy
|
|
||||||
notify-send "Date copied" "$DATE"
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# GPU monitoring for waybar (AMD radeontop + sysfs temp)
|
|
||||||
|
|
||||||
GPU_DATA=$(timeout 1 radeontop -d - -l 1 2>/dev/null | tail -1)
|
|
||||||
|
|
||||||
if [ -z "$GPU_DATA" ]; then
|
|
||||||
echo "{\"text\": \"gpu:--\", \"tooltip\": \"Reading...\"}"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
GPU=$(echo "$GPU_DATA" | grep -oP 'gpu \K[0-9.]+' | head -1)
|
|
||||||
GPU_INT=${GPU%.*}
|
|
||||||
|
|
||||||
VRAM=$(echo "$GPU_DATA" | grep -oP 'vram [\d.]+% \K[\d.]+' | head -1)
|
|
||||||
VRAM_INT=${VRAM%.*}
|
|
||||||
|
|
||||||
SCLK=$(echo "$GPU_DATA" | grep -oP 'sclk [\d.]+% \K[\d.]+' | head -1)
|
|
||||||
MCLK=$(echo "$GPU_DATA" | grep -oP 'mclk [\d.]+% \K[\d.]+' | head -1)
|
|
||||||
|
|
||||||
TEMP=$(( $(cat /sys/class/hwmon/hwmon2/temp1_input) / 1000 ))
|
|
||||||
POWER=$(( $(cat /sys/class/hwmon/hwmon2/power1_average) / 1000 ))
|
|
||||||
|
|
||||||
echo "{\"text\": \"gpu:${GPU_INT}% ${VRAM_INT}MB ${TEMP}C\", \"tooltip\": \"GPU: ${GPU}%\\nVRAM: ${VRAM}MB\\nTemp: ${TEMP}C\\nPower: ${POWER}W\\nSCLK: ${SCLK}GHz\\nMCLK: ${MCLK}GHz\"}"
|
|
||||||
@@ -1,236 +0,0 @@
|
|||||||
/* -------------------------------------------------
|
|
||||||
Calm Glass (Hyprland / Waybar) — GTK CSS safe
|
|
||||||
-------------------------------------------------- */
|
|
||||||
|
|
||||||
* {
|
|
||||||
font-family: "JetBrainsMono Nerd Font", FontAwesome, sans-serif;
|
|
||||||
font-size: 13px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------- GTK Color Definitions ---------- */
|
|
||||||
@define-color fg rgba(235, 238, 242, 0.92);
|
|
||||||
@define-color fg-dim rgba(235, 238, 242, 0.72);
|
|
||||||
@define-color fg-muted rgba(235, 238, 242, 0.55);
|
|
||||||
|
|
||||||
@define-color glass rgba(18, 22, 30, 0.55);
|
|
||||||
@define-color glass_2 rgba(18, 22, 30, 0.32);
|
|
||||||
@define-color glass_3 rgba(18, 22, 30, 0.22);
|
|
||||||
|
|
||||||
@define-color stroke rgba(255, 255, 255, 0.12);
|
|
||||||
@define-color stroke_2 rgba(255, 255, 255, 0.07);
|
|
||||||
|
|
||||||
/* ---------- Waybar Container ---------- */
|
|
||||||
window#waybar {
|
|
||||||
background-color: @glass;
|
|
||||||
color: @fg;
|
|
||||||
border-bottom: 1px solid @stroke;
|
|
||||||
box-shadow: 0 10px 30px rgba(0,0,0,0.30);
|
|
||||||
|
|
||||||
transition-property: background-color, opacity;
|
|
||||||
transition-duration: .5s;
|
|
||||||
}
|
|
||||||
|
|
||||||
window#waybar.hidden {
|
|
||||||
opacity: 0.35;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------- Buttons / Workspaces ---------- */
|
|
||||||
button {
|
|
||||||
box-shadow: inset 0 -2px transparent;
|
|
||||||
border: none;
|
|
||||||
border-radius: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
button:hover {
|
|
||||||
background: inherit;
|
|
||||||
box-shadow: inset 0 -2px rgba(255,255,255,0.18);
|
|
||||||
}
|
|
||||||
|
|
||||||
#workspaces button {
|
|
||||||
padding: 0 8px;
|
|
||||||
margin: 4px 3px;
|
|
||||||
background-color: rgba(255,255,255,0.04);
|
|
||||||
color: @fg-dim;
|
|
||||||
border: 1px solid rgba(255,255,255,0.06);
|
|
||||||
border-radius: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#workspaces button:hover {
|
|
||||||
background: rgba(255,255,255,0.07);
|
|
||||||
color: @fg;
|
|
||||||
}
|
|
||||||
|
|
||||||
#workspaces button.focused,
|
|
||||||
#workspaces button.active {
|
|
||||||
background-color: rgba(255,255,255,0.10);
|
|
||||||
color: @fg;
|
|
||||||
border: 1px solid rgba(255,255,255,0.12);
|
|
||||||
box-shadow: inset 0 -2px rgba(255,255,255,0.18);
|
|
||||||
}
|
|
||||||
|
|
||||||
#workspaces button.urgent {
|
|
||||||
background-color: rgba(190,110,120,0.35);
|
|
||||||
border-color: rgba(190,110,120,0.50);
|
|
||||||
color: @fg;
|
|
||||||
}
|
|
||||||
|
|
||||||
#window,
|
|
||||||
#workspaces {
|
|
||||||
margin: 0 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.modules-left > widget:first-child > #workspaces {
|
|
||||||
margin-left: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.modules-right > widget:last-child > #workspaces {
|
|
||||||
margin-right: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------- Common “Chip” module style ---------- */
|
|
||||||
#clock,
|
|
||||||
#battery,
|
|
||||||
#cpu,
|
|
||||||
#memory,
|
|
||||||
#disk,
|
|
||||||
#temperature,
|
|
||||||
#backlight,
|
|
||||||
#network,
|
|
||||||
#pulseaudio,
|
|
||||||
#wireplumber,
|
|
||||||
#custom-media,
|
|
||||||
#tray,
|
|
||||||
#mode,
|
|
||||||
#idle_inhibitor,
|
|
||||||
#scratchpad,
|
|
||||||
#power-profiles-daemon,
|
|
||||||
#mpd,
|
|
||||||
#language,
|
|
||||||
#keyboard-state,
|
|
||||||
#privacy,
|
|
||||||
#privacy-item {
|
|
||||||
padding: 0 10px;
|
|
||||||
color: @fg;
|
|
||||||
background-color: @glass_2;
|
|
||||||
border: 1px solid @stroke_2;
|
|
||||||
border-radius: 10px;
|
|
||||||
margin: 4px 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pulseaudio:hover,
|
|
||||||
#wireplumber:hover,
|
|
||||||
#network:hover,
|
|
||||||
#clock:hover {
|
|
||||||
background-color: @glass_3;
|
|
||||||
}
|
|
||||||
|
|
||||||
#clock {
|
|
||||||
border-color: rgba(140, 170, 190, 0.25);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Battery */
|
|
||||||
#battery.charging,
|
|
||||||
#battery.plugged {
|
|
||||||
background-color: rgba(120,170,140,0.22);
|
|
||||||
border-color: rgba(120,170,140,0.34);
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes blink {
|
|
||||||
to {
|
|
||||||
background-color: rgba(190,110,120,0.18);
|
|
||||||
border-color: rgba(190,110,120,0.50);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#battery.critical:not(.charging) {
|
|
||||||
background-color: rgba(190,110,120,0.35);
|
|
||||||
border-color: rgba(190,110,120,0.55);
|
|
||||||
color: @fg;
|
|
||||||
animation-name: blink;
|
|
||||||
animation-duration: 0.6s;
|
|
||||||
animation-timing-function: steps(10);
|
|
||||||
animation-iteration-count: infinite;
|
|
||||||
animation-direction: alternate;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Network */
|
|
||||||
#network.disconnected {
|
|
||||||
background-color: rgba(190,110,120,0.30);
|
|
||||||
border-color: rgba(190,110,120,0.45);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Audio */
|
|
||||||
#pulseaudio:hover {
|
|
||||||
background-color: rgba(190,160,110,0.20);
|
|
||||||
border-color: rgba(190,160,110,0.28);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pulseaudio.muted {
|
|
||||||
background-color: rgba(140,170,190,0.18);
|
|
||||||
border-color: rgba(140,170,190,0.26);
|
|
||||||
color: @fg-dim;
|
|
||||||
}
|
|
||||||
|
|
||||||
#wireplumber.muted {
|
|
||||||
background-color: rgba(190,110,120,0.28);
|
|
||||||
border-color: rgba(190,110,120,0.40);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Temperature */
|
|
||||||
#temperature.critical {
|
|
||||||
background-color: rgba(190,110,120,0.30);
|
|
||||||
border-color: rgba(190,110,120,0.45);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Tray */
|
|
||||||
#tray > .passive {
|
|
||||||
-gtk-icon-effect: dim;
|
|
||||||
}
|
|
||||||
|
|
||||||
#tray > .needs-attention {
|
|
||||||
-gtk-icon-effect: highlight;
|
|
||||||
background-color: rgba(190,110,120,0.30);
|
|
||||||
border-radius: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Idle inhibitor */
|
|
||||||
#idle_inhibitor.activated {
|
|
||||||
background-color: rgba(255,255,255,0.10);
|
|
||||||
border-color: rgba(255,255,255,0.14);
|
|
||||||
color: @fg;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Scratchpad */
|
|
||||||
#scratchpad {
|
|
||||||
background: rgba(255,255,255,0.05);
|
|
||||||
}
|
|
||||||
|
|
||||||
#scratchpad.empty {
|
|
||||||
background-color: transparent;
|
|
||||||
border-color: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Privacy */
|
|
||||||
#privacy {
|
|
||||||
padding: 0;
|
|
||||||
background-color: transparent;
|
|
||||||
border-color: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
#privacy-item {
|
|
||||||
padding: 0 6px;
|
|
||||||
color: @fg;
|
|
||||||
}
|
|
||||||
|
|
||||||
#privacy-item.screenshare {
|
|
||||||
background-color: rgba(190,160,110,0.30);
|
|
||||||
border-color: rgba(190,160,110,0.40);
|
|
||||||
}
|
|
||||||
#privacy-item.audio-in {
|
|
||||||
background-color: rgba(120,170,140,0.25);
|
|
||||||
border-color: rgba(120,170,140,0.36);
|
|
||||||
}
|
|
||||||
#privacy-item.audio-out {
|
|
||||||
background-color: rgba(140,170,190,0.25);
|
|
||||||
border-color: rgba(140,170,190,0.36);
|
|
||||||
}
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
[default]
|
|
||||||
path = "~/.config/wpaperd/wallpapers/linked"
|
|
||||||
mode = "center"
|
|
||||||
#recursive = true
|
|
||||||
#sorting = "random"
|
|
||||||
#duration = "15m"
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 975 KiB |
@@ -0,0 +1,86 @@
|
|||||||
|
# Notizen
|
||||||
|
|
||||||
|
## Buntes-Monster mit NFS verbinden
|
||||||
|
|
||||||
|
### Server-Seite (Buntes-Monster)
|
||||||
|
|
||||||
|
`nfs-utils` installieren
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo pacman -S nfs-utils
|
||||||
|
```
|
||||||
|
|
||||||
|
Datei `/etc/exports` bearbeiten: Zeilen anfügen:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
/mnt/anbau 192.168.0.0/24(rw,sync,no_subtree_check)
|
||||||
|
/mnt/bilder 192.168.0.0/24(rw,sync,no_subtree_check)
|
||||||
|
```
|
||||||
|
|
||||||
|
Apply exports configuration
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo exportfs -rav
|
||||||
|
```
|
||||||
|
|
||||||
|
Or restart the NFS service to reload
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo systemctl restart nfs-server
|
||||||
|
```
|
||||||
|
|
||||||
|
Enable NFS Service at Boot
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo systemctl enable --now nfs-server
|
||||||
|
```
|
||||||
|
|
||||||
|
### Server-Seite
|
||||||
|
|
||||||
|
`nfs-utils` installieren
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo pacman -S nfs-utils
|
||||||
|
```
|
||||||
|
|
||||||
|
`/etc/fstab`: Zeilen hinzufügen:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
buntes-monster:/mnt/anbau /mnt/anbau nfs rw,sync,addr=192.168.0.4 0 0
|
||||||
|
buntes-monster:/mnt/bilder /mnt/bilder nfs rw,sync,addr=192.168.0.4 0 0
|
||||||
|
```
|
||||||
|
|
||||||
|
(Annahmen: IP buntes-monster: 192.168.0.4)
|
||||||
|
|
||||||
|
Eiträge hinzufügen. Danach Mounts laden:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo mount -a
|
||||||
|
```
|
||||||
|
|
||||||
|
## FSTAB
|
||||||
|
|
||||||
|
`fstab` bearbeiten füt automatische Mounts:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo nvim /etc/fstab
|
||||||
|
```
|
||||||
|
|
||||||
|
Eiträge hinzufügen. Danach Mounts laden:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo mount -a
|
||||||
|
```
|
||||||
|
|
||||||
|
### hidrive
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mathias2784@sftp.hidrive.strato.com:/users/mathias2784 /mnt/hidrive fuse.sshfs defaults,_netdev,IdentityFile=/home/mathias/.ssh/id_ed25519,allow_other 0 0
|
||||||
|
```
|
||||||
|
|
||||||
|
### NAS
|
||||||
|
|
||||||
|
```bash
|
||||||
|
//192.168.0.14/Mathias /mnt/nas/mathias cifs credentials=/home/mathias/.nascred,uid=1000,gid=1000,iocharset=utf8,vers=3.1.1,rsize=65536,wsize=65536,cache=strict,noatime 0 0
|
||||||
|
//192.168.0.14/Gemeinsam /mnt/nas/gemeinsam cifs credentials=/home/mathias/.nascred,uid=1000,gid=1000,iocharset=utf8,vers=3.1.1,rsize=65536,wsize=65536,cache=strict,noatime 0 0
|
||||||
|
```
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# System package list for setup/basic/setup.sh
|
||||||
|
#
|
||||||
|
# Every other dotfile branch depends on these foundational packages
|
||||||
|
# (base system, display manager, audio stack, AUR helper).
|
||||||
|
# `basic` is always set up first in the Makefile.
|
||||||
|
#
|
||||||
|
# - Lines starting with '#' and blank lines are ignored.
|
||||||
|
# - Use "@pacman", "@aur" or "@npm" markers to switch section.
|
||||||
|
# - The default section is @pacman.
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@pacman
|
||||||
|
firefox
|
||||||
|
cups
|
||||||
|
pipewire
|
||||||
|
pipewire-session-manager
|
||||||
|
qpwgraph
|
||||||
|
cifs-utils
|
||||||
|
less
|
||||||
|
git
|
||||||
|
ripgrep
|
||||||
|
fd
|
||||||
|
docker
|
||||||
|
man-db
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
SETUP_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
PACKAGES_FILE="$SETUP_DIR/packages.txt"
|
||||||
|
|
||||||
|
# shellcheck source=../lib/common.sh
|
||||||
|
source "$SETUP_DIR/../lib/common.sh"
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Docker: Dienst aktivieren/starten, Benutzer in die docker-Gruppe aufnehmen
|
||||||
|
# und den Dienst verifizieren. (docker selbst wird ueber setup/basic/packages.txt
|
||||||
|
# als Pacman-Paket installiert.)
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
setup_docker() {
|
||||||
|
if ! command -v docker >/dev/null 2>&1; then
|
||||||
|
echo "Warnung: docker nicht installiert; ueberspringe Docker-Setup."
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "==> Aktiviere und starte Docker-Dienst ..."
|
||||||
|
sudo systemctl enable --now docker
|
||||||
|
|
||||||
|
# Bei Aufruf via `sudo <script>` ist SUDO_USER der eigentliche Benutzer.
|
||||||
|
local target_user="${SUDO_USER:-$USER}"
|
||||||
|
echo "==> Stelle sicher, dass $target_user in der docker-Gruppe ist ..."
|
||||||
|
if [[ "$target_user" == "root" ]] || id -nG "$target_user" 2>/dev/null | grep -qw docker; then
|
||||||
|
echo "Benutzer $target_user ist bereits in der docker-Gruppe."
|
||||||
|
else
|
||||||
|
sudo usermod -aG docker "$target_user"
|
||||||
|
echo "Benutzer $target_user zur docker-Gruppe hinzugefuegt; wirksam nach dem naechsten Login."
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "==> Pruefe Docker-Dienst ..."
|
||||||
|
if systemctl is-active --quiet docker; then
|
||||||
|
echo "Docker-Dienst laeuft (Socket: /var/run/docker.sock)."
|
||||||
|
else
|
||||||
|
echo "Warnung: Docker-Dienst laeuft nicht; pruefe mit: systemctl status docker"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Main
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
main() {
|
||||||
|
local -a pacman_pkgs=() aur_pkgs=() npm_pkgs=()
|
||||||
|
|
||||||
|
echo "==> Aktiviere multilib ..."
|
||||||
|
enable_multilib
|
||||||
|
|
||||||
|
echo "==> System aktualisieren ..."
|
||||||
|
sudo pacman -Syu
|
||||||
|
|
||||||
|
echo "==> Sicherstelle yay ..."
|
||||||
|
ensure_yay
|
||||||
|
|
||||||
|
echo "==> Lese Paketliste: $PACKAGES_FILE"
|
||||||
|
read_packages "$PACKAGES_FILE" pacman_pkgs aur_pkgs npm_pkgs
|
||||||
|
|
||||||
|
install_all_pkgs pacman_pkgs aur_pkgs npm_pkgs
|
||||||
|
|
||||||
|
echo "==> Richte Docker ein ..."
|
||||||
|
setup_docker
|
||||||
|
|
||||||
|
echo "Fertig. Die Basis-Systemumgebung ist eingerichtet."
|
||||||
|
}
|
||||||
|
|
||||||
|
main
|
||||||
Executable
+26
@@ -0,0 +1,26 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Refresh vendored upstream port files (setup/fetch-ports.sh).
|
||||||
|
#
|
||||||
|
# This script lives outside the stow packages (setup/) and is NOT run
|
||||||
|
# by the test harness: it contacts the network. Run it manually when you
|
||||||
|
# want to pull newer upstream Catppuccin ports into the central theme:
|
||||||
|
#
|
||||||
|
# bash setup/fetch-ports.sh
|
||||||
|
#
|
||||||
|
# The central palette (theme.lua / theme.css roles / hypr.conf) remains the
|
||||||
|
# source of truth; after fetching, re-apply the provenance headers and the
|
||||||
|
# role-alias block at the end of theme.css if upstream overwrote them.
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
DEST="$SCRIPT_DIR/../basic/.config/themes/themes/catppuccin-mocha"
|
||||||
|
|
||||||
|
# Pinned upstream revisions (bump deliberately, then run this script).
|
||||||
|
KITTY_PIN="main"
|
||||||
|
|
||||||
|
curl -fsSL "https://raw.githubusercontent.com/catppuccin/kitty/${KITTY_PIN}/themes/mocha.conf" \
|
||||||
|
-o "$DEST/kitty.conf"
|
||||||
|
|
||||||
|
echo "ports refreshed into $DEST"
|
||||||
|
echo "reminder: re-apply file headers + theme.css role aliases, then run scripts/sync-theme.sh"
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Hyprland compositor package list for setup/hypr/setup.sh
|
||||||
|
#
|
||||||
|
# Wayland compositor, screenshot tool and supporting utilities. Both desktop
|
||||||
|
# shell frontends are installed: Noctalia and Caelestia. Select the one started
|
||||||
|
# by Hyprland in hypr/.config/hypr/env.lua.
|
||||||
|
#
|
||||||
|
# Caelestia requires the upstream `quickshell-git` build. The explicit
|
||||||
|
# `aur/` source prefix below is intentional: yay's --aur mode alone can still
|
||||||
|
# select a repository provider. Do not substitute `noctalia-qs`; although it
|
||||||
|
# provides `quickshell-git`, that fork is incompatible with Caelestia's
|
||||||
|
# Quickshell pragmas.
|
||||||
|
#
|
||||||
|
# - Lines starting with '#' and blank lines are ignored.
|
||||||
|
# - Use "@pacman", "@aur" or "@npm" markers to switch section.
|
||||||
|
# - The default section is @pacman.
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@pacman
|
||||||
|
hyprland
|
||||||
|
hypridle
|
||||||
|
hyprpm
|
||||||
|
xdg-desktop-portal-hyprland
|
||||||
|
hyprpolkitagent
|
||||||
|
pantheon-shortcut-overlay
|
||||||
|
wev
|
||||||
|
wl-clipboard
|
||||||
|
hyprshot
|
||||||
|
brightnessctl
|
||||||
|
noctalia
|
||||||
|
wtype
|
||||||
|
|
||||||
|
@aur
|
||||||
|
hyprmod
|
||||||
|
caelestia-shell
|
||||||
|
caelestia-cli
|
||||||
|
aur/quickshell-git
|
||||||
|
hyprsaver
|
||||||
|
python-terminaltexteffects
|
||||||
@@ -0,0 +1,99 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
SETUP_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
PACKAGES_FILE="$SETUP_DIR/packages.txt"
|
||||||
|
|
||||||
|
# shellcheck source=../lib/common.sh
|
||||||
|
source "$SETUP_DIR/../lib/common.sh"
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Create the local shell selection from the tracked example exactly once.
|
||||||
|
# env.lua is ignored by Git so each machine can keep its own choice.
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
ensure_shell_config() {
|
||||||
|
local config_dir example_file config_file
|
||||||
|
|
||||||
|
config_dir="$(repo_root)/hypr/.config/hypr"
|
||||||
|
example_file="$config_dir/env.example.lua"
|
||||||
|
config_file="$config_dir/env.lua"
|
||||||
|
|
||||||
|
if [[ -e "$config_file" || -L "$config_file" ]]; then
|
||||||
|
echo "==> Behalte lokale Shell-Auswahl: $config_file"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "==> Erstelle lokale Shell-Auswahl aus env.example.lua ..."
|
||||||
|
cp "$example_file" "$config_file"
|
||||||
|
}
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Keep Caelestia on upstream Quickshell.
|
||||||
|
#
|
||||||
|
# noctalia-qs can satisfy pacman's virtual quickshell-git dependency, but its
|
||||||
|
# parser is not compatible with Caelestia. The explicit aur/quickshell-git
|
||||||
|
# target bypasses that provider, then setup verifies that /usr/bin/qs really
|
||||||
|
# belongs to quickshell-git.
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
warn_about_quickshell_provider() {
|
||||||
|
if pacman -Q noctalia-qs >/dev/null 2>&1; then
|
||||||
|
log "noctalia-qs ist installiert; die AUR-Transaktion ersetzt es durch quickshell-git."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
verify_quickshell_runtime() {
|
||||||
|
local owner
|
||||||
|
|
||||||
|
if pacman -Q noctalia-qs >/dev/null 2>&1; then
|
||||||
|
echo "Fehler: noctalia-qs ist weiterhin installiert; Caelestia benoetigt AUR quickshell-git." >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! pacman -Q quickshell-git >/dev/null 2>&1; then
|
||||||
|
echo "Fehler: AUR-Paket quickshell-git wurde nicht installiert." >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
owner="$(pacman -Qoq /usr/bin/qs 2>/dev/null || true)"
|
||||||
|
if [[ "$owner" != "quickshell-git" ]]; then
|
||||||
|
echo "Fehler: /usr/bin/qs gehoert zu '$owner' statt zu quickshell-git." >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
log "Quickshell-Runtime geprueft: quickshell-git"
|
||||||
|
}
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Post-install: run Hyprland environment & desktop integration scripts.
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
run_hypr_scripts() {
|
||||||
|
local scripts_dir
|
||||||
|
scripts_dir="$(repo_root)/hypr/.config/hypr/scripts"
|
||||||
|
|
||||||
|
echo "==> Fuehre portal-host-override.sh aus ..."
|
||||||
|
bash "$scripts_dir/portal-host-override.sh"
|
||||||
|
|
||||||
|
echo "==> Fuehre fix_dolphin_file_associations.sh aus ..."
|
||||||
|
bash "$scripts_dir/fix_dolphin_file_associations.sh"
|
||||||
|
}
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Main
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
main() {
|
||||||
|
local -a pacman_pkgs=() aur_pkgs=() npm_pkgs=()
|
||||||
|
|
||||||
|
echo "==> Lese Paketliste: $PACKAGES_FILE"
|
||||||
|
read_packages "$PACKAGES_FILE" pacman_pkgs aur_pkgs npm_pkgs
|
||||||
|
|
||||||
|
warn_about_quickshell_provider
|
||||||
|
install_all_pkgs pacman_pkgs aur_pkgs npm_pkgs
|
||||||
|
verify_quickshell_runtime
|
||||||
|
|
||||||
|
ensure_shell_config
|
||||||
|
run_hypr_scripts
|
||||||
|
|
||||||
|
echo "Fertig. Hyprland und das Compositor-Okosystem sind eingerichtet."
|
||||||
|
}
|
||||||
|
|
||||||
|
main
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Kreation package list for setup/kreation/setup.sh
|
||||||
|
#
|
||||||
|
# DAW, video and audio-plugin runtime.
|
||||||
|
#
|
||||||
|
# - Lines starting with '#' and blank lines are ignored.
|
||||||
|
# - Use "@pacman", "@aur" or "@npm" markers to switch section.
|
||||||
|
# - The default section is @pacman.
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@pacman
|
||||||
|
reaper
|
||||||
|
guitarix
|
||||||
|
kdenlive
|
||||||
|
yabridge
|
||||||
|
yabridgectl
|
||||||
|
obs-studio
|
||||||
|
surge-xt
|
||||||
|
lsp-plugins
|
||||||
|
calf
|
||||||
|
dragonfly-reverb
|
||||||
|
darktable
|
||||||
|
gimp
|
||||||
|
|
||||||
|
@aur
|
||||||
|
numaplayer
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
SETUP_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
PACKAGES_FILE="$SETUP_DIR/packages.txt"
|
||||||
|
|
||||||
|
# shellcheck source=../lib/common.sh
|
||||||
|
source "$SETUP_DIR/../lib/common.sh"
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Main
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
main() {
|
||||||
|
local -a pacman_pkgs=() aur_pkgs=() npm_pkgs=()
|
||||||
|
|
||||||
|
echo "==> Lese Paketliste: $PACKAGES_FILE"
|
||||||
|
read_packages "$PACKAGES_FILE" pacman_pkgs aur_pkgs npm_pkgs
|
||||||
|
|
||||||
|
install_all_pkgs pacman_pkgs aur_pkgs npm_pkgs
|
||||||
|
|
||||||
|
echo "Fertig. Kreation-Pakete (DAW, Video, Plugins) sind eingerichtet."
|
||||||
|
}
|
||||||
|
|
||||||
|
main
|
||||||
@@ -0,0 +1,126 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# setup/lib/common.sh
|
||||||
|
#
|
||||||
|
# Shared helpers for the setup/install scripts under setup/.
|
||||||
|
# Source this file; do not execute it directly:
|
||||||
|
#
|
||||||
|
# SETUP_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
# # shellcheck source=../lib/common.sh
|
||||||
|
# source "$SETUP_DIR/../lib/common.sh"
|
||||||
|
#
|
||||||
|
# Conventions:
|
||||||
|
# - The caller owns `set -euo pipefail` and PACKAGES_FILE.
|
||||||
|
# - Package lists use @pacman (default) / @aur / @npm section markers;
|
||||||
|
# '#' starts a comment, blank lines are ignored.
|
||||||
|
# - Set NPM_USE_SUDO=1 before calling install_npm_pkgs when the global
|
||||||
|
# npm root is root-owned (Arch installs npm to /usr/lib/node_modules).
|
||||||
|
|
||||||
|
# Print the repository root (setup/lib/ -> repo root).
|
||||||
|
repo_root() {
|
||||||
|
cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd
|
||||||
|
}
|
||||||
|
|
||||||
|
log() {
|
||||||
|
echo "==> $*"
|
||||||
|
}
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Read a packages.txt file, split into pacman / aur / npm sections.
|
||||||
|
# Usage: read_packages <file> <pacman_array> <aur_array> <npm_array>
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
read_packages() {
|
||||||
|
local file="$1" pacman_ref="$2" aur_ref="$3" npm_ref="$4"
|
||||||
|
local section="pacman"
|
||||||
|
local line current
|
||||||
|
local -n _pacman="$pacman_ref" _aur="$aur_ref" _npm="$npm_ref"
|
||||||
|
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+=("$current") ;;
|
||||||
|
aur) _aur+=("$current") ;;
|
||||||
|
npm) _npm+=("$current") ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done < "$file"
|
||||||
|
}
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Install sections (arrays passed by nameref).
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
install_pacman_pkgs() {
|
||||||
|
local -n _pkgs="$1"
|
||||||
|
if ((${#_pkgs[@]})); then
|
||||||
|
log "Installiere Pacman-Pakete: ${_pkgs[*]}"
|
||||||
|
yay -S --needed "${_pkgs[@]}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
install_aur_pkgs() {
|
||||||
|
local -n _pkgs="$1"
|
||||||
|
if ((${#_pkgs[@]})); then
|
||||||
|
log "Installiere AUR-Pakete: ${_pkgs[*]}"
|
||||||
|
# --aur selects yay's AUR mode. For names that a repository package
|
||||||
|
# can also provide, use an explicit aur/<package> target in the list.
|
||||||
|
yay -S --aur --needed "${_pkgs[@]}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
install_npm_pkgs() {
|
||||||
|
local -n _pkgs="$1"
|
||||||
|
if ((${#_pkgs[@]})); then
|
||||||
|
log "Installiere globale npm-Pakete: ${_pkgs[*]}"
|
||||||
|
if [[ "${NPM_USE_SUDO:-0}" == "1" ]]; then
|
||||||
|
sudo npm install -g "${_pkgs[@]}"
|
||||||
|
else
|
||||||
|
npm install -g "${_pkgs[@]}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Install all three sections at once.
|
||||||
|
install_all_pkgs() {
|
||||||
|
install_pacman_pkgs "$1"
|
||||||
|
install_aur_pkgs "$2"
|
||||||
|
install_npm_pkgs "$3"
|
||||||
|
}
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# 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.
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
ensure_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"
|
||||||
|
}
|
||||||
@@ -1,8 +1,9 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
retry() {
|
retry() {
|
||||||
local N=$1; shift
|
local N=$1; shift
|
||||||
local t=$2; shift
|
local t=$2; shift
|
||||||
for i in $(seq 1 $N); do
|
for _ in $(seq 1 $N); do
|
||||||
"$@" && return 0 || sleep $t
|
"$@" && return 0 || sleep $t
|
||||||
done
|
done
|
||||||
return 1
|
return 1
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Terminal package list for term/setup.sh
|
# Terminal package list for setup/term/setup.sh
|
||||||
#
|
#
|
||||||
# Maintenance:
|
# Maintenance:
|
||||||
# - Add / remove packages on separate lines.
|
# - Add / remove packages on separate lines.
|
||||||
@@ -37,10 +37,13 @@ fzf
|
|||||||
locate
|
locate
|
||||||
ttf-jetbrains-mono-nerd
|
ttf-jetbrains-mono-nerd
|
||||||
ttf-font-awesome
|
ttf-font-awesome
|
||||||
|
btop
|
||||||
|
yt-dlp
|
||||||
|
ffmpeg
|
||||||
|
jc
|
||||||
|
|
||||||
@aur
|
@aur
|
||||||
opencode
|
opencode
|
||||||
|
|
||||||
@npm
|
@npm
|
||||||
eslint_d
|
eslint_d
|
||||||
vscode-js-debug
|
|
||||||
@@ -0,0 +1,107 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
SETUP_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
PACKAGES_FILE="$SETUP_DIR/packages.txt"
|
||||||
|
|
||||||
|
# shellcheck source=../lib/common.sh
|
||||||
|
source "$SETUP_DIR/../lib/common.sh"
|
||||||
|
|
||||||
|
# Arch installiert npm nach /usr/lib/node_modules (root-owned),
|
||||||
|
# daher braucht der globale Install sudo.
|
||||||
|
NPM_USE_SUDO=1
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# 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
|
||||||
|
}
|
||||||
|
|
||||||
|
install_tmux_tpm() {
|
||||||
|
if [[ -x "$HOME/.config/tmux/plugins/tpm/tpm" ]]; then
|
||||||
|
echo "tmux TPM bereits installiert; fahre fort."
|
||||||
|
else
|
||||||
|
echo "Klone tmux TPM ..."
|
||||||
|
mkdir -p "$HOME/.config/tmux/plugins"
|
||||||
|
git clone https://github.com/tmux-plugins/tpm "$HOME/.config/tmux/plugins/tpm"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
install_tmux_plugins() {
|
||||||
|
local tpm_install="$HOME/.config/tmux/plugins/tpm/bin/install_plugins"
|
||||||
|
if ! command -v tmux >/dev/null 2>&1; then
|
||||||
|
echo "Warnung: tmux nicht installiert; ueberspringe Plugin-Installation (C-Space I beim ersten Start)."
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
if ! command -v git >/dev/null 2>&1; then
|
||||||
|
echo "Warnung: git nicht installiert; ueberspringe tmux Plugin-Installation."
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
if [[ ! -f "$HOME/.config/tmux/tmux.conf" ]]; then
|
||||||
|
echo "tmux.conf noch nicht verlinkt (stow laeuft nach setup.sh); Plugins werden beim ersten tmux-Start bzw. Re-Run installiert (C-Space I)."
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
if [[ ! -x "$tpm_install" ]]; then
|
||||||
|
echo "Warnung: TPM install_plugins nicht gefunden; ueberspringe tmux Plugin-Installation."
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
echo "Installiere tmux-Plugins via TPM ..."
|
||||||
|
"$tpm_install"
|
||||||
|
}
|
||||||
|
|
||||||
|
add_yazi_git_plugin() {
|
||||||
|
if command -v yazi >/dev/null 2>&1 && command -v ya >/dev/null 2>&1; then
|
||||||
|
if ya pkg list 2>/dev/null | grep -q 'yazi-rs/plugins:git'; then
|
||||||
|
echo "yazi git-Plugin bereits installiert; fahre fort."
|
||||||
|
else
|
||||||
|
echo "Fuege yazi git-Plugin hinzu ..."
|
||||||
|
ya pkg add yazi-rs/plugins:git
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Main
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
main() {
|
||||||
|
local -a pacman_pkgs=() aur_pkgs=() npm_pkgs=()
|
||||||
|
|
||||||
|
# Hinweis: multilib, yay und das System-Update werden von
|
||||||
|
# setup/basic/setup.sh uebernommen (laeuft vor term im Makefile).
|
||||||
|
echo "==> Lese Paketliste: $PACKAGES_FILE"
|
||||||
|
read_packages "$PACKAGES_FILE" pacman_pkgs aur_pkgs npm_pkgs
|
||||||
|
|
||||||
|
install_all_pkgs pacman_pkgs aur_pkgs npm_pkgs
|
||||||
|
|
||||||
|
set_fish_default_shell
|
||||||
|
install_tmuxifier
|
||||||
|
install_tmux_tpm
|
||||||
|
install_tmux_plugins
|
||||||
|
add_yazi_git_plugin
|
||||||
|
|
||||||
|
echo "==> Aktualisiere locate-Datenbank ..."
|
||||||
|
sudo updatedb
|
||||||
|
|
||||||
|
echo "Fertig. Starte ein neues Terminal, damit fish und die Umgebung greifen."
|
||||||
|
}
|
||||||
|
|
||||||
|
main
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Standalone desktop utility package list for setup/utils/setup.sh
|
||||||
|
#
|
||||||
|
# Programs that are not core to every branch, but are expected on a full
|
||||||
|
# desktop: office / web / mail / native-app replacements (Wine), the
|
||||||
|
# Nextcloud sync client, etc.
|
||||||
|
#
|
||||||
|
# - Lines starting with '#' and blank lines are ignored.
|
||||||
|
# - Use "@pacman", "@aur" or "@npm" markers to switch section.
|
||||||
|
# - The default section is @pacman.
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@pacman
|
||||||
|
firefox
|
||||||
|
nextcloud-client
|
||||||
|
thunderbird
|
||||||
|
ktouch
|
||||||
|
ktorrent
|
||||||
|
wine
|
||||||
|
wine-mono
|
||||||
|
wine-gecko
|
||||||
|
winetricks
|
||||||
|
rbw
|
||||||
|
nfs-utils
|
||||||
|
code
|
||||||
|
imv
|
||||||
|
bitwarden
|
||||||
|
|
||||||
|
@aur
|
||||||
|
supersonic-desktop
|
||||||
|
subtui
|
||||||
|
localsend
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
SETUP_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
PACKAGES_FILE="$SETUP_DIR/packages.txt"
|
||||||
|
|
||||||
|
# shellcheck source=../lib/common.sh
|
||||||
|
source "$SETUP_DIR/../lib/common.sh"
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Main
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
main() {
|
||||||
|
local -a pacman_pkgs=() aur_pkgs=() npm_pkgs=()
|
||||||
|
|
||||||
|
echo "==> Lese Paketliste: $PACKAGES_FILE"
|
||||||
|
read_packages "$PACKAGES_FILE" pacman_pkgs aur_pkgs npm_pkgs
|
||||||
|
|
||||||
|
install_all_pkgs pacman_pkgs aur_pkgs npm_pkgs
|
||||||
|
|
||||||
|
echo "Fertig. Standalone Utilities sind eingerichtet."
|
||||||
|
}
|
||||||
|
|
||||||
|
main
|
||||||
@@ -37,3 +37,17 @@ 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"
|
||||||
|
|
||||||
|
# Central theme (basic/.config/themes): single source of truth for colors.
|
||||||
|
if [ -f "$HOME/.config/themes/current/theme.env.sh" ]; then
|
||||||
|
. "$HOME/.config/themes/current/theme.env.sh"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if command -v fastfetch >/dev/null 2>&1; then
|
||||||
|
fastfetch --config ~/.config/fastfetch/config.jsonc
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Added by LM Studio CLI (lms)
|
||||||
|
export PATH="$PATH:/home/mathias/.lmstudio/bin"
|
||||||
|
# End of LM Studio CLI section
|
||||||
|
|
||||||
|
|||||||
@@ -42,36 +42,11 @@
|
|||||||
"key": "├─",
|
"key": "├─",
|
||||||
"keyColor": "green"
|
"keyColor": "green"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"type": "brightness",
|
|
||||||
"key": "├─",
|
|
||||||
"keyColor": "green"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "battery",
|
|
||||||
"key": "├─",
|
|
||||||
"keyColor": "green"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "poweradapter",
|
|
||||||
"key": "├─",
|
|
||||||
"keyColor": "green"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"type": "gamepad",
|
"type": "gamepad",
|
||||||
"key": "├─",
|
"key": "├─",
|
||||||
"keyColor": "green"
|
"keyColor": "green"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"type": "bluetooth",
|
|
||||||
"key": "├─",
|
|
||||||
"keyColor": "green"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "sound",
|
|
||||||
"key": "╰─",
|
|
||||||
"keyColor": "green"
|
|
||||||
},
|
|
||||||
"break",
|
"break",
|
||||||
|
|
||||||
{
|
{
|
||||||
@@ -104,21 +79,6 @@
|
|||||||
"key": "├─",
|
"key": "├─",
|
||||||
"keyColor": "yellow"
|
"keyColor": "yellow"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"type": "theme",
|
|
||||||
"key": "├─",
|
|
||||||
"keyColor": "yellow"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "icons",
|
|
||||||
"key": "├─",
|
|
||||||
"keyColor": "yellow"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "wallpaper",
|
|
||||||
"key": "╰─",
|
|
||||||
"keyColor": "yellow"
|
|
||||||
},
|
|
||||||
"break",
|
"break",
|
||||||
|
|
||||||
{
|
{
|
||||||
@@ -137,21 +97,11 @@
|
|||||||
"key": "├─",
|
"key": "├─",
|
||||||
"keyColor": "blue"
|
"keyColor": "blue"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"type": "packages",
|
|
||||||
"key": "├─",
|
|
||||||
"keyColor": "blue"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"type": "uptime",
|
"type": "uptime",
|
||||||
"key": "├─",
|
"key": "├─",
|
||||||
"keyColor": "blue"
|
"keyColor": "blue"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"type": "media",
|
|
||||||
"key": "├─",
|
|
||||||
"keyColor": "blue"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"type": "localip",
|
"type": "localip",
|
||||||
"key": "├─",
|
"key": "├─",
|
||||||
|
|||||||
Executable
+6
@@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
for f in ~/.config/fastfetch/*.jsonc; do
|
||||||
|
echo "=== $f ==="
|
||||||
|
fastfetch --config "$f"
|
||||||
|
read -p "Enter for next..."
|
||||||
|
done
|
||||||
@@ -1,15 +1,22 @@
|
|||||||
|
# Central theme (basic/.config/themes): single source of truth for colors.
|
||||||
|
if test -f ~/.config/themes/current/theme.fish
|
||||||
|
source ~/.config/themes/current/theme.fish
|
||||||
|
end
|
||||||
|
|
||||||
# Enable OpenCode web search via Exa AI
|
# Enable OpenCode web search via Exa AI
|
||||||
set -gx OPENCODE_ENABLE_EXA 1
|
set -gx OPENCODE_ENABLE_EXA 1
|
||||||
|
|
||||||
if status is-interactive
|
if status is-interactive
|
||||||
starship init fish | source
|
starship init fish | source
|
||||||
set -g fish_prompt_pwd_dir_length 0
|
set -g fish_prompt_pwd_dir_length 0
|
||||||
# fastfetch
|
if type -q fastfetch
|
||||||
|
fastfetch --config ~/.config/fastfetch/config.jsonc
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
# Added by LM Studio CLI (lms)
|
# Added by LM Studio CLI (lms)
|
||||||
set -gx PATH $PATH /home/mathias/.lmstudio/bin
|
set -gx PATH $PATH $HOME/.lmstudio/bin
|
||||||
# End of LM Studio CLI section
|
# End of LM Studio CLI section
|
||||||
|
|
||||||
export EDITOR=nvim
|
export EDITOR=nvim
|
||||||
@@ -133,3 +140,17 @@ export ROCM_PATH=/opt/rocm
|
|||||||
export HSA_OVERRIDE_GFX_VERSION=11.0.0
|
export HSA_OVERRIDE_GFX_VERSION=11.0.0
|
||||||
export HIP_VISIBLE_DEVICES=0
|
export HIP_VISIBLE_DEVICES=0
|
||||||
|
|
||||||
|
fish_add_path -m $HOME/.local/bin
|
||||||
|
|
||||||
|
|
||||||
|
# My shortcuts
|
||||||
|
alias fdh="fd -H"
|
||||||
|
alias fdhi="fd -HI"
|
||||||
|
alias rgh="rg --hidden"
|
||||||
|
alias rghi="rg --hidden --no-ignore"
|
||||||
|
|
||||||
|
export PATH="$HOME/.cargo/bin:$PATH"
|
||||||
|
# Added by LM Studio CLI (lms)
|
||||||
|
|
||||||
|
set -gx PATH $PATH /home/mathias/.lmstudio/bin
|
||||||
|
# End of LM Studio CLI section
|
||||||
|
|||||||
@@ -125,6 +125,8 @@ A feature-rich Neovim setup optimized for Python, JSON, and CSV development.
|
|||||||
| `K` | Show hover documentation |
|
| `K` | Show hover documentation |
|
||||||
| `<leader>rn` | Rename symbol |
|
| `<leader>rn` | Rename symbol |
|
||||||
| `<leader>ca` | Code actions / quick fixes |
|
| `<leader>ca` | Code actions / quick fixes |
|
||||||
|
| `<leader>fx` | Fix diagnostic under cursor |
|
||||||
|
| `<leader>fA` | Fix all source-level diagnostics |
|
||||||
| `<leader>e` | Show diagnostic error |
|
| `<leader>e` | Show diagnostic error |
|
||||||
| `[d / ]d` | Previous/next diagnostic |
|
| `[d / ]d` | Previous/next diagnostic |
|
||||||
|
|
||||||
@@ -132,7 +134,7 @@ A feature-rich Neovim setup optimized for Python, JSON, and CSV development.
|
|||||||
|
|
||||||
| Keymap | Action |
|
| Keymap | Action |
|
||||||
|--------|--------|
|
|--------|--------|
|
||||||
| `<leader>f` | Format file |
|
| `<leader>lf` | Format file |
|
||||||
|
|
||||||
### Git (Gitsigns)
|
### Git (Gitsigns)
|
||||||
|
|
||||||
@@ -181,7 +183,8 @@ A feature-rich Neovim setup optimized for Python, JSON, and CSV development.
|
|||||||
## File Type Specifics
|
## File Type Specifics
|
||||||
|
|
||||||
### Python (.py)
|
### Python (.py)
|
||||||
- **LSP**: Full autocompletion, type checking, goto definition
|
- **LSP**: Full autocompletion, type checking, goto definition, Ruff diagnostics and quick fixes
|
||||||
|
- **Linting**: Ruff LSP (fix with `<leader>fx`, or use `<leader>fA` for fix-all actions)
|
||||||
- **Formatting**: ruff format (fast), black (backup)
|
- **Formatting**: ruff format (fast), black (backup)
|
||||||
- **Debugging**: Set breakpoints with `F9`, run with `F5`
|
- **Debugging**: Set breakpoints with `F9`, run with `F5`
|
||||||
- **Indentation**: 4 spaces (Python convention)
|
- **Indentation**: 4 spaces (Python convention)
|
||||||
@@ -192,6 +195,25 @@ A feature-rich Neovim setup optimized for Python, JSON, and CSV development.
|
|||||||
- **Indentation**: 2 spaces
|
- **Indentation**: 2 spaces
|
||||||
- **Folding**: JSON objects/arrays are foldable (`za` to toggle, `zM` to close all)
|
- **Folding**: JSON objects/arrays are foldable (`za` to toggle, `zM` to close all)
|
||||||
|
|
||||||
|
### Markdown (.md)
|
||||||
|
- **LSP**: Marksman for Markdown navigation and document features
|
||||||
|
- **Linting**: markdownlint diagnostics
|
||||||
|
- **Fixes**: `<leader>fx` or `<leader>ca` runs `markdownlint --fix` on the saved file
|
||||||
|
- **Formatting**: Prettier via `<leader>lf`
|
||||||
|
- **Note**: Only markdownlint rules that support automatic fixes can be changed automatically
|
||||||
|
|
||||||
|
### JavaScript/TypeScript/Vue
|
||||||
|
- **LSP**: TypeScript language features and ESLint diagnostics with quick fixes
|
||||||
|
- **Linting**: ESLint LSP (fix with `<leader>fx`, or use `<leader>fA` for fix-all actions)
|
||||||
|
- **Formatting**: Prettier via `<leader>lf`
|
||||||
|
|
||||||
|
### HTML (.html)
|
||||||
|
- **Auto-close tags**: typing `<div` + `>` inserts `</div>` automatically (`nvim-ts-autotag`)
|
||||||
|
- **Auto-rename tags**: `ciw` on an opening tag renames the matching closing tag
|
||||||
|
- **Enter between tags**: expands to indented lines via Treesitter indenting
|
||||||
|
- **Also applies to**: `.vue`, `.tsx`, `.jsx`, `.svelte`, `.astro`, `.xml`, `.php`, `.hbs`
|
||||||
|
- **Requires** the Treesitter parser for the filetype (already auto-installed for html/vue/tsx)
|
||||||
|
|
||||||
### CSV (.csv)
|
### CSV (.csv)
|
||||||
- **Treesitter**: Syntax highlighting
|
- **Treesitter**: Syntax highlighting
|
||||||
- **No wrap**: Full row visibility
|
- **No wrap**: Full row visibility
|
||||||
|
|||||||
@@ -49,13 +49,78 @@ require("diff-base")
|
|||||||
-- ============================================================================
|
-- ============================================================================
|
||||||
-- STEP 4: LSP KEYMAPS
|
-- STEP 4: LSP KEYMAPS
|
||||||
-- ============================================================================
|
-- ============================================================================
|
||||||
|
local function fix_markdownlint()
|
||||||
|
local bufnr = vim.api.nvim_get_current_buf()
|
||||||
|
local filename = vim.api.nvim_buf_get_name(bufnr)
|
||||||
|
local markdownlint = vim.fn.exepath("markdownlint")
|
||||||
|
if markdownlint == "" then
|
||||||
|
markdownlint = vim.fn.stdpath("data") .. "/mason/bin/markdownlint"
|
||||||
|
end
|
||||||
|
|
||||||
|
if vim.fn.executable(markdownlint) == 0 then
|
||||||
|
vim.notify("markdownlint is not installed", vim.log.levels.WARN)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
if filename == "" then
|
||||||
|
vim.notify("Save the Markdown buffer before fixing it", vim.log.levels.WARN)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.cmd.write()
|
||||||
|
vim.fn.jobstart({ markdownlint, "--fix", filename }, {
|
||||||
|
buffer = bufnr,
|
||||||
|
on_exit = function(_, exit_code)
|
||||||
|
vim.schedule(function()
|
||||||
|
if exit_code ~= 0 then
|
||||||
|
vim.notify("markdownlint could not fix this file", vim.log.levels.WARN)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.cmd.checktime()
|
||||||
|
vim.notify("markdownlint fixes applied", vim.log.levels.INFO)
|
||||||
|
vim.defer_fn(function()
|
||||||
|
require("lint").try_lint()
|
||||||
|
end, 100)
|
||||||
|
end)
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
vim.keymap.set("n", "gd", vim.lsp.buf.definition, { desc = "Go to definition" })
|
vim.keymap.set("n", "gd", vim.lsp.buf.definition, { desc = "Go to definition" })
|
||||||
vim.keymap.set("n", "gD", vim.lsp.buf.declaration, { desc = "Go to declaration" })
|
vim.keymap.set("n", "gD", vim.lsp.buf.declaration, { desc = "Go to declaration" })
|
||||||
vim.keymap.set("n", "gi", vim.lsp.buf.implementation, { desc = "Go to implementation" })
|
vim.keymap.set("n", "gi", vim.lsp.buf.implementation, { desc = "Go to implementation" })
|
||||||
vim.keymap.set("n", "gr", vim.lsp.buf.references, { desc = "Show references" })
|
vim.keymap.set("n", "gr", vim.lsp.buf.references, { desc = "Show references" })
|
||||||
vim.keymap.set("n", "K", vim.lsp.buf.hover, { desc = "Show hover docs" })
|
vim.keymap.set("n", "K", vim.lsp.buf.hover, { desc = "Show hover docs" })
|
||||||
vim.keymap.set("n", "<leader>rn", vim.lsp.buf.rename, { desc = "Rename symbol" })
|
vim.keymap.set("n", "<leader>rn", vim.lsp.buf.rename, { desc = "Rename symbol" })
|
||||||
vim.keymap.set("n", "<leader>ca", vim.lsp.buf.code_action, { desc = "Code actions" })
|
vim.keymap.set("n", "<leader>ca", function()
|
||||||
|
if vim.bo.filetype == "markdown" then
|
||||||
|
fix_markdownlint()
|
||||||
|
return
|
||||||
|
end
|
||||||
|
vim.lsp.buf.code_action()
|
||||||
|
end, { desc = "Code actions / Markdown fixes" })
|
||||||
|
vim.keymap.set("n", "<leader>fx", function()
|
||||||
|
if vim.bo.filetype == "markdown" then
|
||||||
|
fix_markdownlint()
|
||||||
|
return
|
||||||
|
end
|
||||||
|
vim.lsp.buf.code_action({
|
||||||
|
context = {
|
||||||
|
diagnostics = vim.diagnostic.get(0, {
|
||||||
|
lnum = vim.fn.line(".") - 1,
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
end, { desc = "Fix diagnostic" })
|
||||||
|
vim.keymap.set("n", "<leader>fA", function()
|
||||||
|
vim.lsp.buf.code_action({
|
||||||
|
apply = true,
|
||||||
|
context = {
|
||||||
|
only = { "source.fixAll" },
|
||||||
|
},
|
||||||
|
})
|
||||||
|
end, { desc = "Fix all diagnostics" })
|
||||||
vim.keymap.set("n", "<leader>e", vim.diagnostic.open_float, { desc = "Show diagnostic" })
|
vim.keymap.set("n", "<leader>e", vim.diagnostic.open_float, { desc = "Show diagnostic" })
|
||||||
|
|
||||||
vim.diagnostic.config({
|
vim.diagnostic.config({
|
||||||
@@ -138,4 +203,3 @@ vim.keymap.set("n", "<leader>ch", ":noh<CR>", { desc = "clear search highlightin
|
|||||||
|
|
||||||
-- toggle word wrap
|
-- toggle word wrap
|
||||||
vim.keymap.set("n", "<leader>tw", ":set wrap!<CR>", { desc = "toggle word wrap" })
|
vim.keymap.set("n", "<leader>tw", ":set wrap!<CR>", { desc = "toggle word wrap" })
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ return {
|
|||||||
{ "<leader>bp", "<Cmd>BufferLinePick<CR>", desc = "Pick buffer" },
|
{ "<leader>bp", "<Cmd>BufferLinePick<CR>", desc = "Pick buffer" },
|
||||||
{ "<leader>bc", "<Cmd>BufferLinePickClose<CR>", desc = "Pick buffer to close" },
|
{ "<leader>bc", "<Cmd>BufferLinePickClose<CR>", desc = "Pick buffer to close" },
|
||||||
{ "<leader>bx", "<Cmd>BufferLineCloseOthers<CR>", desc = "Close other buffers" },
|
{ "<leader>bx", "<Cmd>BufferLineCloseOthers<CR>", desc = "Close other buffers" },
|
||||||
|
{ "<leader>bq", "<Cmd>BufferLineCyclePrev<CR><Cmd>bdelete #<CR>", desc = "Close buffer and go left" },
|
||||||
},
|
},
|
||||||
opts = {
|
opts = {
|
||||||
options = {
|
options = {
|
||||||
|
|||||||
@@ -4,7 +4,10 @@ return {
|
|||||||
lazy = false,
|
lazy = false,
|
||||||
priority = 1000,
|
priority = 1000,
|
||||||
config = function()
|
config = function()
|
||||||
require("catppuccin").setup({ flavor = "mocha" })
|
-- Central theme (basic/.config/themes): flavor/colorscheme come from
|
||||||
vim.cmd.colorscheme("catppuccin")
|
-- $CATPPUCCIN_FLAVOR / $THEME_NVIM_COLORSCHEME so a future theme only
|
||||||
|
-- changes the central files (see themes/registry.conf).
|
||||||
|
require("catppuccin").setup({ flavor = os.getenv("CATPPUCCIN_FLAVOR") or "mocha" })
|
||||||
|
vim.cmd.colorscheme(os.getenv("THEME_NVIM_COLORSCHEME") or "catppuccin")
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,10 +44,13 @@ return {
|
|||||||
require("mason-lspconfig").setup({
|
require("mason-lspconfig").setup({
|
||||||
ensure_installed = {
|
ensure_installed = {
|
||||||
"pyright", -- Python
|
"pyright", -- Python
|
||||||
|
"ruff", -- Python linting and fixes
|
||||||
|
"eslint", -- JavaScript/TypeScript linting and fixes
|
||||||
"ts_ls", -- TypeScript/JavaScript
|
"ts_ls", -- TypeScript/JavaScript
|
||||||
"vue_ls", -- Vue (Volar)
|
"vue_ls", -- Vue (Volar)
|
||||||
"jsonls", -- JSON
|
"jsonls", -- JSON
|
||||||
"yamlls", -- YAML
|
"yamlls", -- YAML
|
||||||
|
"marksman", -- Markdown
|
||||||
"html", -- HTML
|
"html", -- HTML
|
||||||
"cssls", -- CSS
|
"cssls", -- CSS
|
||||||
"bashls", -- Bash
|
"bashls", -- Bash
|
||||||
@@ -97,6 +100,25 @@ return {
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- Ruff provides Python lint diagnostics and quick fixes.
|
||||||
|
vim.lsp.config("ruff", {
|
||||||
|
filetypes = { "python" },
|
||||||
|
})
|
||||||
|
|
||||||
|
-- ESLint provides lint diagnostics and source-level fixes.
|
||||||
|
vim.lsp.config("eslint", {
|
||||||
|
filetypes = {
|
||||||
|
"javascript",
|
||||||
|
"javascriptreact",
|
||||||
|
"typescript",
|
||||||
|
"typescriptreact",
|
||||||
|
"vue",
|
||||||
|
},
|
||||||
|
settings = {
|
||||||
|
workingDirectory = { mode = "auto" },
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
-- Type- and JavaScript
|
-- Type- and JavaScript
|
||||||
vim.lsp.config("ts_ls", {
|
vim.lsp.config("ts_ls", {
|
||||||
filetypes = {
|
filetypes = {
|
||||||
@@ -160,6 +182,7 @@ return {
|
|||||||
-- Other languages
|
-- Other languages
|
||||||
vim.lsp.config("jsonls", {})
|
vim.lsp.config("jsonls", {})
|
||||||
vim.lsp.config("yamlls", {})
|
vim.lsp.config("yamlls", {})
|
||||||
|
vim.lsp.config("marksman", {})
|
||||||
vim.lsp.config("html", {})
|
vim.lsp.config("html", {})
|
||||||
vim.lsp.config("cssls", {})
|
vim.lsp.config("cssls", {})
|
||||||
vim.lsp.config("bashls", {})
|
vim.lsp.config("bashls", {})
|
||||||
@@ -167,10 +190,13 @@ return {
|
|||||||
-- Enable servers
|
-- Enable servers
|
||||||
vim.lsp.enable("lua_ls")
|
vim.lsp.enable("lua_ls")
|
||||||
vim.lsp.enable("pyright")
|
vim.lsp.enable("pyright")
|
||||||
|
vim.lsp.enable("ruff")
|
||||||
|
vim.lsp.enable("eslint")
|
||||||
vim.lsp.enable("ts_ls")
|
vim.lsp.enable("ts_ls")
|
||||||
vim.lsp.enable("vue_ls")
|
vim.lsp.enable("vue_ls")
|
||||||
vim.lsp.enable("jsonls")
|
vim.lsp.enable("jsonls")
|
||||||
vim.lsp.enable("yamlls")
|
vim.lsp.enable("yamlls")
|
||||||
|
vim.lsp.enable("marksman")
|
||||||
vim.lsp.enable("html")
|
vim.lsp.enable("html")
|
||||||
vim.lsp.enable("cssls")
|
vim.lsp.enable("cssls")
|
||||||
vim.lsp.enable("bashls")
|
vim.lsp.enable("bashls")
|
||||||
|
|||||||
@@ -17,11 +17,22 @@ return {
|
|||||||
css = { "prettier" },
|
css = { "prettier" },
|
||||||
scss = { "prettier" },
|
scss = { "prettier" },
|
||||||
yaml = { "prettier" },
|
yaml = { "prettier" },
|
||||||
markdown = { "prettier" },
|
markdown = { "prettier_markdown" },
|
||||||
sh = { "shfmt" },
|
sh = { "shfmt" },
|
||||||
bash = { "shfmt" },
|
bash = { "shfmt" },
|
||||||
rust = { "rustfmt" },
|
rust = { "rustfmt" },
|
||||||
},
|
},
|
||||||
|
formatters = {
|
||||||
|
prettier_markdown = {
|
||||||
|
inherit = "prettier",
|
||||||
|
prepend_args = {
|
||||||
|
"--prose-wrap",
|
||||||
|
"always",
|
||||||
|
"--print-width",
|
||||||
|
"80",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
vim.keymap.set({ "n", "v" }, "<leader>lf", function()
|
vim.keymap.set({ "n", "v" }, "<leader>lf", function()
|
||||||
|
|||||||
@@ -2,12 +2,6 @@ return {
|
|||||||
"mfussenegger/nvim-lint",
|
"mfussenegger/nvim-lint",
|
||||||
config = function()
|
config = function()
|
||||||
require("lint").linters_by_ft = {
|
require("lint").linters_by_ft = {
|
||||||
javascript = { "eslint_d" },
|
|
||||||
javascriptreact = { "eslint_d" },
|
|
||||||
typescript = { "eslint_d" },
|
|
||||||
typescriptreact = { "eslint_d" },
|
|
||||||
vue = { "eslint_d" },
|
|
||||||
python = { "ruff" },
|
|
||||||
-- lua = { "selene" }, -- Disabled: lua_ls provides diagnostics
|
-- lua = { "selene" }, -- Disabled: lua_ls provides diagnostics
|
||||||
sh = { "shellcheck" },
|
sh = { "shellcheck" },
|
||||||
bash = { "shellcheck" },
|
bash = { "shellcheck" },
|
||||||
@@ -17,7 +11,7 @@ return {
|
|||||||
rust = { "clippy" },
|
rust = { "clippy" },
|
||||||
}
|
}
|
||||||
|
|
||||||
vim.api.nvim_create_autocmd({ "BufWritePost" }, {
|
vim.api.nvim_create_autocmd({ "BufWritePost", "BufEnter", "InsertLeave" }, {
|
||||||
callback = function()
|
callback = function()
|
||||||
require("lint").try_lint()
|
require("lint").try_lint()
|
||||||
end,
|
end,
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
--[[
|
||||||
|
TS-AUTOTAG.LUA
|
||||||
|
|
||||||
|
Auto-close and auto-rename HTML/XML-style tags via Treesitter.
|
||||||
|
|
||||||
|
Why this exists: nvim-autopairs (see autopairs.lua) only handles brackets,
|
||||||
|
quotes and endwise pairs -- it never creates a closing tag. Its only
|
||||||
|
HTML-aware rule fires on <CR> when a close tag ALREADY exists after the
|
||||||
|
cursor, so it can re-indent a pair but cannot create one. This plugin
|
||||||
|
fills that gap: typing `<div` + `>` yields `<div></div>` with the cursor
|
||||||
|
in between, and `ciw` on an opening tag renames its closing counterpart.
|
||||||
|
|
||||||
|
Requires the matching Treesitter parsers. `html`, `vue`, `tsx` and
|
||||||
|
`javascript` are already in treesitter.lua's `ensure_installed` list, and
|
||||||
|
the plugin no-ops in filetypes whose parser is missing, so a fresh machine
|
||||||
|
just needs a restart after the parsers are installed.
|
||||||
|
]]
|
||||||
|
|
||||||
|
return {
|
||||||
|
"windwp/nvim-ts-autotag",
|
||||||
|
-- Load events recommended upstream. BufReadPre/BufNewFile is sufficient
|
||||||
|
-- because the plugin only acts once a filetype's parser is available.
|
||||||
|
event = { "BufReadPre", "BufNewFile" },
|
||||||
|
config = function()
|
||||||
|
require("nvim-ts-autotag").setup({
|
||||||
|
opts = {
|
||||||
|
enable_close = true, -- `<div` + `>` -> `<div></div>`
|
||||||
|
enable_rename = true, -- `ciw` on the open tag renames the close tag
|
||||||
|
enable_close_on_slash = false, -- a trailing `</` does not autoclose
|
||||||
|
},
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
}
|
||||||
@@ -7,15 +7,63 @@
|
|||||||
"pyright": {
|
"pyright": {
|
||||||
"command": ["pyright-langserver", "--stdio"],
|
"command": ["pyright-langserver", "--stdio"],
|
||||||
"extensions": [".py"]
|
"extensions": [".py"]
|
||||||
|
},
|
||||||
|
"typescript": {
|
||||||
|
"command": ["typescript-language-server", "--stdio"],
|
||||||
|
"extensions": [".js", ".jsx", ".mjs", ".cjs", ".ts", ".tsx"]
|
||||||
|
},
|
||||||
|
"vue": {
|
||||||
|
"command": ["vue-language-server", "--stdio"],
|
||||||
|
"extensions": [".vue"]
|
||||||
|
},
|
||||||
|
"rust": {
|
||||||
|
"command": ["rust-analyzer"],
|
||||||
|
"extensions": [".rs"]
|
||||||
|
},
|
||||||
|
"bash": {
|
||||||
|
"command": ["bash-language-server", "start"],
|
||||||
|
"extensions": [".sh", ".bash"]
|
||||||
|
},
|
||||||
|
"json": {
|
||||||
|
"command": ["vscode-json-language-server", "--stdio"],
|
||||||
|
"extensions": [".json", ".jsonc"]
|
||||||
|
},
|
||||||
|
"yaml": {
|
||||||
|
"command": ["yaml-language-server", "--stdio"],
|
||||||
|
"extensions": [".yaml", ".yml"]
|
||||||
|
},
|
||||||
|
"html": {
|
||||||
|
"command": ["vscode-html-language-server", "--stdio"],
|
||||||
|
"extensions": [".html", ".htm"]
|
||||||
|
},
|
||||||
|
"css": {
|
||||||
|
"command": ["vscode-css-language-server", "--stdio"],
|
||||||
|
"extensions": [".css", ".scss", ".less"]
|
||||||
|
},
|
||||||
|
"go": {
|
||||||
|
"command": ["gopls", "serve"],
|
||||||
|
"extensions": [".go"]
|
||||||
|
},
|
||||||
|
"clangd": {
|
||||||
|
"command": ["clangd"],
|
||||||
|
"extensions": [".c", ".h", ".cc", ".cpp", ".cxx", ".hpp"]
|
||||||
|
},
|
||||||
|
"lua": {
|
||||||
|
"command": ["lua-language-server"],
|
||||||
|
"extensions": [".lua"]
|
||||||
|
},
|
||||||
|
"markdown": {
|
||||||
|
"command": ["marksman", "server"],
|
||||||
|
"extensions": [".md", ".markdown"]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
"provider": {
|
"providers": {
|
||||||
"lmstudio": {
|
"lmstudio": {
|
||||||
"npm": "@ai-sdk/openai-compatible",
|
"npm": "@ai-sdk/openai-compatible",
|
||||||
"name": "LM Studio (local)",
|
"name": "LM Studio (local)",
|
||||||
"options": {
|
"options": {
|
||||||
"baseURL": "http://192.168.0.4:1234/v1"
|
"baseURL": "http://127.0.0.1:1234"
|
||||||
},
|
},
|
||||||
"models": {
|
"models": {
|
||||||
"qwen3.5-35b-a3b": {
|
"qwen3.5-35b-a3b": {
|
||||||
@@ -32,30 +80,22 @@
|
|||||||
},
|
},
|
||||||
"qwen2.5-coder-1.5b-instruct": {
|
"qwen2.5-coder-1.5b-instruct": {
|
||||||
"name": "qwen2.5-coder-1.5b-instruct"
|
"name": "qwen2.5-coder-1.5b-instruct"
|
||||||
|
},
|
||||||
|
"google/gemma-4-e4b": {
|
||||||
|
"name": "google/gemma-4-e4b"
|
||||||
|
},
|
||||||
|
"qwen/qwen3.5-9b": {
|
||||||
|
"name": "qwen/qwen3.5-9b"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
"permission": {
|
"permissions": [
|
||||||
"bash": "allow",
|
{
|
||||||
"read": "allow",
|
"action": "edit",
|
||||||
"write": "ask",
|
"resource": "*",
|
||||||
"edit": "ask",
|
"effect": "ask"
|
||||||
"glob": "allow",
|
|
||||||
"grep": "allow",
|
|
||||||
"list": "allow",
|
|
||||||
"webfetch": "allow",
|
|
||||||
"websearch": "allow",
|
|
||||||
"question": "allow",
|
|
||||||
"todoread": "allow",
|
|
||||||
"todowrite": "allow",
|
|
||||||
"skill": "allow",
|
|
||||||
"patch": "allow",
|
|
||||||
"lsp": "allow"
|
|
||||||
},
|
|
||||||
|
|
||||||
"experimental": {
|
|
||||||
"lsp": true
|
|
||||||
}
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
[lint]
|
||||||
|
ignore = ["EXE002"]
|
||||||
+47
-82
@@ -1,4 +1,5 @@
|
|||||||
"$schema" = 'https://starship.rs/config-schema.json'
|
"$schema" = 'https://starship.rs/config-schema.json'
|
||||||
|
palette = "noctalia"
|
||||||
|
|
||||||
format = """
|
format = """
|
||||||
[](red)\
|
[](red)\
|
||||||
@@ -29,7 +30,6 @@ $character"""
|
|||||||
|
|
||||||
right_format = "$cmd_duration"
|
right_format = "$cmd_duration"
|
||||||
|
|
||||||
palette = 'catppuccin_mocha'
|
|
||||||
|
|
||||||
[os]
|
[os]
|
||||||
disabled = false
|
disabled = false
|
||||||
@@ -169,6 +169,11 @@ show_notifications = true
|
|||||||
min_time_to_notify = 45000
|
min_time_to_notify = 45000
|
||||||
min_time = 0
|
min_time = 0
|
||||||
|
|
||||||
|
# Central theme note: starship has no `include` mechanism, so this palette is
|
||||||
|
# a declared mirror of basic/.config/themes/themes/catppuccin-mocha (see
|
||||||
|
# theme.env.sh / theme.css for the source of truth). Only the active
|
||||||
|
# palette is kept here; switch flavors by replacing this block from the
|
||||||
|
# central theme (scripts/switch-theme.sh reminds you). Do not hand-edit hex.
|
||||||
[palettes.catppuccin_mocha]
|
[palettes.catppuccin_mocha]
|
||||||
rosewater = "#f5e0dc"
|
rosewater = "#f5e0dc"
|
||||||
flamingo = "#f2cdcd"
|
flamingo = "#f2cdcd"
|
||||||
@@ -197,86 +202,46 @@ base = "#1e1e2e"
|
|||||||
mantle = "#181825"
|
mantle = "#181825"
|
||||||
crust = "#11111b"
|
crust = "#11111b"
|
||||||
|
|
||||||
[palettes.catppuccin_frappe]
|
# >>> NOCTALIA STARSHIP PALETTE >>>
|
||||||
rosewater = "#f2d5cf"
|
# Noctalia Starship Palette
|
||||||
flamingo = "#eebebe"
|
# Generated by Noctalia - do not edit manually
|
||||||
pink = "#f4b8e4"
|
|
||||||
mauve = "#ca9ee6"
|
|
||||||
red = "#e78284"
|
|
||||||
maroon = "#ea999c"
|
|
||||||
peach = "#ef9f76"
|
|
||||||
yellow = "#e5c890"
|
|
||||||
green = "#a6d189"
|
|
||||||
teal = "#81c8be"
|
|
||||||
sky = "#99d1db"
|
|
||||||
sapphire = "#85c1dc"
|
|
||||||
blue = "#8caaee"
|
|
||||||
lavender = "#babbf1"
|
|
||||||
text = "#c6d0f5"
|
|
||||||
subtext1 = "#b5bfe2"
|
|
||||||
subtext0 = "#a5adce"
|
|
||||||
overlay2 = "#949cbb"
|
|
||||||
overlay1 = "#838ba7"
|
|
||||||
overlay0 = "#737994"
|
|
||||||
surface2 = "#626880"
|
|
||||||
surface1 = "#51576d"
|
|
||||||
surface0 = "#414559"
|
|
||||||
base = "#303446"
|
|
||||||
mantle = "#292c3c"
|
|
||||||
crust = "#232634"
|
|
||||||
|
|
||||||
[palettes.catppuccin_latte]
|
[palettes.noctalia]
|
||||||
rosewater = "#dc8a78"
|
# Standard colors
|
||||||
flamingo = "#dd7878"
|
blue = "#89b4fa"
|
||||||
pink = "#ea76cb"
|
red = "#f38ba8"
|
||||||
mauve = "#8839ef"
|
green = "#a6e3a1"
|
||||||
red = "#d20f39"
|
yellow = "#f9e2af"
|
||||||
maroon = "#e64553"
|
cyan = "#94e2d5"
|
||||||
peach = "#fe640b"
|
magenta = "#f5c2e7"
|
||||||
yellow = "#df8e1d"
|
white = "#a6adc8"
|
||||||
green = "#40a02b"
|
black = "#45475a"
|
||||||
teal = "#179299"
|
|
||||||
sky = "#04a5e5"
|
|
||||||
sapphire = "#209fb5"
|
|
||||||
blue = "#1e66f5"
|
|
||||||
lavender = "#7287fd"
|
|
||||||
text = "#4c4f69"
|
|
||||||
subtext1 = "#5c5f77"
|
|
||||||
subtext0 = "#6c6f85"
|
|
||||||
overlay2 = "#7c7f93"
|
|
||||||
overlay1 = "#8c8fa1"
|
|
||||||
overlay0 = "#9ca0b0"
|
|
||||||
surface2 = "#acb0be"
|
|
||||||
surface1 = "#bcc0cc"
|
|
||||||
surface0 = "#ccd0da"
|
|
||||||
base = "#eff1f5"
|
|
||||||
mantle = "#e6e9ef"
|
|
||||||
crust = "#dce0e8"
|
|
||||||
|
|
||||||
[palettes.catppuccin_macchiato]
|
# Extended palette (Catppuccin-compatible names)
|
||||||
rosewater = "#f4dbd6"
|
rosewater = "#ebd391"
|
||||||
flamingo = "#f0c6c6"
|
flamingo = "#f37799"
|
||||||
pink = "#f5bde6"
|
pink = "#f2aede"
|
||||||
mauve = "#c6a0f6"
|
mauve = "#f5c2e7"
|
||||||
red = "#ed8796"
|
maroon = "#f37799"
|
||||||
maroon = "#ee99a0"
|
peach = "#ebd391"
|
||||||
peach = "#f5a97f"
|
teal = "#94e2d5"
|
||||||
yellow = "#eed49f"
|
sky = "#6bd7ca"
|
||||||
green = "#a6da95"
|
sapphire = "#74a8fc"
|
||||||
teal = "#8bd5ca"
|
lavender = "#f2aede"
|
||||||
sky = "#91d7e3"
|
|
||||||
sapphire = "#7dc4e4"
|
# Text shades
|
||||||
blue = "#8aadf4"
|
text = "#cdd6f4"
|
||||||
lavender = "#b7bdf8"
|
subtext1 = "#a6adc8"
|
||||||
text = "#cad3f5"
|
subtext0 = "#585b70"
|
||||||
subtext1 = "#b8c0e0"
|
|
||||||
subtext0 = "#a5adcb"
|
# Surface shades
|
||||||
overlay2 = "#939ab7"
|
overlay2 = "#585b70"
|
||||||
overlay1 = "#8087a2"
|
overlay1 = "#585b70"
|
||||||
overlay0 = "#6e738d"
|
overlay0 = "#45475a"
|
||||||
surface2 = "#5b6078"
|
surface2 = "#45475a"
|
||||||
surface1 = "#494d64"
|
surface1 = "#45475a"
|
||||||
surface0 = "#363a4f"
|
surface0 = "#1e1e2e"
|
||||||
base = "#24273a"
|
base = "#1e1e2e"
|
||||||
mantle = "#1e2030"
|
mantle = "#1e1e2e"
|
||||||
crust = "#181926"
|
crust = "#1e1e2e"
|
||||||
|
# <<< NOCTALIA STARSHIP PALETTE <<<
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
#!/bin/bash
|
||||||
# Example session: demo
|
# Example session: demo
|
||||||
# Usage: tmuxifier load-session demo
|
# Usage: tmuxifier load-session demo
|
||||||
# Edit: tmuxifier edit-session demo
|
# Edit: tmuxifier edit-session demo
|
||||||
|
|||||||
+18
-10
@@ -42,6 +42,11 @@ bind x kill-pane
|
|||||||
# Auto-bootstrap TPM if not installed
|
# Auto-bootstrap TPM if not installed
|
||||||
if "test ! -d ~/.config/tmux/plugins/tpm" \
|
if "test ! -d ~/.config/tmux/plugins/tpm" \
|
||||||
"run 'git clone https://github.com/tmux-plugins/tpm ~/.config/tmux/plugins/tpm && ~/.config/tmux/plugins/tpm/bin/install_plugins'"
|
"run 'git clone https://github.com/tmux-plugins/tpm ~/.config/tmux/plugins/tpm && ~/.config/tmux/plugins/tpm/bin/install_plugins'"
|
||||||
|
# Auto-install missing plugins when TPM exists but a plugin dir is absent
|
||||||
|
# (e.g. a new @plugin was added after the first bootstrap).
|
||||||
|
# NOTE: TPM clones `user/repo` to `plugins/repo`, so catppuccin/tmux -> plugins/tmux.
|
||||||
|
if "test ! -d ~/.config/tmux/plugins/tmux" \
|
||||||
|
"run '~/.config/tmux/plugins/tpm/bin/install_plugins'"
|
||||||
|
|
||||||
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'
|
||||||
@@ -52,12 +57,14 @@ set -g @plugin 'jimeh/tmuxifier'
|
|||||||
|
|
||||||
# Persist sessions across reboots and restore them when tmux starts.
|
# Persist sessions across reboots and restore them when tmux starts.
|
||||||
set -g @continuum-save-interval '5'
|
set -g @continuum-save-interval '5'
|
||||||
set -g @continuum-restore 'on'
|
# set -g @continuum-restore 'on'
|
||||||
set -g @resurrect-capture-pane-contents 'on'
|
# set -g @resurrect-capture-pane-contents 'on'
|
||||||
|
|
||||||
# Catppuccin theme
|
# Central theme (basic/.config/themes): flavor comes from $CATPPUCCIN_FLAVOR
|
||||||
|
# (theme.env.sh / theme.fish), defaulting to mocha. The plugin itself is
|
||||||
|
# owned by TPM (see registry.conf for the theme -> plugin mapping).
|
||||||
set -g @plugin 'catppuccin/tmux'
|
set -g @plugin 'catppuccin/tmux'
|
||||||
set -g @catppuccin_flavor "mocha"
|
run-shell 'tmux set -g @catppuccin_flavor "${CATPPUCCIN_FLAVOR:-mocha}"'
|
||||||
set -g @catppuccin_window_status_style "rounded"
|
set -g @catppuccin_window_status_style "rounded"
|
||||||
|
|
||||||
set -g @catppuccin_window_text "#W"
|
set -g @catppuccin_window_text "#W"
|
||||||
@@ -67,16 +74,17 @@ set -g @catppuccin_window_current_text "#W"
|
|||||||
set-environment -g TMUXIFIER_LAYOUT_PATH "$HOME/.tmuxifier/layouts"
|
set-environment -g TMUXIFIER_LAYOUT_PATH "$HOME/.tmuxifier/layouts"
|
||||||
|
|
||||||
|
|
||||||
# ── Initialize TPM (must be last line before status bar) ──────────────────────
|
|
||||||
|
|
||||||
run '~/.config/tmux/plugins/tpm/tpm'
|
|
||||||
|
|
||||||
|
|
||||||
# ── Status bar ────────────────────────────────────────────────────────────────
|
# ── Status bar ────────────────────────────────────────────────────────────────
|
||||||
# (must come after TPM run so catppuccin variables are available)
|
# NOTE: #{E:@catppuccin_...} expands at display time, so this intentionally
|
||||||
|
# comes before `run tpm` (TPM requires `run tpm` to be the last line).
|
||||||
|
|
||||||
set -g status-position top
|
set -g status-position top
|
||||||
set -g status-left-length 100
|
set -g status-left-length 100
|
||||||
set -g status-right-length 100
|
set -g status-right-length 100
|
||||||
set -g status-left "#{E:@catppuccin_status_session}"
|
set -g status-left "#{E:@catppuccin_status_session}"
|
||||||
set -g status-right "#{E:@catppuccin_status_date_time}"
|
set -g status-right "#{E:@catppuccin_status_date_time}"
|
||||||
|
|
||||||
|
|
||||||
|
# ── Initialize TPM (must be last) ───────────────────────────────────────────
|
||||||
|
|
||||||
|
run '~/.config/tmux/plugins/tpm/tpm'
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
# Central theme note: yazi has no `include` mechanism, so this file is a
|
||||||
|
# declared mirror of basic/.config/themes/themes/catppuccin-mocha (Catppuccin
|
||||||
|
# Mocha). Do not hand-tweak hex values here; port them from the central theme.
|
||||||
|
# (Also note: syntect_theme below points at ~/.config/yazi/, which is not
|
||||||
|
# stowed on a fresh setup until `stow term` runs.)
|
||||||
[app]
|
[app]
|
||||||
overall = { bg = "#1e1e2e" }
|
overall = { bg = "#1e1e2e" }
|
||||||
|
|
||||||
@@ -152,7 +157,6 @@ files = [
|
|||||||
{ name = "dockerfile", text = "", fg = "#89b4fa" },
|
{ name = "dockerfile", text = "", fg = "#89b4fa" },
|
||||||
{ name = ".git-blame-ignore-revs", text = "", fg = "#fab387" },
|
{ name = ".git-blame-ignore-revs", text = "", fg = "#fab387" },
|
||||||
{ name = ".nvmrc", text = "", fg = "#a6e3a1" },
|
{ name = ".nvmrc", text = "", fg = "#a6e3a1" },
|
||||||
{ name = "hyprpaper.conf", text = "", fg = "#74c7ec" },
|
|
||||||
{ name = ".prettierignore", text = "", fg = "#89b4fa" },
|
{ name = ".prettierignore", text = "", fg = "#89b4fa" },
|
||||||
{ name = "rakefile", text = "", fg = "#313244" },
|
{ name = "rakefile", text = "", fg = "#313244" },
|
||||||
{ name = "code_of_conduct", text = "", fg = "#f38ba8" },
|
{ name = "code_of_conduct", text = "", fg = "#f38ba8" },
|
||||||
@@ -279,9 +283,7 @@ files = [
|
|||||||
{ name = "commitlint.config.js", text = "", fg = "#94e2d5" },
|
{ name = "commitlint.config.js", text = "", fg = "#94e2d5" },
|
||||||
{ name = ".gitmodules", text = "", fg = "#fab387" },
|
{ name = ".gitmodules", text = "", fg = "#fab387" },
|
||||||
{ name = "gradle-wrapper.properties", text = "", fg = "#585b70" },
|
{ name = "gradle-wrapper.properties", text = "", fg = "#585b70" },
|
||||||
{ name = "hypridle.conf", text = "", fg = "#74c7ec" },
|
|
||||||
{ name = "vercel.json", text = "▲", fg = "#f5e0dc" },
|
{ name = "vercel.json", text = "▲", fg = "#f5e0dc" },
|
||||||
{ name = "hyprlock.conf", text = "", fg = "#74c7ec" },
|
|
||||||
{ name = "go.sum", text = "", fg = "#74c7ec" },
|
{ name = "go.sum", text = "", fg = "#74c7ec" },
|
||||||
{ name = "kdenlive-layoutsrc", text = "", fg = "#89b4fa" },
|
{ name = "kdenlive-layoutsrc", text = "", fg = "#89b4fa" },
|
||||||
{ name = "gruntfile.babel.js", text = "", fg = "#fab387" },
|
{ name = "gruntfile.babel.js", text = "", fg = "#fab387" },
|
||||||
|
|||||||
@@ -9,3 +9,17 @@ id = "git"
|
|||||||
group = "git"
|
group = "git"
|
||||||
url = "*/"
|
url = "*/"
|
||||||
run = "git"
|
run = "git"
|
||||||
|
|
||||||
|
[opener]
|
||||||
|
imv = [
|
||||||
|
{ run = "imv %s", orphan = true, spread = false, desc = "imv" },
|
||||||
|
]
|
||||||
|
mpv = [
|
||||||
|
{ run = "mpv %s", orphan = true, spread = false, desc = "mpv" },
|
||||||
|
]
|
||||||
|
|
||||||
|
[open]
|
||||||
|
prepend_rules = [
|
||||||
|
{ mime = "image/*", use = "imv" },
|
||||||
|
{ mime = "video/*", use = "mpv" },
|
||||||
|
]
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
.config/tmux/plugins
|
||||||
-154
@@ -1,154 +0,0 @@
|
|||||||
#!/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
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user