terra: cosmic portals, jupiter smb mount, tea CLI, launcher/theme polish

- swap gtk portal/apps for cosmic (xdg-desktop-portal-cosmic, cosmic-files,
  cosmic-settings) and drop dolphin/protonplus/bambu-studio (bambu-studio
  moved to flatpak alongside the other comms/gaming flatpaks)
- mount jupiter's samba share at /mnt/jupiter (automount, credentials from
  the same samba_password secret jupiter itself uses)
- add tea (gitea's remote API CLI) for talking to git.mgaction.town from
  terra without SSHing into jupiter
- new dark icon themes (Amy, Azure Glassy, Slot Beauty) vendored from
  gnome-look.org tarballs, packaged since pling download links expire
- rishot: fix Qt5Compat.GraphicalEffects QML import (was missing qt6.qt5compat
  on QML_IMPORT_PATH, so quickshell failed at config-load)
- launcher widgets: stop LauncherConsole/LauncherDock from reserving
  compositor space (ExclusionMode.Ignore, they're overlays not real docks);
  bump LauncherCorner app icon size 28->34
- comms script: launch telegram/discord via flatpak, not native binaries
- nix-ld + boot.binfmt aarch64 emulation (for building/flashing mercury
  from terra)
This commit is contained in:
2026-07-29 21:43:43 +02:00
parent 585aff3652
commit faaf24ddc0
19 changed files with 375 additions and 109 deletions
+63 -26
View File
@@ -1,4 +1,4 @@
{ lib, ... }:
{ lib, pkgs, config, inputs, ... }:
# Hyprland config migrated from github.com/darman96/hyprland-dotfiles (the
# hyprlang `hypr/*.conf` files) into the home-manager lua-style `settings`
@@ -12,10 +12,12 @@
# own hyprland.lua.
#
# Deliberately NOT migrated:
# - hyprbars.conf / hyprredsquare.conf: config for the third-party plugins
# `hyprbevelbars` + `hyprredsquare`, which aren't packaged in nixpkgs. Load
# the plugins via `wayland.windowManager.hyprland.plugins` and re-add their
# config once they're available.
# - hyprbars.conf: config for the third-party `hyprbevelbars` plugin, which
# isn't packaged in nixpkgs. Load it via
# `wayland.windowManager.hyprland.plugins` and re-add its config once
# available. (hyprredsquare.conf's plugin was renamed hypr-chrome and
# rewritten since - it's wired in below via the `hypr-chrome` flake
# input instead, with its own `plugin.hyprchrome` config.)
# - hyprqt6engine.conf + `QT_QPA_PLATFORMTHEME=hyprqt6engine`: terra themes Qt
# through qtct/Dracula in home.nix, so that env var is left off to avoid a conflict.
# - hyprlock.conf: a separate program (use `programs.hyprlock` if wanted).
@@ -29,28 +31,35 @@
let
lua = lib.generators.mkLuaInline;
# Wallpaper images aren't checked into this repo (binary blobs) — pulled
# from the existing Wallhaven library on /mnt/hdd_01 instead. Picked once
# here rather than at runtime, since hyprpaper has no built-in "random"
# mode; re-pick and rebuild (or swap in real per-monitor selection) when
# this stops being a placeholder.
wallpaper = "/mnt/hdd_01/data/Pictures/Wallhaven/wallhaven-g7jg63.png";
# Dispatchers → the new hl.dsp.* API (signatures verified against hyprland
# 0.55's src/config/lua/bindings/LuaBindingsDispatchers.cpp).
dsp = {
exec = cmd: lua ''hl.dsp.exec_cmd("${cmd}")'';
global = name: lua ''hl.dsp.global("${name}")'';
exit = lua "hl.dsp.exit()";
killactive = lua "hl.dsp.window.close()";
togglefloating = lua ''hl.dsp.window.float({ action = "toggle" })'';
fullscreen = lua "hl.dsp.window.fullscreen()"; # mode 0
maximize = lua ''hl.dsp.window.fullscreen({ mode = "maximized" })''; # mode 1
exec = cmd: lua ''hl.dsp.exec_cmd("${cmd}")'';
global = name: lua ''hl.dsp.global("${name}")'';
exit = lua "hl.dsp.exit()";
killactive = lua "hl.dsp.window.close()";
togglefloating = lua ''hl.dsp.window.float({ action = "toggle" })'';
fullscreen = lua "hl.dsp.window.fullscreen()"; # mode 0
maximize = lua ''hl.dsp.window.fullscreen({ mode = "maximized" })''; # mode 1
togglegroup = lua "hl.dsp.group.toggle()";
changegroupactive = lua "hl.dsp.group.next()";
drag = lua "hl.dsp.window.drag()";
resizemouse = lua "hl.dsp.window.resize()";
movefocus = dir: lua ''hl.dsp.focus({ direction = "${dir}" })'';
movewindow = dir: lua ''hl.dsp.window.move({ direction = "${dir}" })'';
resizeactive = x: y:
drag = lua "hl.dsp.window.drag()";
resizemouse = lua "hl.dsp.window.resize()";
movefocus = dir: lua ''hl.dsp.focus({ direction = "${dir}" })'';
movewindow = dir: lua ''hl.dsp.window.move({ direction = "${dir}" })'';
resizeactive = x: y:
lua ''hl.dsp.window.resize({ x = ${toString x}, y = ${toString y}, relative = true })'';
workspace = n: lua ''hl.dsp.focus({ workspace = ${toString n} })'';
workspaceRef = s: lua ''hl.dsp.focus({ workspace = "${s}" })'';
movetoworkspace = n: lua ''hl.dsp.window.move({ workspace = ${toString n} })'';
togglespecial = name: lua ''hl.dsp.workspace.toggle_special("${name}")'';
workspace = n: lua ''hl.dsp.focus({ workspace = ${toString n} })'';
workspaceRef = s: lua ''hl.dsp.focus({ workspace = "${s}" })'';
movetoworkspace = n: lua ''hl.dsp.window.move({ workspace = ${toString n} })'';
togglespecial = name: lua ''hl.dsp.workspace.toggle_special("${name}")'';
};
bind = keys: dispatcher: { _args = [ keys dispatcher ]; };
@@ -65,14 +74,28 @@ let
];
in
{
services.hyprpaper = {
enable = true;
settings = {
ipc = "on";
splash = false;
preload = [ wallpaper ];
wallpaper = [
{ monitor = "DP-2"; path = wallpaper; }
{ monitor = "HDMI-A-1"; path = wallpaper; }
];
};
};
wayland.windowManager.hyprland = {
enable = true;
plugins = [ inputs.hypr-chrome.packages.${pkgs.stdenv.hostPlatform.system}.default ];
settings = {
# ---- colours (from colors.conf) ----
fg_color = { _var = "rgba(eeeeeeff)"; };
fg_accent = { _var = "rgba(FFD063ff)"; };
bg_color = { _var = "rgba(0F1012ff)"; };
bg_accent = { _var = "rgba(292C30ff)"; };
bg_accent = { _var = "rgba(40382fff)"; };
# ---- monitors ----
monitor = [
@@ -95,7 +118,15 @@ in
border_size = 1;
col = {
inactive_border = lua "bg_accent";
active_border = lua "fg_accent";
# Gradient: hyprland's lua gradient type (CLuaConfigGradient::parse)
# takes either a plain colour string or a table with a `colors`
# array (1+ entries) and an optional `angle` in DEGREES. The list
# entries may be literal "rgba(...)" strings or, as here, the
# `_var` locals declared above rendered raw via mkLuaInline.
active_border = {
colors = [ (lua "fg_accent") (lua "bg_accent") ];
angle = 45;
};
};
layout = "dwindle";
gaps_in = 4;
@@ -130,6 +161,8 @@ in
workspace_back_and_forth = true;
allow_workspace_cycles = true;
};
plugin.hyprchrome.enabled = true;
};
# ---- animations ----
@@ -150,6 +183,7 @@ in
{ _args = [ "XDG_CURRENT_DESKTOP" "Hyprland" ]; }
{ _args = [ "XDG_SESSION_DESKTOP" "Hyprland" ]; }
{ _args = [ "XDG_SESSION_TYPE" "wayland" ]; }
{ _args = [ "QT_QPA_PLATFORMTHEME" "qt6ct" ]; }
];
# ---- keybinds (keybinds.conf) ----
@@ -167,10 +201,11 @@ in
(bind "SUPER + CTRL + S" (dsp.global "quickshell:sidebar"))
(bind "SUPER + B" (dsp.exec "vivaldi"))
(bind "SUPER + E" (dsp.exec "dolphin"))
(bind "SUPER + E" (dsp.exec "cosmic-files"))
(bind "SUPER + SHIFT + G" (dsp.workspaceRef "game"))
(bind "SUPER + S" (dsp.exec "grim -o DP-2 ~/screenshot.png"))
(bind "SUPER + SHIFT + S" (dsp.exec "grimblast copy area --freeze"))
(bind "Print" (dsp.exec "rishot"))
(bind "SUPER + L" (dsp.exec "hyprlock"))
(bind "SUPER + W" (dsp.exec "waypaper --random"))
@@ -245,7 +280,7 @@ in
workspace_rule = [
{ workspace = "name:game"; monitor = "DP-2"; decorate = false; }
{ workspace = "special:terminal"; on_created_empty = "alacritty"; gaps_out = 256; }
{ workspace = "special:communications"; on_created_empty = "$HOME/.config/scripts/start-communications.sh"; gaps_out = 128; }
{ workspace = "special:communications"; on_created_empty = "${config.home.homeDirectory}/.config/scripts/start-communications.sh"; gaps_out = 128; }
{ workspace = "special:music"; on_created_empty = "com.blitzfc.qbz"; gaps_out = 128; }
{ workspace = "special:version_control"; on_created_empty = "com.axosoft.GitKraken"; gaps_out = 128; }
];
@@ -257,7 +292,7 @@ in
(lua ''
function()
hl.exec_cmd("systemctl --user start hyprpolkitagent")
hl.exec_cmd("vicinae server")
hl.exec_cmd("cosmic-settings-daemon")
hl.exec_cmd("quickshell")
hl.exec_cmd("alacritty", { workspace = "special:terminal silent" })
hl.exec_cmd("kbuildsycoca6 --noincremental")
@@ -266,4 +301,6 @@ in
};
};
};
xdg.portal.extraPortals = [ pkgs.xdg-desktop-portal-cosmic ];
}