Compare commits

..
Author SHA1 Message Date
mathias2784 60db3ba63c new term packages 2026-10-05 20:59:10 +02:00
mathias2784 51b2cdb6a8 utils setup: add 'code' 2026-09-28 06:39:46 +02:00
mathias2784 b8f3861901 setup/README.md 2026-09-27 21:45:02 +02:00
mathias2784 a2efd03c15 setup: nfs-utils 2026-09-27 21:44:21 +02:00
mathias2784 ad61c53bfc hypr: include hyprmod default artifact, incl. existe guard 2026-09-27 15:25:57 +02:00
mathias2784 a316ad7221 gitignore hyprmod artifacts 2026-09-27 15:21:54 +02:00
mathias2784 e73f49282c hypr: fix noctalia idle 2026-09-27 08:26:15 +02:00
mathias2784 3c0fc3ae6b nvim: auto-closing html tags 2026-09-27 07:33:01 +02:00
mathias2784 dc1a319165 no nextcloud setup during make 2026-09-26 21:54:01 +02:00
mathias2784 1f0bde731e term: some more packages 2026-09-25 22:41:23 +02:00
mathias2784 6208eea2f8 hypr: no hypridle in caelestia 2026-09-25 20:11:03 +02:00
mathias2784 5bc878492e make setup hierarchy changes 2026-09-25 18:26:44 +02:00
mathias2784 73d1297c79 hypr: bugfix in loading envs 2026-09-25 16:26:39 +02:00
mathias2784 10c23c4d24 better env management 2026-09-25 15:57:38 +02:00
mathias2784 77f70e318c hypr fix setup issues 2026-09-25 14:26:30 +02:00
mathias2784 8ec820976f hypr env 2026-09-25 12:02:00 +02:00
mathias2784 6924c1e05e merge hypr-caelestia with conflict resolution 2026-09-25 11:57:58 +02:00
mathias2784 6cd9427b40 noctalia depend on env variable 2026-09-25 11:47:31 +02:00
mathias2784 050efc2b71 hypr setup: install quickshell standalone 2026-09-25 11:44:47 +02:00
mathias2784 8d81e802df Merge branch 'main' into hypr-caelestia 2026-09-24 22:55:09 +02:00
mathias2784 a0e6ad88d1 less transparancy 2026-09-24 22:54:55 +02:00
mathias2784 71cedb7454 starship theme from noctalia 2026-09-24 22:52:44 +02:00
mathias2784 53b763ee4d delete obsolete ensure-env script 2026-09-24 22:51:26 +02:00
mathias2784 5438f786a9 keybind for direct tmux 2026-09-24 20:32:55 +02:00
mathias2784 e80ccf74bb track noctalia 2026-09-24 20:32:19 +02:00
mathias2784 4b9b926c60 fish shortcuts for fd and rg 2026-09-24 17:43:08 +02:00
33 changed files with 659 additions and 130 deletions
+3 -1
View File
@@ -3,7 +3,6 @@ hypr/.config/hypr/env.conf
hypr/.config/hypr/env.sh
hypr/.config/hypr/monitor_setup.lua
# Noctalia template output (shell-owned, regenerated on palette change)
hypr/.config/hypr/noctalia.lua
hypr/.config/kitty/themes/noctalia.conf
# Caelestia runtime output (shell-owned, regenerated on scheme change)
hypr/.config/hypr/scheme/
@@ -13,3 +12,6 @@ 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
+4 -5
View File
@@ -13,19 +13,18 @@ term: basic
bash setup/term/setup.sh
stow term
utils: basic
utils: term
bash setup/utils/setup.sh
bash setup/nextcloud.sh
hypr: basic
hypr: utils
bash setup/hypr/setup.sh
stow hypr
kreation: basic
kreation: hypr
bash setup/kreation/setup.sh
stow kreation
buntes-monster: hypr kreation
buntes-monster: kreation
bash setup/buntes-monster-links.sh
# ---------------------------------------------------------------------------
+18 -4
View File
@@ -8,7 +8,7 @@ Personal configuration files for an Arch Linux workstation (Hyprland + Neovim +
|-----------|----------|
| `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 |
| `hypr/` | Hyprland compositor config + Noctalia shell config (Catppuccin Mocha) |
| `hypr/` | Hyprland compositor config + selectable Noctalia/Caelestia shell configs |
| `kreation/`| VST plugin (`MT-PowerDrumKit.vst3`) |
| `local_ai/`| Local AI / MCP tooling config |
| `setup/` | Install/setup scripts + package lists (one subdir per target, shared helpers in `setup/lib/`; not stowed) |
@@ -31,7 +31,7 @@ cd ~/.dotfiles
# 2. Install a target and symlink its files
make term # terminal + fish + kitty + nvim
make hypr # Hyprland (also pulls in basic + term)
make hypr # Hyprland + selectable Noctalia/Caelestia shells
make kreation # VST plugin (also pulls in basic)
```
@@ -45,10 +45,24 @@ Run `make <target>` from the repository root. Each target first runs the relevan
|--------|--------------|
| `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 `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 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
The terminal package list lives in a single editable file:
@@ -61,7 +75,7 @@ Add/remove packages on separate lines. Lines starting with `#` are ignored, and
```
@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
```
@@ -0,0 +1,2 @@
{
}
@@ -0,0 +1,2 @@
{
}
+15 -2
View File
@@ -4,10 +4,23 @@
"enabled": true
}
},
"background": {
"wallpaperEnabled": true
},
"general": {
"apps": {
"explorer": ["dolphin"],
"terminal": ["kitty"]
"audio": [
"supersonic-desktop"
],
"explorer": [
"dolphin"
],
"playback": [
"celluloid"
],
"terminal": [
"kitty"
]
}
},
"launcher": {
View File
+4
View File
@@ -0,0 +1,4 @@
return {
-- Supported values: "noctalia" or "caelestia".
shell = "noctalia",
}
+21 -20
View File
@@ -1,14 +1,28 @@
# hypridle.conf — idle stages: screensaver (300s, backend in modules/screensaver.lua) -> Noctalia lock (10min) -> DPMS off.
# hypridle.conf — screensaver only.
# Managed by dotfiles (stow hypr).
#
# NOTE: this Hyprland (hyprmod Lua runtime, 0.56.x) evaluates `hyprctl dispatch`
# args as Lua — classic `dispatch dpms off` syntax fails. Dispatchers must be
# hl.dsp.* expressions (e.g. hl.dsp.dpms(false)).
# IDLE OWNERSHIP: Noctalia owns dim / lock / screen-off / suspend via its own
# [idle] block in ~/.config/noctalia/config.toml. hypridle is started only for
# the Noctalia shell (see hyprland.lua) and contributes just the tte
# screensaver. Do not re-add lock/DPMS listeners here — that duplication is
# what made two idle managers fight over the same transitions.
#
# lock_cmd goes through scripts/lock.sh, which resolves the active shell from
# env.lua. That keeps a manually started hypridle under Caelestia from calling
# `noctalia ...` (which would silently do nothing).
#
# WARNING — do not add DPMS dispatchers back to this file. This Hyprland
# (hyprmod Lua runtime, 0.56.x) evaluates `hyprctl dispatch` args as Lua, and
# the dpms dispatcher takes a TABLE, not a boolean:
# WRONG (silently becomes a TOGGLE, ignoring the argument):
# hyprctl dispatch 'hl.dsp.dpms(true)'
# RIGHT:
# hyprctl dispatch 'hl.dsp.dpms({action="enable"})'
# A toggle in after_sleep_cmd turns the display OFF on resume, and with
# misc:key_press_enables_dpms = false nothing could wake it again.
general {
lock_cmd = pidof -q noctalia || noctalia msg session lock
before_sleep_cmd = loginctl lock-session
after_sleep_cmd = hyprctl dispatch 'hl.dsp.dpms(true)'
lock_cmd = ~/.config/hypr/scripts/lock.sh
}
# Screensaver via backend wrappers (switch backend in modules/screensaver.lua).
@@ -17,16 +31,3 @@ listener {
on-timeout = ~/.config/hypr/scripts/screensaver-start.sh
on-resume = ~/.config/hypr/scripts/screensaver-stop.sh
}
# 10min: lock via Noctalia (SUPER+L runs the same command).
listener {
timeout = 600
on-timeout = loginctl lock-session
}
# 10m30s: power off displays.
listener {
timeout = 630
on-timeout = hyprctl dispatch 'hl.dsp.dpms(false)'
on-resume = hyprctl dispatch 'hl.dsp.dpms(true)'
}
View File
+41 -15
View File
@@ -1,5 +1,18 @@
require("env")
local config_home = os.getenv("XDG_CONFIG_HOME") or os.getenv("HOME") .. "/.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
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
hl.exec_cmd("bash ~/.config/hypr/env.sh")
-- ###############
@@ -9,14 +22,6 @@ hl.exec_cmd("bash ~/.config/hypr/env.sh")
-- load default monitor config
require("modules.monitor_setup_default")
-- Only use monitor_setup if the file exists
local config_home = os.getenv("XDG_CONFIG_HOME") or os.getenv("HOME") .. "/.config"
local f = io.open(config_home .. "/hypr/monitor_setup.lua", "r")
if f then
f:close()
require("monitor_setup")
end
-- unscale XWayland
hl.config({
xwayland = {
@@ -29,14 +34,17 @@ hl.config({
-- ##################
hl.on("hyprland.start", function()
-- start selected shell
if env.shell == "caelestia" then
hl.exec_cmd("caelestia shell -d")
end)
hl.on("hyprland.start", function()
else -- default: "noctalia"
hl.exec_cmd("noctalia &")
end
-- activate hypridle when not using Caelestia (has its own idle-ing mechnism)
if env.shell ~= "caelestia" then
hl.exec_cmd("hypridle &")
end)
end
hl.on("hyprland.start", function()
hl.exec_cmd("sh ~/.config/hypr/scripts/portal-host-override.sh")
hl.exec_cmd("sh ~/.config/hypr/scripts/ensure-mime-defaults.sh")
end)
@@ -48,4 +56,22 @@ require("modules.keybinds")
require("modules.windows_and_workspaces")
-- HyprMod managed settings
require("hyprland-gui")
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")
end
+8 -4
View File
@@ -1,9 +1,11 @@
local var = require("modules.variables")
local command = require("modules.shell_commands")
local env = require("env")
-- 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), { description = "Open terminal (kitty)" })
hl.bind(var.mainMod .. " + ALT + RETURN", hl.dsp.exec_cmd(var.terminal_tmux), { description = "Open terminal (kitty)" })
hl.bind(var.mainMod .. " + Q", hl.dsp.window.close(), { description = "Close focused window" })
hl.bind(
var.mainMod .. " + ESCAPE",
@@ -231,7 +233,9 @@ hl.bind(var.mainMod .. " + K", hl.dsp.exec_cmd(command.keybinds_show), { descrip
hl.bind(var.mainMod .. " + W", hl.dsp.exec_cmd(command.wallpaper_select), { description = "Wallpaper select" })
-- Caelestia extras
hl.bind(var.mainMod .. " + SHIFT + V", hl.dsp.exec_cmd(command.clipboard), { description = "Clipboard history" })
hl.bind(var.mainMod .. " + period", hl.dsp.exec_cmd(command.emoji), { description = "Emoji picker" })
hl.bind(var.mainMod .. " + SHIFT + K", hl.dsp.exec_cmd(command.show_all), { description = "Toggle utilities" })
hl.bind("CTRL + ALT + C", hl.dsp.exec_cmd(command.clear_notifications), { description = "Clear notifications" })
if env.shell == "caelestia" then
hl.bind(var.mainMod .. " + SHIFT + V", hl.dsp.exec_cmd(command.clipboard), { description = "Clipboard history" })
hl.bind(var.mainMod .. " + period", hl.dsp.exec_cmd(command.emoji), { description = "Emoji picker" })
hl.bind(var.mainMod .. " + SHIFT + K", hl.dsp.exec_cmd(command.show_all), { description = "Toggle utilities" })
hl.bind("CTRL + ALT + C", hl.dsp.exec_cmd(command.clear_notifications), { description = "Clear notifications" })
end
+33
View File
@@ -0,0 +1,33 @@
-- Single source of truth for "how do I lock this session", keyed on the
-- active shell in env.lua. Consumed by two callers:
-- * scripts/lock.sh (hypridle's lock_cmd) - loaded via plain dofile
-- * modules/shell_commands.lua (SUPER+L) - loaded via require
--
-- Both contexts load this file, so it must NOT use require("env"): Lua's
-- default package.path is cwd-relative, and that only resolves inside
-- ~/.config/hypr. hypridle's cwd is not guaranteed. Resolve by path instead.
local config_home = os.getenv("XDG_CONFIG_HOME") or os.getenv("HOME") .. "/.config"
local prefix = config_home .. "/hypr/"
local function load_env()
local fid = io.open(prefix .. "env.lua")
if fid then
fid:close()
return dofile(prefix .. "env.lua")
end
return dofile(prefix .. "env_example.lua")
end
local LOCK = {
noctalia = "noctalia msg session lock",
caelestia = "caelestia shell lock lock",
}
local env = load_env()
return {
shell = env.shell,
-- nil for an unknown shell; scripts/lock.sh treats that as a hard error
-- rather than reporting success while nothing is actually locked.
cmd = LOCK[env.shell],
}
@@ -253,5 +253,8 @@ 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,
},
})
+50 -21
View File
@@ -1,24 +1,53 @@
-- Caelestia shell commands. This branch is caelestia-only;
-- revert to Noctalia by switching branches.
-- Caelestia drawers (see ScreenState.qml): bar, osd, session, launcher,
-- dashboard, utilities, sidebar. Wallpaper goes through the launcher
-- (type `>wallpaper`) or `caelestia wallpaper`.
return {
session = "caelestia shell drawers toggle session",
logout = "hyprctl dispatch exit",
shutdown = "systemctl poweroff",
reboot = "systemctl reboot",
menu = "caelestia shell drawers toggle launcher",
settings = "caelestia shell drawers toggle dashboard",
control_center = "caelestia shell drawers toggle sidebar",
lock = "caelestia shell lock lock",
wallpaper_select = "caelestia shell drawers toggle launcher && sleep 0.1 && wtype \">wallpaper \"",
clipboard = "caelestia clipboard",
clipboard_delete = "caelestia clipboard -d",
emoji = "caelestia emoji -p",
show_all = "caelestia shell drawers toggle utilities",
clear_notifications = "caelestia shell notifs clear",
keybinds_show = "sh ~/.config/hypr/scripts/show-keybinds.sh",
local env = require("env")
-- Shell-agnostic on purpose: the active shell is resolved inside lock.sh from
-- env.lua, so hypridle's lock_cmd and this bind cannot drift apart.
local LOCK = "~/.config/hypr/scripts/lock.sh"
local commands = {
session = "",
logout = "",
shutdown = "",
reboot = "",
menu = "",
settings = "",
control_center = "",
lock = LOCK,
screensaver = "sh ~/.config/hypr/scripts/screensaver-start.sh force",
wallpaper_select = "",
keybinds_show = "sh ~/.config/hypr/scripts/show-keybinds.sh",
clipboard = "",
clipboard_delete = "",
emoji = "",
show_all = "",
clear_notifications = "",
}
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"
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"
end
return commands
+4 -1
View File
@@ -9,12 +9,15 @@ local theme = dofile(os.getenv("HOME") .. "/.config/themes/current/theme.lua")
-- 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 = "kitty",
terminal = terminal,
terminal_tmux = terminal .. " -e tmux",
fileManager = "dolphin",
screenshot_folder = "~/Bilder/Screenshots/",
}
@@ -62,7 +62,7 @@ hl.window_rule({
match = {
class = ".*(kitty|dolphin).*",
},
opacity = "0.80 0.70",
opacity = "0.90 0.80",
})
-- Noctalia shell surfaces: blur bars/panels/dock/notifications and let
-- Noctalia run its own animations (no Hyprland layer animation on top).
+54
View File
@@ -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
}
-20
View File
@@ -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
+30
View File
@@ -0,0 +1,30 @@
#!/usr/bin/env bash
# lock.sh — lock the session with the active shell's own lock command.
# The mapping lives in modules/lock.lua (reads env.lua), so neither hypridle's
# lock_cmd nor the SUPER+L bind hardcodes a shell. This is what keeps a
# manually started hypridle under Caelestia from failing on `noctalia ...`.
#
# Usage: lock.sh (no args; safe to call while locked)
set -euo pipefail
# Resolve from this script's own location so it works through the
# ~/.config/hypr symlink and does not depend on XDG_CONFIG_HOME.
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
LOCK_LUA="$(cd "$SCRIPT_DIR/.." && pwd)/modules/lock.lua"
CMD="$(LOCK_LUA="$LOCK_LUA" lua -e 'print(dofile(os.getenv("LOCK_LUA")).cmd)' 2>/dev/null)" || {
echo "lock: cannot read modules/lock.lua" >&2
exit 1
}
# Empty here means env.lua named a shell with no known lock command. Fail loudly
# instead of exiting 0, or a caller would think the session got locked.
[[ -n "$CMD" ]] || {
echo "lock: no lock command for the active shell (check env.lua)" >&2
exit 1
}
# Word-split on purpose: CMD is a command line, not a single path.
# shellcheck disable=SC2086
exec $CMD
+1 -1
View File
@@ -16,7 +16,7 @@ input="$SCREENSAVER_TEXT"
[[ -f "$input" ]] || input="/etc/hostname"
while true; do
tte -i "$input" \
tte -i <(fastfetch --pipe) \
--frame-rate 60 --canvas-width 0 --canvas-height 0 \
--anchor-canvas c --anchor-text c \
--random-effect --exclude-effects dev_worm \
+4 -2
View File
@@ -50,8 +50,10 @@ resume_command = "brightnessctl -r"
[idle.behavior.kbd-off]
timeout = 300
action = "command"
command = "brightnessctl -sd rgb:kbd_backlight set 0"
resume_command = "brightnessctl -rd rgb:kbd_backlight"
# This ThinkPad exposes the keyboard backlight as tpacpi::kbd_backlight;
# the previous rgb:kbd_backlight matched no device and errored out silently.
command = "brightnessctl -sd tpacpi::kbd_backlight set 0"
resume_command = "brightnessctl -rd tpacpi::kbd_backlight"
[idle.behavior.lock]
timeout = 900
+86
View File
@@ -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
```
+11 -5
View File
@@ -1,10 +1,15 @@
# ---------------------------------------------------------------------------
# Hyprland compositor package list for setup/hypr/setup.sh
#
# Wayland compositor, screenshot tool and supporting utilities. The desktop
# shell (bar, launcher, notifications, lock screen, wallpaper, idle, session
# menu) on this branch is Caelestia (see hypr/.config/hypr/hyprland.lua:
# `caelestia shell -d`). Noctalia lives on main.
# 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.
@@ -21,12 +26,13 @@ wev
wl-clipboard
hyprshot
brightnessctl
noctalia
wtype
@aur
hyprmod
caelestia-shell
caelestia-cli
quickshell-git
aur/quickshell-git
hyprsaver
python-terminaltexteffects
+59 -3
View File
@@ -7,6 +7,62 @@ 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.
# ---------------------------------------------------------------------------
@@ -14,9 +70,6 @@ run_hypr_scripts() {
local scripts_dir
scripts_dir="$(repo_root)/hypr/.config/hypr/scripts"
echo "==> Fuehre ensure-env.sh aus ..."
bash "$scripts_dir/ensure-env.sh"
echo "==> Fuehre portal-host-override.sh aus ..."
bash "$scripts_dir/portal-host-override.sh"
@@ -33,8 +86,11 @@ main() {
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."
+3 -1
View File
@@ -68,7 +68,9 @@ install_aur_pkgs() {
local -n _pkgs="$1"
if ((${#_pkgs[@]})); then
log "Installiere AUR-Pakete: ${_pkgs[*]}"
yay -S --needed "${_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
}
+4
View File
@@ -37,6 +37,10 @@ fzf
locate
ttf-jetbrains-mono-nerd
ttf-font-awesome
btop
yt-dlp
ffmpeg
jc
@aur
opencode
+9
View File
@@ -11,6 +11,7 @@
# ---------------------------------------------------------------------------
@pacman
firefox
nextcloud-client
thunderbird
ktouch
@@ -20,3 +21,11 @@ wine-mono
wine-gecko
winetricks
rbw
darktable
gimp
localsend
nfs-utils
code
@aur
supersonic-desktop
+7
View File
@@ -141,3 +141,10 @@ export HSA_OVERRIDE_GFX_VERSION=11.0.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"
+7
View File
@@ -207,6 +207,13 @@ A feature-rich Neovim setup optimized for Python, JSON, and CSV development.
- **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)
- **Treesitter**: Syntax highlighting
- **No wrap**: Full row visibility
@@ -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,
}
+44 -1
View File
@@ -1,4 +1,5 @@
"$schema" = 'https://starship.rs/config-schema.json'
palette = "noctalia"
format = """
[](red)\
@@ -29,7 +30,6 @@ $character"""
right_format = "$cmd_duration"
palette = 'catppuccin_mocha'
[os]
disabled = false
@@ -202,3 +202,46 @@ base = "#1e1e2e"
mantle = "#181825"
crust = "#11111b"
# >>> NOCTALIA STARSHIP PALETTE >>>
# Noctalia Starship Palette
# Generated by Noctalia - do not edit manually
[palettes.noctalia]
# Standard colors
blue = "#89b4fa"
red = "#f38ba8"
green = "#a6e3a1"
yellow = "#f9e2af"
cyan = "#94e2d5"
magenta = "#f5c2e7"
white = "#a6adc8"
black = "#45475a"
# Extended palette (Catppuccin-compatible names)
rosewater = "#ebd391"
flamingo = "#f37799"
pink = "#f2aede"
mauve = "#f5c2e7"
maroon = "#f37799"
peach = "#ebd391"
teal = "#94e2d5"
sky = "#6bd7ca"
sapphire = "#74a8fc"
lavender = "#f2aede"
# Text shades
text = "#cdd6f4"
subtext1 = "#a6adc8"
subtext0 = "#585b70"
# Surface shades
overlay2 = "#585b70"
overlay1 = "#585b70"
overlay0 = "#45475a"
surface2 = "#45475a"
surface1 = "#45475a"
surface0 = "#1e1e2e"
base = "#1e1e2e"
mantle = "#1e1e2e"
crust = "#1e1e2e"
# <<< NOCTALIA STARSHIP PALETTE <<<
+78 -3
View File
@@ -110,7 +110,82 @@ for pkgdir in term basic utils hypr kreation; do
done
# ---------------------------------------------------------------------------
# 5. Makefile <-> setup script name consistency.
# 5. Keep Caelestia on the upstream AUR Quickshell runtime.
# ---------------------------------------------------------------------------
echo "== Checking Quickshell package selection =="
PACKAGE_FILES=()
for pkgdir in term basic utils hypr kreation; do
PACKAGE_FILES+=("setup/$pkgdir/packages.txt")
done
has_package() {
local target="$1" file
shift
for file in "$@"; do
if awk -v target="$target" '
{
sub(/#.*/, "")
gsub(/^[[:space:]]+|[[:space:]]+$/, "")
sub(/^[^/]+\//, "")
}
$0 == target { found = 1 }
END { exit(found ? 0 : 1) }
' "$file"; then
return 0
fi
done
return 1
}
has_aur_package() {
local target="$1" file
shift
for file in "$@"; do
if awk -v target="$target" '
{
sub(/#.*/, "")
gsub(/^[[:space:]]+|[[:space:]]+$/, "")
}
$0 == "@aur" { in_aur = 1; next }
/^@/ { in_aur = 0; next }
in_aur && $0 == target { found = 1 }
END { exit(found ? 0 : 1) }
' "$file"; then
return 0
fi
done
return 1
}
if has_package quickshell "${PACKAGE_FILES[@]}" && has_package quickshell-git "${PACKAGE_FILES[@]}"; then
say_fail "package lists declare both quickshell and quickshell-git"
else
say_pass "no mutually exclusive quickshell packages declared"
fi
if has_package noctalia-qs "${PACKAGE_FILES[@]}"; then
say_fail "package lists must not install noctalia-qs for Caelestia"
else
say_pass "incompatible noctalia-qs provider is not declared"
fi
if has_aur_package aur/quickshell-git "${PACKAGE_FILES[@]}"; then
say_pass "quickshell-git is explicitly selected from the AUR"
else
say_fail "quickshell-git must use the explicit aur/quickshell-git target"
fi
if awk '
/^[[:space:]]*yay[[:space:]]+-S/ && /--aur/ && /--needed/ { found = 1 }
END { exit(found ? 0 : 1) }
' setup/lib/common.sh; then
say_pass "AUR package installation uses yay --aur mode"
else
say_fail "AUR package installation does not use yay --aur mode"
fi
# ---------------------------------------------------------------------------
# 6. Makefile <-> setup script name consistency.
# Catches typos such as `setup/basic/setuo.sh`
# (missing '/') in Makefile targets.
# ---------------------------------------------------------------------------
@@ -126,7 +201,7 @@ while IFS= read -r tok; do
done < <(grep -P '^\t' Makefile | grep -oE 'setup/[_A-Za-z0-9./-]+\.sh' | sort -u)
# ---------------------------------------------------------------------------
# 6. Makefile <-> stow package name consistency.
# 7. Makefile <-> stow package name consistency.
# Catches bugs such as `stow nvim` when the actual package dir is `term/`.
# ---------------------------------------------------------------------------
echo "== Checking Makefile stow targets reference real package dirs =="
@@ -156,7 +231,7 @@ while IFS= read -r pkg; do
done < <(grep -P '^\t' Makefile | grep -E '\bstow\b' | awk '{print $NF}' | sort -u)
# ---------------------------------------------------------------------------
# 7. Central theme drift guard: no hardcoded theme colors outside
# 8. Central theme drift guard: no hardcoded theme colors outside
# basic/.config/themes (plus declared mirrors). See
# basic/.config/themes/scripts/sync-theme.sh.
# ---------------------------------------------------------------------------