Compare commits
13
Commits
5438f786a9
...
77f70e318c
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
77f70e318c | ||
|
|
8ec820976f | ||
|
|
6924c1e05e | ||
|
|
6cd9427b40 | ||
|
|
050efc2b71 | ||
|
|
8d81e802df | ||
|
|
a0e6ad88d1 | ||
|
|
71cedb7454 | ||
|
|
53b763ee4d | ||
|
|
e499e63a49 | ||
|
|
df5abce062 | ||
|
|
545485f3c5 | ||
|
|
519432d630 |
@@ -4,9 +4,12 @@ hypr/.config/hypr/env.sh
|
|||||||
hypr/.config/hypr/monitor_setup.lua
|
hypr/.config/hypr/monitor_setup.lua
|
||||||
# Noctalia template output (shell-owned, regenerated on palette change)
|
# Noctalia template output (shell-owned, regenerated on palette change)
|
||||||
hypr/.config/kitty/themes/noctalia.conf
|
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/cli.json
|
||||||
term/.config/opencode/service.json
|
term/.config/opencode/service.json
|
||||||
hypr/.config/hypr/scheme/current.lua
|
hypr/.config/hypr/scheme/current.lua
|
||||||
|
hypr/.config/hypr/env.lua
|
||||||
|
|||||||
@@ -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. |
|
| `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 + Noctalia shell config (Catppuccin Mocha) |
|
| `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 |
|
||||||
| `setup/` | Install/setup scripts + package lists (one subdir per target, shared helpers in `setup/lib/`; not stowed) |
|
| `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
|
# 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)
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -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 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 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:
|
||||||
@@ -61,7 +75,7 @@ Add/remove packages on separate lines. Lines starting with `#` are ignored, and
|
|||||||
|
|
||||||
```
|
```
|
||||||
@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
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
{
|
||||||
|
}
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
{
|
||||||
|
}
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
{
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"appearance": {
|
||||||
|
"transparency": {
|
||||||
|
"enabled": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"background": {
|
||||||
|
"wallpaperEnabled": 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
return {
|
||||||
|
-- Supported values: "noctalia" or "caelestia".
|
||||||
|
shell = "noctalia",
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
-- Generated by HyprMod
|
||||||
|
|
||||||
|
-- Monitors
|
||||||
|
hl.monitor({
|
||||||
|
output = "desc:AOC U27G4R XZ1R7HA004323",
|
||||||
|
disabled = false,
|
||||||
|
mode = "3840x2160@160.00Hz",
|
||||||
|
position = "-2560x0",
|
||||||
|
scale = 1.5,
|
||||||
|
bitdepth = 10,
|
||||||
|
cm = "hdredid",
|
||||||
|
sdrbrightness = 0.29,
|
||||||
|
sdrsaturation = 1.19,
|
||||||
|
sdr_min_luminance = 0,
|
||||||
|
sdr_max_luminance = 773,
|
||||||
|
min_luminance = 0,
|
||||||
|
max_luminance = 773,
|
||||||
|
max_avg_luminance = 456,
|
||||||
|
})
|
||||||
|
hl.monitor({
|
||||||
|
output = "desc:Acer Technologies XB253Q TH5EE0058521",
|
||||||
|
disabled = false,
|
||||||
|
mode = "1920x1080@60.00Hz",
|
||||||
|
position = "0x0",
|
||||||
|
scale = 1,
|
||||||
|
bitdepth = 10,
|
||||||
|
cm = "hdredid",
|
||||||
|
sdrbrightness = 0.5,
|
||||||
|
sdr_min_luminance = 0,
|
||||||
|
sdr_max_luminance = 763,
|
||||||
|
min_luminance = 0.02,
|
||||||
|
max_luminance = 763,
|
||||||
|
max_avg_luminance = 400,
|
||||||
|
})
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
|
|
||||||
require("env")
|
local env = require("env")
|
||||||
|
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")
|
hl.exec_cmd("bash ~/.config/hypr/env.sh")
|
||||||
|
|
||||||
-- ###############
|
-- ###############
|
||||||
@@ -29,14 +33,12 @@ hl.config({
|
|||||||
-- ##################
|
-- ##################
|
||||||
|
|
||||||
hl.on("hyprland.start", function()
|
hl.on("hyprland.start", function()
|
||||||
hl.exec_cmd("noctalia &")
|
if env.shell == "caelestia" then
|
||||||
end)
|
hl.exec_cmd("caelestia shell -d")
|
||||||
|
else -- env.shell == "noctalia"
|
||||||
hl.on("hyprland.start", function()
|
hl.exec_cmd("noctalia &")
|
||||||
|
end
|
||||||
hl.exec_cmd("hypridle &")
|
hl.exec_cmd("hypridle &")
|
||||||
end)
|
|
||||||
|
|
||||||
hl.on("hyprland.start", function()
|
|
||||||
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)
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
local var = require("modules.variables")
|
local var = require("modules.variables")
|
||||||
local command = require("modules.shell_commands")
|
local command = require("modules.shell_commands")
|
||||||
|
local env = require("env")
|
||||||
-- See https://wiki.hypr.land/Configuring/Keywords/
|
-- See https://wiki.hypr.land/Configuring/Keywords/
|
||||||
|
|
||||||
-- Example binds, see https://wiki.hypr.land/Configuring/Binds/ for more
|
-- Example binds, see https://wiki.hypr.land/Configuring/Binds/ for more
|
||||||
@@ -230,3 +231,11 @@ hl.bind(var.mainMod .. " + L", hl.dsp.exec_cmd(command.lock), { locked = true, d
|
|||||||
hl.bind(var.mainMod .. " + SHIFT + L", hl.dsp.exec_cmd(command.screensaver), { description = "Start screensaver (any key quits)" })
|
hl.bind(var.mainMod .. " + SHIFT + L", hl.dsp.exec_cmd(command.screensaver), { description = "Start screensaver (any key quits)" })
|
||||||
hl.bind(var.mainMod .. " + K", hl.dsp.exec_cmd(command.keybinds_show), { description = "Show keybind overview" })
|
hl.bind(var.mainMod .. " + K", hl.dsp.exec_cmd(command.keybinds_show), { description = "Show keybind overview" })
|
||||||
hl.bind(var.mainMod .. " + W", hl.dsp.exec_cmd(command.wallpaper_select), { description = "Wallpaper select" })
|
hl.bind(var.mainMod .. " + W", hl.dsp.exec_cmd(command.wallpaper_select), { description = "Wallpaper select" })
|
||||||
|
|
||||||
|
-- Caelestia extras
|
||||||
|
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
|
||||||
|
|||||||
@@ -1,13 +1,51 @@
|
|||||||
return {
|
|
||||||
session = "noctalia msg panel-toggle session",
|
local env = require("env")
|
||||||
logout = "command -v noctalia >/dev/null 2>&1 && noctalia msg session logout || hyprctl dispatch exit",
|
|
||||||
shutdown = "noctalia msg session shutdown",
|
local commands = {
|
||||||
reboot = "noctalia msg session reboot",
|
session = "",
|
||||||
menu = "noctalia msg panel-toggle launcher",
|
logout = "",
|
||||||
settings = "noctalia msg settings-toggle",
|
shutdown = "",
|
||||||
control_center = "noctalia msg panel-toggle control-center",
|
reboot = "",
|
||||||
lock = "noctalia msg session lock",
|
menu = "",
|
||||||
|
settings = "",
|
||||||
|
control_center = "",
|
||||||
|
lock = "",
|
||||||
screensaver = "sh ~/.config/hypr/scripts/screensaver-start.sh force",
|
screensaver = "sh ~/.config/hypr/scripts/screensaver-start.sh force",
|
||||||
wallpaper_select = "noctalia msg panel-toggle wallpaper",
|
wallpaper_select = "",
|
||||||
keybinds_show = "sh ~/.config/hypr/scripts/show-keybinds.sh",
|
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.lock = "noctalia msg session lock"
|
||||||
|
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.lock = "caelestia shell lock lock"
|
||||||
|
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
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ hl.window_rule({
|
|||||||
match = {
|
match = {
|
||||||
class = ".*(kitty|dolphin).*",
|
class = ".*(kitty|dolphin).*",
|
||||||
},
|
},
|
||||||
opacity = "0.80 0.70",
|
opacity = "0.90 0.80",
|
||||||
})
|
})
|
||||||
-- Noctalia shell surfaces: blur bars/panels/dock/notifications and let
|
-- Noctalia shell surfaces: blur bars/panels/dock/notifications and let
|
||||||
-- Noctalia run its own animations (no Hyprland layer animation on top).
|
-- Noctalia run its own animations (no Hyprland layer animation on top).
|
||||||
@@ -76,6 +76,16 @@ hl.layer_rule({
|
|||||||
blur = true,
|
blur = true,
|
||||||
blur_popups = 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({
|
hl.window_rule({
|
||||||
name = "noctalia-settings",
|
name = "noctalia-settings",
|
||||||
match = {
|
match = {
|
||||||
|
|||||||
@@ -1,2 +1,4 @@
|
|||||||
hyprland
|
hyprland
|
||||||
// idle looks good on you
|
// idle looks good on you
|
||||||
|
|
||||||
|
ArchTop is relaxing 🧘
|
||||||
|
|||||||
@@ -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
|
|
||||||
+13
-3
@@ -1,9 +1,15 @@
|
|||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Hyprland compositor package list for setup/hypr/setup.sh
|
# Hyprland compositor package list for setup/hypr/setup.sh
|
||||||
#
|
#
|
||||||
# Wayland compositor, screenshot tool and supporting utilities. The desktop
|
# Wayland compositor, screenshot tool and supporting utilities. Both desktop
|
||||||
# shell (bar, launcher, notifications, lock screen, wallpaper, idle, session
|
# shell frontends are installed: Noctalia and Caelestia. Select the one started
|
||||||
# menu) is Noctalia, not a set of standalone ecosystem tools.
|
# 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.
|
# - Lines starting with '#' and blank lines are ignored.
|
||||||
# - Use "@pacman", "@aur" or "@npm" markers to switch section.
|
# - Use "@pacman", "@aur" or "@npm" markers to switch section.
|
||||||
@@ -21,8 +27,12 @@ wl-clipboard
|
|||||||
hyprshot
|
hyprshot
|
||||||
brightnessctl
|
brightnessctl
|
||||||
noctalia
|
noctalia
|
||||||
|
wtype
|
||||||
|
|
||||||
@aur
|
@aur
|
||||||
hyprmod
|
hyprmod
|
||||||
|
caelestia-shell
|
||||||
|
caelestia-cli
|
||||||
|
aur/quickshell-git
|
||||||
hyprsaver
|
hyprsaver
|
||||||
python-terminaltexteffects
|
python-terminaltexteffects
|
||||||
|
|||||||
+59
-3
@@ -7,6 +7,62 @@ PACKAGES_FILE="$SETUP_DIR/packages.txt"
|
|||||||
# shellcheck source=../lib/common.sh
|
# shellcheck source=../lib/common.sh
|
||||||
source "$SETUP_DIR/../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.
|
# Post-install: run Hyprland environment & desktop integration scripts.
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
@@ -14,9 +70,6 @@ run_hypr_scripts() {
|
|||||||
local scripts_dir
|
local scripts_dir
|
||||||
scripts_dir="$(repo_root)/hypr/.config/hypr/scripts"
|
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 ..."
|
echo "==> Fuehre portal-host-override.sh aus ..."
|
||||||
bash "$scripts_dir/portal-host-override.sh"
|
bash "$scripts_dir/portal-host-override.sh"
|
||||||
|
|
||||||
@@ -33,8 +86,11 @@ main() {
|
|||||||
echo "==> Lese Paketliste: $PACKAGES_FILE"
|
echo "==> Lese Paketliste: $PACKAGES_FILE"
|
||||||
read_packages "$PACKAGES_FILE" pacman_pkgs aur_pkgs npm_pkgs
|
read_packages "$PACKAGES_FILE" pacman_pkgs aur_pkgs npm_pkgs
|
||||||
|
|
||||||
|
warn_about_quickshell_provider
|
||||||
install_all_pkgs pacman_pkgs aur_pkgs npm_pkgs
|
install_all_pkgs pacman_pkgs aur_pkgs npm_pkgs
|
||||||
|
verify_quickshell_runtime
|
||||||
|
|
||||||
|
ensure_shell_config
|
||||||
run_hypr_scripts
|
run_hypr_scripts
|
||||||
|
|
||||||
echo "Fertig. Hyprland und das Compositor-Okosystem sind eingerichtet."
|
echo "Fertig. Hyprland und das Compositor-Okosystem sind eingerichtet."
|
||||||
|
|||||||
+3
-1
@@ -68,7 +68,9 @@ install_aur_pkgs() {
|
|||||||
local -n _pkgs="$1"
|
local -n _pkgs="$1"
|
||||||
if ((${#_pkgs[@]})); then
|
if ((${#_pkgs[@]})); then
|
||||||
log "Installiere AUR-Pakete: ${_pkgs[*]}"
|
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
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -202,3 +202,46 @@ base = "#1e1e2e"
|
|||||||
mantle = "#181825"
|
mantle = "#181825"
|
||||||
crust = "#11111b"
|
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
@@ -110,7 +110,82 @@ for pkgdir in term basic utils hypr kreation; do
|
|||||||
done
|
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`
|
# Catches typos such as `setup/basic/setuo.sh`
|
||||||
# (missing '/') in Makefile targets.
|
# (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)
|
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/`.
|
# Catches bugs such as `stow nvim` when the actual package dir is `term/`.
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
echo "== Checking Makefile stow targets reference real package dirs =="
|
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)
|
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 (plus declared mirrors). See
|
||||||
# basic/.config/themes/scripts/sync-theme.sh.
|
# basic/.config/themes/scripts/sync-theme.sh.
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user