Compare commits
49
Commits
fbaa4f170a
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
244358a99e | ||
|
|
47b461c4c0 | ||
|
|
8e783f894d | ||
|
|
f746a52f88 | ||
|
|
6e60829987 | ||
|
|
17f790d1ca | ||
|
|
030e27b13b | ||
|
|
b314a97e69 | ||
|
|
28a9d1b39a | ||
|
|
a0205f9958 | ||
|
|
cb73339adc | ||
|
|
89c3ff257d | ||
|
|
7520a1a5fb | ||
|
|
134904ce2c | ||
|
|
db4fc948d8 | ||
|
|
7584da9115 | ||
|
|
145f9171a0 | ||
|
|
644ee876e1 | ||
|
|
25dba3fe64 | ||
|
|
b407185d1f | ||
|
|
f71da3aea0 | ||
|
|
730d01e1dd | ||
|
|
01690ce658 | ||
|
|
5c7bdb0ed8 | ||
|
|
918cab2d3d | ||
|
|
00c5e8653f | ||
|
|
383b2aa29c | ||
|
|
33d3bf60a0 | ||
|
|
50950ac071 | ||
|
|
a4c7461958 | ||
|
|
d75219ad2b | ||
|
|
39a39d359a | ||
|
|
3532c50ba4 | ||
|
|
f703b52d44 | ||
|
|
e15dd0a6c5 | ||
|
|
2a7059783b | ||
|
|
f9d4ab8c33 | ||
|
|
f36e978846 | ||
|
|
52a5409495 | ||
|
|
e3f8f8a742 | ||
|
|
22e8229903 | ||
|
|
a8d2f457eb | ||
|
|
31932b956b | ||
|
|
30eaba9971 | ||
|
|
e644f32cfe | ||
|
|
428ec75bd4 | ||
|
|
a5a9bbfd26 | ||
|
|
23aacf1900 | ||
|
|
d73822bacb |
@@ -0,0 +1,9 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Categories=Utility;
|
||||||
|
Comment=OpenRGB 1.0
|
||||||
|
Icon=OpenRGB
|
||||||
|
Name=OpenRGB
|
||||||
|
StartupNotify=true
|
||||||
|
Terminal=false
|
||||||
|
Type=Application
|
||||||
|
Exec=/usr/bin/openrgb --startminimized --server
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Type=Application
|
||||||
|
Version=1.0
|
||||||
|
Name=RQuickShare
|
||||||
|
Comment=RQuickSharestartup script
|
||||||
|
Exec=/usr/bin/rquickshare
|
||||||
|
StartupNotify=false
|
||||||
|
Terminal=false
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
--theme="Nord"
|
--theme="Catppuccin Frappe"
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,8 @@
|
|||||||
|
# style name or JSON path (default "auto")
|
||||||
|
style: "auto"
|
||||||
|
# mouse support (TUI-mode only)
|
||||||
|
mouse: false
|
||||||
|
# use pager to display markdown
|
||||||
|
pager: false
|
||||||
|
# word-wrap at width
|
||||||
|
width: 80
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
-- Default curves and animations, see https://wiki.hypr.land/Configuring/Advanced-and-Cool/Animations/
|
||||||
|
|
||||||
|
-- Default beziers
|
||||||
|
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} } })
|
||||||
|
hl.curve("overshoot", { type = "bezier", points = { {0.5, 0.9}, {0.1, 1.1} } })
|
||||||
|
|
||||||
|
-- Default springs
|
||||||
|
hl.curve("easy", { type = "spring", mass = 1, stiffness = 500, dampening = 35 })
|
||||||
|
hl.curve("rubber", { type = "spring", mass = 1, stiffness = 200, dampening = 15 })
|
||||||
|
|
||||||
|
-- Animations
|
||||||
|
hl.animation({ leaf = "global", enabled = true, speed = 3, bezier = "quick" })
|
||||||
|
hl.animation({ leaf = "windows", enabled = true, speed = 3, spring = "easy", style = "slide" })
|
||||||
|
hl.animation({ leaf = "workspaces", enabled = true, speed = 5, bezier = "quick", style = "slide" })
|
||||||
|
hl.animation({ leaf = "specialWorkspaceIn", enabled = true, speed = 2, bezier = "quick", style = "slide top"})
|
||||||
|
hl.animation({ leaf = "specialWorkspaceOut", enabled = true, speed = 2, bezier = "quick", style = "slide bottom"})
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
-- Auto-start config
|
||||||
|
-- if you dont use UWSM add your auto start programs here, otherwise use XDG autostart https://wiki.archlinux.org/title/XDG_Autostart
|
||||||
|
|
||||||
|
hl.on("hyprland.start", function ()
|
||||||
|
hl.exec_cmd("dbus-update-activation-environment --systemd --all")
|
||||||
|
hl.exec_cmd("noctalia")
|
||||||
|
hl.exec_cmd("xhost +SI:localuser:root")
|
||||||
|
end)
|
||||||
@@ -0,0 +1,138 @@
|
|||||||
|
local mainMod = "SUPER"
|
||||||
|
local noctCall = "noctalia msg "
|
||||||
|
local launchPrefix = "uwsm app -- " -- if you are not using UWSM, make this empty (e.g. "")
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
---- WINDOW MANAGEMENT ----
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
-- Window manipulation
|
||||||
|
hl.bind(mainMod .. " + Escape", hl.dsp.exec_cmd("hyprctl kill"))
|
||||||
|
hl.bind(mainMod .. " + Q", hl.dsp.window.close())
|
||||||
|
hl.bind(mainMod .. " + ALT + Space", hl.dsp.window.float({ action = "toggle" }))
|
||||||
|
hl.bind(mainMod .. " + D", hl.dsp.window.fullscreen({ mode = 1 }))
|
||||||
|
hl.bind(mainMod .. " + F", hl.dsp.window.fullscreen())
|
||||||
|
hl.bind(mainMod .. " + J", hl.dsp.layout("togglesplit"))
|
||||||
|
|
||||||
|
-- Change focus
|
||||||
|
hl.bind(mainMod .. " + Left", hl.dsp.focus({ direction = "left" }))
|
||||||
|
hl.bind(mainMod .. " + Right", hl.dsp.focus({ direction = "right" }))
|
||||||
|
hl.bind(mainMod .. " + Up", hl.dsp.focus({ direction = "up" }))
|
||||||
|
hl.bind(mainMod .. " + Down", hl.dsp.focus({ direction = "down" }))
|
||||||
|
hl.bind("ALT + Tab", hl.dsp.window.cycle_next())
|
||||||
|
hl.bind(mainMod .. " + Tab", hl.dsp.exec_cmd(noctCall .. "window-switcher"))
|
||||||
|
|
||||||
|
-- Move active window around workspaces & monitors
|
||||||
|
hl.bind(mainMod .. " + SHIFT + Up", hl.dsp.window.move({ direction = "u" }))
|
||||||
|
hl.bind(mainMod .. " + SHIFT + Right", hl.dsp.window.move({ direction = "r" }))
|
||||||
|
hl.bind(mainMod .. " + SHIFT + Left", hl.dsp.window.move({ direction = "l" }))
|
||||||
|
hl.bind(mainMod .. " + SHIFT + Down", hl.dsp.window.move({ direction = "d" }))
|
||||||
|
hl.bind(mainMod .. " + SHIFT + 1", hl.dsp.window.move({ monitor = MONITOR1 }))
|
||||||
|
hl.bind(mainMod .. " + SHIFT + 2", hl.dsp.window.move({ monitor = MONITOR2 }))
|
||||||
|
hl.bind(mainMod .. " + SHIFT + 3", hl.dsp.window.move({ monitor = MONITOR3 }))
|
||||||
|
hl.bind(mainMod .. " + SHIFT + mouse_up", hl.dsp.window.move({ monitor = "-1" }))
|
||||||
|
hl.bind(mainMod .. " + SHIFT + mouse_down", hl.dsp.window.move({ monitor = "+1" }))
|
||||||
|
hl.bind(mainMod .. " + CONTROL + SHIFT + Right", hl.dsp.window.move({ workspace = "m+1" }))
|
||||||
|
hl.bind(mainMod .. " + CONTROL + SHIFT + Left", hl.dsp.window.move({ workspace = "m-1" }))
|
||||||
|
hl.bind(mainMod .. " + CONTROL + SHIFT + mouse_up", hl.dsp.window.move({ workspace = "m-1" }))
|
||||||
|
hl.bind(mainMod .. " + CONTROL + SHIFT + mouse_down", hl.dsp.window.move({ workspace = "m+1" }))
|
||||||
|
for i = 1, NUM_WPM do
|
||||||
|
local key = i % 10
|
||||||
|
hl.bind(mainMod .. " + SHIFT + CONTROL + " .. key, hl.dsp.window.move({ workspace = "m~" .. i }))
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Move & Resize with mouse
|
||||||
|
hl.bind(mainMod .. " + mouse:272", hl.dsp.window.drag())
|
||||||
|
hl.bind(mainMod .. " + mouse:273", hl.dsp.window.resize())
|
||||||
|
|
||||||
|
------------------
|
||||||
|
---- LAUNCHER ----
|
||||||
|
------------------
|
||||||
|
|
||||||
|
hl.bind(mainMod .. " + Return", hl.dsp.exec_cmd(launchPrefix .. TERMINAL))
|
||||||
|
hl.bind(mainMod .. " + E", hl.dsp.exec_cmd(launchPrefix .. FILE_MANAGER))
|
||||||
|
hl.bind(mainMod .. " + T", hl.dsp.exec_cmd(launchPrefix .. EDITOR))
|
||||||
|
hl.bind(mainMod .. " + C", hl.dsp.exec_cmd(launchPrefix .. CALCULATOR))
|
||||||
|
hl.bind("XF86Calculator", hl.dsp.exec_cmd(launchPrefix .. CALCULATOR))
|
||||||
|
hl.bind(mainMod .. " + W", hl.dsp.exec_cmd(launchPrefix .. BROWSER))
|
||||||
|
hl.bind("CONTROL + SHIFT + Escape", hl.dsp.exec_cmd(launchPrefix .. TERMINAL .. " -e btop"))
|
||||||
|
hl.bind(mainMod .. " + Z", hl.dsp.exec_cmd(noctCall .. "settings-toggle"))
|
||||||
|
hl.bind(mainMod .. " + X", hl.dsp.exec_cmd(noctCall .. "panel-toggle control-center"))
|
||||||
|
hl.bind(mainMod .. " + Space", hl.dsp.exec_cmd(noctCall .. "panel-toggle launcher"))
|
||||||
|
hl.bind(mainMod .. " + period", hl.dsp.exec_cmd(noctCall .. "panel-toggle launcher /emo"))
|
||||||
|
hl.bind(mainMod .. " + L", hl.dsp.exec_cmd(noctCall .. "session lock"))
|
||||||
|
hl.bind(mainMod .. " + ALT + C", hl.dsp.exec_cmd(noctCall .. "panel-toggle session"))
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
---- HARDWARE CONTROLS ----
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
-- Audio
|
||||||
|
hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd(noctCall .. "volume-up"), { locked = true, repeating = true })
|
||||||
|
hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd(noctCall .. "volume-down"), { locked = true, repeating = true })
|
||||||
|
hl.bind("XF86AudioMute", hl.dsp.exec_cmd(noctCall .. "volume-mute"), { locked = true })
|
||||||
|
hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd(noctCall .. "mic-mute"), { locked = true })
|
||||||
|
|
||||||
|
-- Media
|
||||||
|
hl.bind("XF86AudioPlay", hl.dsp.exec_cmd(noctCall .. "media toggle"), { locked = true })
|
||||||
|
hl.bind("XF86AudioPause", hl.dsp.exec_cmd(noctCall .. "media toggle"), { locked = true })
|
||||||
|
hl.bind("XF86AudioNext", hl.dsp.exec_cmd(noctCall .. "media next"), { locked = true })
|
||||||
|
hl.bind("XF86AudioPrev", hl.dsp.exec_cmd(noctCall .. "media previous"), { locked = true })
|
||||||
|
|
||||||
|
-- Brightness
|
||||||
|
hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd(noctCall .. "brightness-up"), { locked = true, repeating = true })
|
||||||
|
hl.bind("XF86MonBrightnessDown", hl.dsp.exec_cmd(noctCall .. "brightness-down"), { locked = true, repeating = true })
|
||||||
|
|
||||||
|
-------------------
|
||||||
|
---- UTILITIES ----
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
-- Screen Capture
|
||||||
|
hl.bind(mainMod .. " + P", hl.dsp.exec_cmd("hyprpicker -a -n"))
|
||||||
|
hl.bind("Print", hl.dsp.exec_cmd(noctCall .. "screenshot-region"))
|
||||||
|
hl.bind(mainMod .. " + Print", hl.dsp.exec_cmd(noctCall .. "screenshot-fullscreen"))
|
||||||
|
|
||||||
|
-- Theming and Wallpaper
|
||||||
|
hl.bind(mainMod .. " + SHIFT + W", hl.dsp.exec_cmd(noctCall .. "panel-toggle wallpaper"))
|
||||||
|
|
||||||
|
-- Clipboard
|
||||||
|
hl.bind(mainMod .. " + V", hl.dsp.exec_cmd(noctCall .. "panel-toggle clipboard"))
|
||||||
|
|
||||||
|
-- Notifications
|
||||||
|
hl.bind(mainMod .. " + A", hl.dsp.exec_cmd(noctCall .. "panel-toggle control-center notifications"))
|
||||||
|
|
||||||
|
-------------------------------
|
||||||
|
---- WORKSPACES & MONITORS ----
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
-- Focus on monitors
|
||||||
|
hl.bind(mainMod .. " + 1", hl.dsp.focus({ monitor = MONITOR1 }))
|
||||||
|
hl.bind(mainMod .. " + 2", hl.dsp.focus({ monitor = MONITOR2 }))
|
||||||
|
hl.bind(mainMod .. " + 3", hl.dsp.focus({ monitor = MONITOR3 }))
|
||||||
|
|
||||||
|
-- Focus on workspace number
|
||||||
|
-- Absolute
|
||||||
|
for i = 1, NUM_WPM do
|
||||||
|
local key = i % 10
|
||||||
|
hl.bind(mainMod .. " + TAB + " .. key, hl.dsp.focus({ workspace = i }))
|
||||||
|
end
|
||||||
|
-- Relative
|
||||||
|
for i = 1, NUM_WPM do
|
||||||
|
local key = i % 10
|
||||||
|
hl.bind(mainMod .. " + CONTROL + " .. key, hl.dsp.focus({ workspace = "m~" .. i }))
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Move to adjacent workspaces and next empty on a given monitor
|
||||||
|
hl.bind(mainMod .. " + CONTROL + Right", hl.dsp.focus({ workspace = "m+1" }))
|
||||||
|
hl.bind(mainMod .. " + CONTROL + Left", hl.dsp.focus({ workspace = "m-1" }))
|
||||||
|
hl.bind(mainMod .. " + CONTROL + Down", hl.dsp.focus({ workspace = "emptym" }))
|
||||||
|
|
||||||
|
-- Scroll through existing workspaces & monitors
|
||||||
|
hl.bind(mainMod .. " + mouse_down", hl.dsp.focus({ workspace = "m-1" }))
|
||||||
|
hl.bind(mainMod .. " + mouse_up", hl.dsp.focus({ workspace = "m+1" }))
|
||||||
|
hl.bind(mainMod .. " + CONTROL + mouse_up", hl.dsp.focus({ workspace = "m-1" }))
|
||||||
|
hl.bind(mainMod .. " + CONTROL + mouse_down", hl.dsp.focus({ workspace = "m+1" }))
|
||||||
|
|
||||||
|
-- Special workspace (scratchpad)
|
||||||
|
hl.bind(mainMod .. " + SHIFT + S", hl.dsp.window.move({ workspace = "special" }))
|
||||||
|
hl.bind(mainMod .. " + S", hl.dsp.workspace.toggle_special())
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
-- Cachy colors
|
||||||
|
|
||||||
|
CACHYLGREEN = "rgba(82dcccff)"
|
||||||
|
CACHYMGREEN = "rgba(00aa84ff)"
|
||||||
|
CACHYDGREEN = "rgba(007d6fff)"
|
||||||
|
CACHYLBLUE = "rgba(01ccffff)"
|
||||||
|
CACHYMBLUE = "rgba(182545ff)"
|
||||||
|
CACHYDBLUE = "rgba(111826ff)"
|
||||||
|
CACHYWHITE = "rgba(ffffffff)"
|
||||||
|
CACHYGREY = "rgba(ddddddff)"
|
||||||
|
CACHYGRAY = "rgba(798bb2ff)"
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
-- Look and feel configuration
|
||||||
|
|
||||||
|
hl.config({
|
||||||
|
general = {
|
||||||
|
gaps_in = 3,
|
||||||
|
gaps_out = 8,
|
||||||
|
border_size = 2,
|
||||||
|
extend_border_grab_area = 10,
|
||||||
|
resize_on_border = true,
|
||||||
|
col = {
|
||||||
|
active_border = {
|
||||||
|
colors = { CACHYLGREEN, CACHYDGREEN },
|
||||||
|
angle = 45,
|
||||||
|
},
|
||||||
|
inactive_border = CACHYGRAY,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
group = {
|
||||||
|
col = {
|
||||||
|
border_active = CACHYLBLUE,
|
||||||
|
border_inactive = CACHYGRAY,
|
||||||
|
border_locked_active = CACHYDBLUE,
|
||||||
|
border_locked_inactive = CACHYGRAY,
|
||||||
|
},
|
||||||
|
groupbar = {
|
||||||
|
col = {
|
||||||
|
active = CACHYLGREEN,
|
||||||
|
inactive = CACHYGRAY,
|
||||||
|
locked_active = CACHYDBLUE,
|
||||||
|
locked_inactive = CACHYGRAY,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
decoration = {
|
||||||
|
dim_special = 0.3,
|
||||||
|
rounding = 10,
|
||||||
|
active_opacity = 0.95,
|
||||||
|
inactive_opacity = 0.85,
|
||||||
|
fullscreen_opacity = 1,
|
||||||
|
blur = {
|
||||||
|
size = 5,
|
||||||
|
passes = 4,
|
||||||
|
special = true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
-- Environmental variables (for reference https://wiki.hypr.land/Configuring/Advanced-and-Cool/Environment-variables/)
|
||||||
|
-- if you use UWSM, define your variables in ~/.config/uwsm/env
|
||||||
|
-- if you don't use UWSM, define your variables here (e.g. hl.env("QT_QPA_PLATFORM", "wayland"))
|
||||||
|
|
||||||
|
-- if you have an NVIDIA GPU uncomment the following lines:
|
||||||
|
|
||||||
|
-- hl.env("GBM_BACKEND", "nvidia-drm") -- force GBM as a backend
|
||||||
|
-- hl.env("__GLX_VENDOR_LIBRARY_NAME", "nvidia") -- force GBM as a backend
|
||||||
|
-- hl.env("LIBVA_DRIVER_NAME", "nvidia") -- Hardware acceleration on NVIDIA GPUs
|
||||||
|
-- hl.env("__GL_GSYNC_ALLOWED", "1") -- Controls if G-Sync capable monitors should use Variable Refresh Rate (VRR)
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
-- Input configuration
|
||||||
|
|
||||||
|
hl.config({
|
||||||
|
input = {
|
||||||
|
-- sensitivity = -0.25,
|
||||||
|
accel_profile = "flat",
|
||||||
|
kb_layout = "de",
|
||||||
|
},
|
||||||
|
-- Uncomment the section below to enable software cursors; this can help with cursor display or behavior issues
|
||||||
|
-- cursor = {
|
||||||
|
-- no_hardware_cursors = 1,
|
||||||
|
-- },
|
||||||
|
})
|
||||||
|
|
||||||
|
hl.gesture({ fingers = 4, direction = "horizontal", action = "workspace" })
|
||||||
|
hl.gesture({ fingers = 3, direction = "down", action = "close" })
|
||||||
|
hl.gesture({ fingers = 3, direction = "up", action = "fullscreen" })
|
||||||
|
hl.gesture({ fingers = 3, direction = "left", action = "float" })
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
hl.config({
|
||||||
|
dwindle = {
|
||||||
|
preserve_split = true,
|
||||||
|
},
|
||||||
|
misc = {
|
||||||
|
col = {
|
||||||
|
splash = CACHYLGREEN,
|
||||||
|
},
|
||||||
|
middle_click_paste = false,
|
||||||
|
enable_swallow = true,
|
||||||
|
swallow_regex = "(kitty|ghostty|[Kk]onsole|Alacritty|gnome-terminal|xfce[0-9]?-terminal)",
|
||||||
|
vrr = 3,
|
||||||
|
},
|
||||||
|
xwayland = {
|
||||||
|
force_zero_scaling = true
|
||||||
|
},
|
||||||
|
ecosystem = {
|
||||||
|
no_update_news = true,
|
||||||
|
no_donation_nag = true,
|
||||||
|
},
|
||||||
|
})
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
-- Hyprland default apps
|
||||||
|
|
||||||
|
TERMINAL = "kitty"
|
||||||
|
FILE_MANAGER = "dolphin"
|
||||||
|
BROWSER = "google-chrome-stable"
|
||||||
|
EDITOR = "gnome-text-editor --new-window"
|
||||||
|
CALCULATOR = "gnome-calculator"
|
||||||
|
|
||||||
|
-- Monitors
|
||||||
|
MONITOR1 = ""
|
||||||
|
MONITOR2 = ""
|
||||||
|
MONITOR3 = ""
|
||||||
|
PRIMARY_MONITOR = MONITOR1
|
||||||
|
|
||||||
|
-- Workspaces
|
||||||
|
NUM_WPM = 3 -- Number of workspaces per monitor (Max 10)
|
||||||
@@ -0,0 +1,116 @@
|
|||||||
|
-- Window rules wiki https://wiki.hypr.land/Configuring/Basics/Window-Rules/
|
||||||
|
|
||||||
|
-- Generic floating position
|
||||||
|
hl.window_rule({ match = { float = true }, center = true, persistent_size = true })
|
||||||
|
|
||||||
|
-- Picture-in-Picture
|
||||||
|
hl.window_rule({
|
||||||
|
match = { title = "^([Pp]icture[-\\s]?[Ii]n[-\\s]?[Pp]icture)(.*)$" },
|
||||||
|
float = true,
|
||||||
|
keep_aspect_ratio = true,
|
||||||
|
size = { "max(monitor_w, monitor_h)*0.25", "min(monitor_w, monitor_h)*0.25" },
|
||||||
|
pin = true,
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Gaming
|
||||||
|
local gamingApps = "^(steam_app.*|gamescope)$"
|
||||||
|
local gamingWorkspace = "name:gaming"
|
||||||
|
|
||||||
|
hl.window_rule({ match = { content = "game" }, workspace = gamingWorkspace })
|
||||||
|
hl.window_rule({ match = { xdg_tag = "^(.*game.*)$" }, workspace = gamingWorkspace, fullscreen_state = 2, content = "game", sync_fullscreen = true })
|
||||||
|
hl.window_rule({ match = { class = gamingApps }, workspace = gamingWorkspace })
|
||||||
|
hl.window_rule({ match = { class = "^(steam)$", title = "^(Friends List)$" }, float = true })
|
||||||
|
hl.window_rule({ match = { class = "^(steam)$", title = "^(Launching\\.{3})$" }, float = true, center = true, workspace = gamingWorkspace })
|
||||||
|
hl.window_rule({
|
||||||
|
match = {
|
||||||
|
class = gamingApps,
|
||||||
|
title = "^(.+)$",
|
||||||
|
initial_title = "negative:^(.*\\\\home\\\\.*)$",
|
||||||
|
},
|
||||||
|
content = "game",
|
||||||
|
decorate = false,
|
||||||
|
fullscreen_state = 2,
|
||||||
|
size = { "monitor_w", "monitor_h" },
|
||||||
|
sync_fullscreen = true,
|
||||||
|
})
|
||||||
|
hl.window_rule({
|
||||||
|
match = {
|
||||||
|
class = "^(steam_app.*)$",
|
||||||
|
initial_title = "^$",
|
||||||
|
},
|
||||||
|
center = true,
|
||||||
|
float = true,
|
||||||
|
fullscreen = false,
|
||||||
|
fullscreen_state = 0,
|
||||||
|
workspace = gamingWorkspace,
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Apps
|
||||||
|
hl.window_rule({ match = { class = "^(.*\\.exe)$", float = true }, monitor = PRIMARY_MONITOR, center = true, fullscreen_state = 0 })
|
||||||
|
hl.window_rule({ match = { class = "^(.*[Ll]auncher.*)$" }, float = true, monitor = PRIMARY_MONITOR })
|
||||||
|
hl.window_rule({ match = { class = "^(vesktop|discord)$" }, monitor = PRIMARY_MONITOR })
|
||||||
|
hl.window_rule({ match = { class = "^(.*[Cc]alc.*)$" }, float = true, size = { "max(monitor_w, monitor_h)*0.17", "min(monitor_w, monitor_h)*0.43" } })
|
||||||
|
hl.window_rule({ match = { class = "^(org\\.kde\\.keditfiletype)$" }, float = true })
|
||||||
|
hl.window_rule({ match = { class = "^(org\\.kde\\.ark)$" }, size = { "max(monitor_w, monitor_h)*0.40", "min(monitor_w, monitor_h)*0.40" } })
|
||||||
|
hl.window_rule({ match = { class = "^(.*satty.*)$", title = "^(Satty)$" }, min_size = { "max(monitor_w, monitor_h)*0.35", "min(monitor_w, monitor_h)*0.35" }, float = true })
|
||||||
|
hl.window_rule({ match = { class = "^(dev\\.)?(noctalia\\.Noctalia(\\.Settings)?)$" }, float = true, size = { "monitor_w*0.70", "monitor_h*0.70" } })
|
||||||
|
hl.window_rule({
|
||||||
|
match = {
|
||||||
|
class = "^(org\\.kde\\.dolphin)$",
|
||||||
|
title = "negative:^(Moving.*|Create New.*|Extract.*|Compress.*|Copying.*|Progress.*|Configure.*|Properties.*|Choose\\sApplication.*)$",
|
||||||
|
},
|
||||||
|
float = true,
|
||||||
|
size = { "max(monitor_w, monitor_h)*0.50", "min(monitor_w, monitor_h)*0.55" },
|
||||||
|
move = {
|
||||||
|
"monitor_w - (max(monitor_w, monitor_h)*0.50) - 20", -- X axis: always align to screen right (20px margin)
|
||||||
|
"monitor_h - (min(monitor_w, monitor_h)*0.55) - 20" -- Y axis: always align to screen bottom (20px margin)
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Opacity Overrides
|
||||||
|
local terminals = "^(kitty|ghostty|[Kk]onsole|Alacritty|gnome-terminal|xfce[0-9]?-terminal)$"
|
||||||
|
|
||||||
|
hl.window_rule({ match = { class = "^(firefox|zen|[Gg]oogle-chrome)$" }, opacity = "1.0 override" })
|
||||||
|
hl.window_rule({ match = { class = terminals }, opacity = "1.0 override" }) -- Override opacity in favor of terminal settings for opacity. If your terminal doesn't support transparency, you can remove this rule.
|
||||||
|
hl.window_rule({ match = { class = "^(mpv|org.kde.haruna|.*plex.*|org\\.kde\\.gwenview|.*vlc.*)$" }, opacity = "1.0 override" })
|
||||||
|
|
||||||
|
-- Float Utility Windows
|
||||||
|
local floatApps = {
|
||||||
|
{ class = "^(kvantummanager|qt[56]ct|nwg-look)$" },
|
||||||
|
{ class = "^(org.pulseaudio.pavucontrol|blueman-manager|nm-applet|nm-connection-editor)$" },
|
||||||
|
{ title = "^(Winetricks.*|Protontricks.*)$" },
|
||||||
|
}
|
||||||
|
for _, m in ipairs(floatApps) do hl.window_rule({ match = m, float = true }) end
|
||||||
|
|
||||||
|
-- Float Common Modals
|
||||||
|
local modalMatches = {
|
||||||
|
{ title = "^(Open|Authentication Required|Add Folder to Workspace|Choose Files|Save As|Confirm to replace files|File Operation Progress)$" },
|
||||||
|
{ initial_title = "^(Open File)$" },
|
||||||
|
{ class = "^([Xx]dg-desktop-portal-gtk)$" },
|
||||||
|
{ title = "^(File Upload|Choose wallpaper|Library)(.*)$" },
|
||||||
|
{ class = "^(.*dialog.*)$" },
|
||||||
|
{ title = "^(.*dialog.*)$" },
|
||||||
|
{ class = "^(hyprland-share-picker)$"},
|
||||||
|
}
|
||||||
|
for _, m in ipairs(modalMatches) do hl.window_rule({ match = m, float = true }) end
|
||||||
|
|
||||||
|
-- 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,
|
||||||
|
})
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
-- Workspace rules wiki https://wiki.hypr.land/Configuring/Basics/Workspace-Rules/
|
||||||
|
-- Add your workspace rules here. Increment the workspace number as you go. Do not have duplicate workspaces.
|
||||||
|
hl.workspace_rule({ workspace = "name:gaming", monitor = PRIMARY_MONITOR, default = true })
|
||||||
|
hl.workspace_rule({ workspace = "1", monitor = MONITOR1, default = true, persistent = true })
|
||||||
|
hl.workspace_rule({ workspace = "2", monitor = MONITOR1, default = true, persistent = true })
|
||||||
|
hl.workspace_rule({ workspace = "3", monitor = MONITOR1, default = true, persistent = true })
|
||||||
|
-- hl.workspace_rule({ workspace = "4", monitor = MONITOR2, default = true, persistent = true })
|
||||||
|
-- hl.workspace_rule({ workspace = "5", monitor = MONITOR2, default = true, persistent = true })
|
||||||
|
-- hl.workspace_rule({ workspace = "6", monitor = MONITOR2, default = true, persistent = true })
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
-- CachyOS Hyprland Configuration
|
||||||
|
|
||||||
|
require("config.animations")
|
||||||
|
require("config.autostart")
|
||||||
|
require("config.colors")
|
||||||
|
require("config.decorations")
|
||||||
|
require("config.variables")
|
||||||
|
require("config.environment")
|
||||||
|
require("config.inputs")
|
||||||
|
require("config.binds")
|
||||||
|
require("config.misc")
|
||||||
|
require("config.monitors")
|
||||||
|
require("config.windowrules")
|
||||||
|
require("config.workspaces")
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
screencopy {
|
||||||
|
allow_token_by_default = true
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
background_opacity 0.6
|
||||||
|
cursor_trail 1
|
||||||
|
window_padding_width 25
|
||||||
|
|
||||||
|
include themes/noctalia.conf
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
color0 #494d64
|
||||||
|
color1 #ed8796
|
||||||
|
color2 #a6da95
|
||||||
|
color3 #eed49f
|
||||||
|
color4 #8aadf4
|
||||||
|
color5 #f5bde6
|
||||||
|
color6 #8bd5ca
|
||||||
|
color7 #b8c0e0
|
||||||
|
color8 #5b6078
|
||||||
|
color9 #ed8796
|
||||||
|
color10 #a6da95
|
||||||
|
color11 #eed49f
|
||||||
|
color12 #8aadf4
|
||||||
|
color13 #f5bde6
|
||||||
|
color14 #8bd5ca
|
||||||
|
color15 #a5adcb
|
||||||
|
|
||||||
|
cursor #f4dbd6
|
||||||
|
cursor_text_color #24273a
|
||||||
|
background #24273a
|
||||||
|
foreground #cad3f5
|
||||||
|
selection_foreground #cad3f5
|
||||||
|
selection_background #5b6078
|
||||||
|
active_border_color #f5bde6
|
||||||
|
inactive_border_color #363a4f
|
||||||
|
url_color #f5bde6
|
||||||
|
|
||||||
|
active_tab_foreground #24273a
|
||||||
|
active_tab_background #f5bde6
|
||||||
|
inactive_tab_foreground #a5adcb
|
||||||
|
inactive_tab_background #363a4f
|
||||||
|
cursor_trail_color #a5adcb
|
||||||
@@ -1,55 +0,0 @@
|
|||||||
# Nord true-color scheme for micro editor
|
|
||||||
# https://www.nordtheme.com/docs/colors-and-palettes
|
|
||||||
#
|
|
||||||
# Polar Night: nord0=#2E3440 nord1=#3B4252 nord2=#434C5E nord3=#4C566A
|
|
||||||
# Snow Storm: nord4=#D8DEE9 nord5=#E5E9F0 nord6=#ECEFF4
|
|
||||||
# Frost: nord7=#8FBCBB nord8=#88C0D0 nord9=#81A1C1 nord10=#5E81AC
|
|
||||||
# Aurora: nord11=#BF616A nord12=#D08770 nord13=#EBCB8B nord14=#A3BE8C nord15=#B48EAD
|
|
||||||
|
|
||||||
color-link default "#D8DEE9,#2E3440"
|
|
||||||
color-link comment "#4C566A"
|
|
||||||
color-link identifier "#88C0D0"
|
|
||||||
color-link identifier.class "#8FBCBB"
|
|
||||||
color-link identifier.var "#D8DEE9"
|
|
||||||
color-link constant "#B48EAD"
|
|
||||||
color-link constant.number "#B48EAD"
|
|
||||||
color-link constant.bool "#81A1C1"
|
|
||||||
color-link constant.string "#A3BE8C"
|
|
||||||
color-link constant.string.url "#88C0D0"
|
|
||||||
color-link constant.specialChar "#EBCB8B"q
|
|
||||||
color-link statement "#81A1C1"
|
|
||||||
color-link symbol "#ECEFF4"
|
|
||||||
color-link symbol.brackets "#D8DEE9"
|
|
||||||
color-link symbol.operator "#81A1C1"
|
|
||||||
color-link preproc "#5E81AC"
|
|
||||||
color-link type "#8FBCBB"
|
|
||||||
color-link type.keyword "#81A1C1"
|
|
||||||
color-link special "#D08770"
|
|
||||||
color-link underlined "#88C0D0"
|
|
||||||
color-link error "#BF616A"
|
|
||||||
color-link todo "#EBCB8B,#2E3440"
|
|
||||||
|
|
||||||
color-link selection "#D8DEE9,#434C5E"
|
|
||||||
color-link indent-char "#3B4252"
|
|
||||||
color-link line-number "#4C566A,#2E3440"
|
|
||||||
color-link current-line-number "#D8DEE9,#3B4252"
|
|
||||||
color-link gutter-info "#88C0D0"
|
|
||||||
color-link gutter-error "#BF616A"
|
|
||||||
color-link gutter-warning "#EBCB8B"
|
|
||||||
color-link cursor-line "#3B4252"
|
|
||||||
color-link color-column "#3B4252"
|
|
||||||
color-link statusline "#D8DEE9,#3B4252"
|
|
||||||
color-link statusline.inactive "#4C566A,#2E3440"
|
|
||||||
color-link tabbar "#4C566A,#2E3440"
|
|
||||||
color-link tabbar.active "#ECEFF4,#434C5E"
|
|
||||||
color-link divider "#3B4252,#3B4252"
|
|
||||||
color-link scrollbar "#4C566A,#2E3440"
|
|
||||||
color-link match-brace "#EBCB8B"
|
|
||||||
color-link hlsearch "#2E3440,#EBCB8B"
|
|
||||||
|
|
||||||
color-link diff-added "#A3BE8C"
|
|
||||||
color-link diff-modified "#EBCB8B"
|
|
||||||
color-link diff-deleted "#BF616A"
|
|
||||||
color-link diff-added-lines "#A3BE8C,#2E3440"
|
|
||||||
color-link diff-modified-lines "#EBCB8B,#2E3440"
|
|
||||||
color-link diff-deleted-lines "#BF616A,#2E3440"
|
|
||||||
@@ -1,3 +1,3 @@
|
|||||||
{
|
{
|
||||||
"colorscheme": "nord-tc"
|
"colorscheme": "catppuccin-frappe"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,160 @@
|
|||||||
|
[accessibility]
|
||||||
|
ui_scale = 1.20
|
||||||
|
|
||||||
|
[location]
|
||||||
|
address = "Stockach, Deutschland"
|
||||||
|
|
||||||
|
[bar.default]
|
||||||
|
center = [ "workspaces", "spacer_1", "active_window" ]
|
||||||
|
concave_edge_corners = true
|
||||||
|
end = [ "media", "spacer_1", "tray", "notifications", "network", "volume", "wallhaven", "session" ]
|
||||||
|
margin_edge = 0
|
||||||
|
margin_ends = 0
|
||||||
|
radius_bottom_left = 12
|
||||||
|
radius_bottom_right = 12
|
||||||
|
radius_top_left = 0
|
||||||
|
radius_top_right = 0
|
||||||
|
scale = 1.10
|
||||||
|
start = [ "launcher", "clock", "spacer_1", "group:g1" ]
|
||||||
|
thickness = 35
|
||||||
|
|
||||||
|
[[bar.default.capsule_group]]
|
||||||
|
border = ""
|
||||||
|
fill = "on_secondary"
|
||||||
|
id = "g1"
|
||||||
|
members = [ "temp", "sysmon_2", "sysmon_3" ]
|
||||||
|
opacity = 1.0
|
||||||
|
padding = 6.0
|
||||||
|
|
||||||
|
[idle]
|
||||||
|
behavior_order = [ "lock", "screen-off" ]
|
||||||
|
pre_action_fade_seconds = 2.0
|
||||||
|
|
||||||
|
[idle.behavior.lock]
|
||||||
|
action = "lock"
|
||||||
|
enabled = true
|
||||||
|
timeout = 300
|
||||||
|
|
||||||
|
[idle.behavior.screen-off]
|
||||||
|
action = "screen_off"
|
||||||
|
enabled = true
|
||||||
|
timeout = 360
|
||||||
|
|
||||||
|
[shell]
|
||||||
|
clipboard_image_action_command = "satty -f -"
|
||||||
|
launch_apps_as_systemd_services = true
|
||||||
|
polkit_agent = true
|
||||||
|
settings_show_advanced = true
|
||||||
|
|
||||||
|
[shell.panel]
|
||||||
|
open_near_click_control_center = true
|
||||||
|
session_placement = "floating"
|
||||||
|
session_position = "center"
|
||||||
|
|
||||||
|
[shell.screenshot]
|
||||||
|
copy_to_clipboard = false
|
||||||
|
pipe_command = "satty -f -"
|
||||||
|
pipe_to_command = true
|
||||||
|
save_to_file = false
|
||||||
|
|
||||||
|
[[shell.session.actions]]
|
||||||
|
action = "lock"
|
||||||
|
countdown_seconds = 0.0
|
||||||
|
enabled = true
|
||||||
|
shortcut = "1"
|
||||||
|
variant = "default"
|
||||||
|
|
||||||
|
[[shell.session.actions]]
|
||||||
|
action = "logout"
|
||||||
|
countdown_seconds = 0.0
|
||||||
|
enabled = true
|
||||||
|
shortcut = "2"
|
||||||
|
variant = "default"
|
||||||
|
|
||||||
|
[[shell.session.actions]]
|
||||||
|
action = "lock_and_suspend"
|
||||||
|
countdown_seconds = 3.0
|
||||||
|
enabled = true
|
||||||
|
shortcut = "3"
|
||||||
|
variant = "default"
|
||||||
|
|
||||||
|
[[shell.session.actions]]
|
||||||
|
action = "reboot"
|
||||||
|
countdown_seconds = 3.0
|
||||||
|
enabled = true
|
||||||
|
shortcut = "4"
|
||||||
|
variant = "default"
|
||||||
|
|
||||||
|
[[shell.session.actions]]
|
||||||
|
action = "shutdown"
|
||||||
|
countdown_seconds = 3.0
|
||||||
|
enabled = true
|
||||||
|
shortcut = "5"
|
||||||
|
variant = "destructive"
|
||||||
|
|
||||||
|
[system.monitor]
|
||||||
|
gpu_poll_seconds = 2
|
||||||
|
|
||||||
|
[theme]
|
||||||
|
mode = "dark"
|
||||||
|
source = "wallpaper"
|
||||||
|
wallpaper_scheme = "m3-tonal-spot"
|
||||||
|
|
||||||
|
[theme.templates]
|
||||||
|
builtin_ids = [ "btop", "gtk3", "gtk4", "kcolorscheme", "kitty", "qt", "alacritty" ]
|
||||||
|
|
||||||
|
[widget.clock]
|
||||||
|
color = "secondary"
|
||||||
|
format = "{:%H:%M %A %m/%d/%y}"
|
||||||
|
|
||||||
|
[widget.launcher]
|
||||||
|
color = "secondary"
|
||||||
|
|
||||||
|
[widget.media]
|
||||||
|
hide_when_no_media = true
|
||||||
|
title_scroll = "on_hover"
|
||||||
|
|
||||||
|
[widget.network]
|
||||||
|
color = "secondary"
|
||||||
|
|
||||||
|
[widget.notifications]
|
||||||
|
color = "secondary"
|
||||||
|
|
||||||
|
[widget.session]
|
||||||
|
color = "error"
|
||||||
|
|
||||||
|
[widget.spacer_1]
|
||||||
|
type = "spacer"
|
||||||
|
|
||||||
|
[widget.temp]
|
||||||
|
show_value = true
|
||||||
|
|
||||||
|
[widget.sysmon_2]
|
||||||
|
glyph = "gpu-usage"
|
||||||
|
show_value = true
|
||||||
|
stat = "gpu_temp"
|
||||||
|
type = "sysmon"
|
||||||
|
|
||||||
|
[widget.sysmon_3]
|
||||||
|
glyph = "cpu-2"
|
||||||
|
stat = "ram_used"
|
||||||
|
type = "sysmon"
|
||||||
|
|
||||||
|
[widget.wallhaven]
|
||||||
|
glyph = "photo"
|
||||||
|
type = "noctalia/wallhaven:wallhaven"
|
||||||
|
|
||||||
|
[widget.tray]
|
||||||
|
capsule = true
|
||||||
|
capsule_fill = "on_secondary"
|
||||||
|
|
||||||
|
[widget.volume]
|
||||||
|
color = "secondary"
|
||||||
|
|
||||||
|
[widget.workspaces]
|
||||||
|
active_pill_size = 2.5
|
||||||
|
capsule = true
|
||||||
|
capsule_fill = "on_primary"
|
||||||
|
show_labels = false
|
||||||
|
inactive_pill_size = 1.0
|
||||||
|
pill_scale = 0.80
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=wayvnc - VNC server for wlroots Wayland compositors
|
||||||
|
After=graphical-session.target
|
||||||
|
PartOf=graphical-session.target
|
||||||
|
Requisite=graphical-session.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
ExecStart=/usr/bin/wayvnc
|
||||||
|
Restart=always
|
||||||
|
RestartSec=5
|
||||||
|
StartLimitIntervalSec=0
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=graphical-session.target
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
export BROWSER=google-chrome
|
||||||
|
export TERM=xterm-kitty
|
||||||
|
export QT_QPA_PLATFORM="wayland;xcb"
|
||||||
|
export QT_QPA_PLATFORMTHEME="qt6ct"
|
||||||
|
export ELECTRON_OZONE_PLATFORM_HINT=auto
|
||||||
|
export HYPRCURSOR_THEME="Bibata-Modern-Ice"
|
||||||
|
export HYPRCURSOR_SIZE=24
|
||||||
|
export XCURSOR_THEME="Bibata-Modern-Ice"
|
||||||
|
export XCURSOR_SIZE=24
|
||||||
|
|
||||||
|
# If you have an NVIDIA GPU uncommment the following lines
|
||||||
|
# export GBM_BACKEND=nvidia-drm # force GBM as a backend
|
||||||
|
# export __GLX_VENDOR_LIBRARY_NAME=nvidia # force GBM as a backend
|
||||||
|
# export LIBVA_DRIVER_NAME=nvidia # Hardware acceleration on NVIDIA GPUs
|
||||||
|
# export __GL_GSYNC_ALLOWED=1 # Controls if G-Sync capable monitors should use Variable Refresh Rate (VRR)
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
address=100.64.0.1
|
||||||
|
port=5900
|
||||||
|
enable_auth=true
|
||||||
|
enable_pam=true
|
||||||
|
certificate_file=/home/valknar/.config/wayvnc/tls_cert.pem
|
||||||
|
private_key_file=/home/valknar/.config/wayvnc/tls_key.pem
|
||||||
@@ -1,138 +0,0 @@
|
|||||||
# Nord theme for Yazi
|
|
||||||
# https://www.nordtheme.com/docs/colors-and-palettes
|
|
||||||
#
|
|
||||||
# Polar Night: nord0=#2E3440 nord1=#3B4252 nord2=#434C5E nord3=#4C566A
|
|
||||||
# Snow Storm: nord4=#D8DEE9 nord5=#E5E9F0 nord6=#ECEFF4
|
|
||||||
# Frost: nord7=#8FBCBB nord8=#88C0D0 nord9=#81A1C1 nord10=#5E81AC
|
|
||||||
# Aurora: nord11=#BF616A nord12=#D08770 nord13=#EBCB8B nord14=#A3BE8C nord15=#B48EAD
|
|
||||||
|
|
||||||
[app]
|
|
||||||
overall = { bg = "#2E3440" }
|
|
||||||
|
|
||||||
[mgr]
|
|
||||||
cwd = { fg = "#88C0D0", bold = true }
|
|
||||||
find_keyword = { fg = "#EBCB8B", bold = true, italic = true, underline = true }
|
|
||||||
find_position = { fg = "#D08770", bg = "reset", bold = true, italic = true }
|
|
||||||
symlink_target = { fg = "#81A1C1", italic = true }
|
|
||||||
marker_copied = { fg = "#A3BE8C", bg = "#A3BE8C" }
|
|
||||||
marker_cut = { fg = "#BF616A", bg = "#BF616A" }
|
|
||||||
marker_marked = { fg = "#EBCB8B", bg = "#EBCB8B" }
|
|
||||||
marker_selected = { fg = "#88C0D0", bg = "#88C0D0" }
|
|
||||||
count_copied = { fg = "#2E3440", bg = "#A3BE8C" }
|
|
||||||
count_cut = { fg = "#2E3440", bg = "#BF616A" }
|
|
||||||
count_selected = { fg = "#2E3440", bg = "#88C0D0" }
|
|
||||||
border_symbol = "│"
|
|
||||||
border_style = { fg = "#4C566A" }
|
|
||||||
|
|
||||||
[indicator]
|
|
||||||
parent = { fg = "#4C566A", bg = "#3B4252" }
|
|
||||||
current = { bg = "#434C5E" }
|
|
||||||
preview = { fg = "#4C566A", bg = "#3B4252" }
|
|
||||||
padding = { open = "", close = "" }
|
|
||||||
|
|
||||||
[tabs]
|
|
||||||
active = { fg = "#ECEFF4", bg = "#434C5E", bold = true }
|
|
||||||
inactive = { fg = "#4C566A", bg = "#3B4252" }
|
|
||||||
sep_inner = { open = "", close = "" }
|
|
||||||
sep_outer = { open = "", close = "" }
|
|
||||||
|
|
||||||
[mode]
|
|
||||||
normal_main = { fg = "#2E3440", bg = "#88C0D0", bold = true }
|
|
||||||
normal_alt = { fg = "#88C0D0", bg = "#3B4252" }
|
|
||||||
select_main = { fg = "#2E3440", bg = "#A3BE8C", bold = true }
|
|
||||||
select_alt = { fg = "#A3BE8C", bg = "#3B4252" }
|
|
||||||
unset_main = { fg = "#2E3440", bg = "#EBCB8B", bold = true }
|
|
||||||
unset_alt = { fg = "#EBCB8B", bg = "#3B4252" }
|
|
||||||
|
|
||||||
[status]
|
|
||||||
overall = { fg = "#D8DEE9", bg = "#3B4252" }
|
|
||||||
sep_left = { open = "", close = "" }
|
|
||||||
sep_right = { open = "", close = "" }
|
|
||||||
perm_type = { fg = "#81A1C1" }
|
|
||||||
perm_read = { fg = "#A3BE8C" }
|
|
||||||
perm_write = { fg = "#BF616A" }
|
|
||||||
perm_exec = { fg = "#EBCB8B" }
|
|
||||||
perm_sep = { fg = "#4C566A" }
|
|
||||||
progress_label = { fg = "#ECEFF4", bold = true }
|
|
||||||
progress_normal = { fg = "#88C0D0", bg = "#3B4252" }
|
|
||||||
progress_error = { fg = "#BF616A", bg = "#3B4252" }
|
|
||||||
|
|
||||||
[which]
|
|
||||||
cols = 3
|
|
||||||
mask = { bg = "#3B4252" }
|
|
||||||
cand = { fg = "#88C0D0" }
|
|
||||||
rest = { fg = "#D8DEE9" }
|
|
||||||
desc = { fg = "#4C566A" }
|
|
||||||
separator = " "
|
|
||||||
separator_style = { fg = "#4C566A" }
|
|
||||||
|
|
||||||
[confirm]
|
|
||||||
border = { fg = "#81A1C1" }
|
|
||||||
title = { fg = "#88C0D0", bold = true }
|
|
||||||
body = {}
|
|
||||||
list = {}
|
|
||||||
btn_yes = { fg = "#2E3440", bg = "#A3BE8C", bold = true }
|
|
||||||
btn_no = { fg = "#2E3440", bg = "#BF616A", bold = true }
|
|
||||||
btn_labels = [" [Y]es ", " (N)o "]
|
|
||||||
|
|
||||||
[spot]
|
|
||||||
border = { fg = "#81A1C1" }
|
|
||||||
title = { fg = "#88C0D0", bold = true }
|
|
||||||
tbl_col = { fg = "#88C0D0", bold = true }
|
|
||||||
tbl_cell = { fg = "#EBCB8B", reversed = true }
|
|
||||||
|
|
||||||
[notify]
|
|
||||||
title_info = { fg = "#A3BE8C", bold = true }
|
|
||||||
title_warn = { fg = "#EBCB8B", bold = true }
|
|
||||||
title_error = { fg = "#BF616A", bold = true }
|
|
||||||
icon_info = ""
|
|
||||||
icon_warn = ""
|
|
||||||
icon_error = ""
|
|
||||||
|
|
||||||
[pick]
|
|
||||||
border = { fg = "#81A1C1" }
|
|
||||||
active = { fg = "#88C0D0", bold = true }
|
|
||||||
inactive = {}
|
|
||||||
|
|
||||||
[input]
|
|
||||||
border = { fg = "#81A1C1" }
|
|
||||||
title = { fg = "#88C0D0", bold = true }
|
|
||||||
value = {}
|
|
||||||
selected = { reversed = true }
|
|
||||||
|
|
||||||
[cmp]
|
|
||||||
border = { fg = "#81A1C1" }
|
|
||||||
active = { reversed = true }
|
|
||||||
inactive = {}
|
|
||||||
icon_file = ""
|
|
||||||
icon_folder = ""
|
|
||||||
icon_command = ""
|
|
||||||
|
|
||||||
[tasks]
|
|
||||||
border = { fg = "#81A1C1" }
|
|
||||||
title = { fg = "#88C0D0", bold = true }
|
|
||||||
hovered = { fg = "#B48EAD", bold = true }
|
|
||||||
|
|
||||||
[help]
|
|
||||||
on = { fg = "#8FBCBB" }
|
|
||||||
run = { fg = "#B48EAD" }
|
|
||||||
desc = {}
|
|
||||||
hovered = { reversed = true, bold = true }
|
|
||||||
footer = { fg = "#2E3440", bg = "#D8DEE9" }
|
|
||||||
|
|
||||||
[filetype]
|
|
||||||
rules = [
|
|
||||||
# Images
|
|
||||||
{ mime = "image/*", fg = "#D08770" },
|
|
||||||
# Media
|
|
||||||
{ mime = "{audio,video}/*", fg = "#B48EAD" },
|
|
||||||
# Archives
|
|
||||||
{ mime = "application/{zip,rar,7z*,tar,gzip,xz,zstd,bzip*,lzma,compress,archive,cpio}", fg = "#BF616A" },
|
|
||||||
# Documents
|
|
||||||
{ mime = "application/{pdf,doc,rtf}", fg = "#88C0D0" },
|
|
||||||
# Special files
|
|
||||||
{ url = "*", is = "orphan", bg = "#BF616A" },
|
|
||||||
{ url = "*", is = "exec", fg = "#A3BE8C" },
|
|
||||||
# Directories
|
|
||||||
{ url = "*/", fg = "#81A1C1" },
|
|
||||||
]
|
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
// Zed settings
|
||||||
|
//
|
||||||
|
// For information on how to configure Zed, see the Zed
|
||||||
|
// documentation: https://zed.dev/docs/configuring-zed
|
||||||
|
//
|
||||||
|
// To see all of Zed's default settings without changing your
|
||||||
|
// custom settings, run `zed: open default settings` from the
|
||||||
|
// command palette (cmd-shift-p / ctrl-shift-p)
|
||||||
|
{
|
||||||
|
"cli_default_open_behavior": "existing_window",
|
||||||
|
"icon_theme": "Catppuccin Frappé",
|
||||||
|
"ui_font_size": 16,
|
||||||
|
"buffer_font_size": 15,
|
||||||
|
"theme": {
|
||||||
|
"mode": "system",
|
||||||
|
"light": "One Light",
|
||||||
|
"dark": "Catppuccin Frappé",
|
||||||
|
},
|
||||||
|
}
|
||||||
+13
-10
@@ -1,17 +1,20 @@
|
|||||||
[filter "lfs"]
|
[filter "lfs"]
|
||||||
clean = git-lfs clean -- %f
|
clean = git-lfs clean -- %f
|
||||||
smudge = git-lfs smudge -- %f
|
smudge = git-lfs smudge -- %f
|
||||||
process = git-lfs filter-process
|
process = git-lfs filter-process
|
||||||
required = true
|
required = true
|
||||||
[core]
|
[core]
|
||||||
editor = micro
|
editor = micro
|
||||||
[init]
|
[init]
|
||||||
defaultBranch = main
|
defaultBranch = main
|
||||||
[alias]
|
[alias]
|
||||||
squash-all = "!f(){ git reset $(git commit-tree \"HEAD^{tree}\" \"$@\");};f"
|
squash-all = "!f(){ git reset $(git commit-tree \"HEAD^{tree}\" \"$@\");};f"
|
||||||
|
prune-branches = "!f(){ git fetch --prune && for branch in `git branch -vv | grep ': gone]' | awk '{print $1}'`; do git branch -D $branch; done };f"
|
||||||
|
prune-tags = "!git fetch --prune origin '+refs/tags/*:refs/tags/*'"
|
||||||
|
log-graph = "!git log --all --decorate --graph --oneline"
|
||||||
[push]
|
[push]
|
||||||
autoSetupRemote = true
|
autoSetupRemote = true
|
||||||
[pull]
|
[pull]
|
||||||
ff = only
|
ff = only
|
||||||
[include]
|
[include]
|
||||||
path = ~/.gitconfig.local
|
path = .gitconfig.local
|
||||||
|
|||||||
+46
-8
@@ -16,26 +16,64 @@
|
|||||||
!.zshenv
|
!.zshenv
|
||||||
!.hushlogin
|
!.hushlogin
|
||||||
!arty.yml
|
!arty.yml
|
||||||
|
!triggershell.yml
|
||||||
|
!scripts/
|
||||||
|
!scripts/openrgb-hue-apply.sh
|
||||||
!bin/
|
!bin/
|
||||||
!bin/arty
|
!bin/arty
|
||||||
!bin/stacks
|
!bin/stacks
|
||||||
!bin/README.md
|
!bin/README.md
|
||||||
!bin/setup
|
!bin/setup
|
||||||
!.vscode/
|
|
||||||
!.vscode/settings.json
|
|
||||||
!.vscode/keybindings.json
|
|
||||||
!.config/
|
!.config/
|
||||||
!.config/yazi/
|
!.config/yazi/
|
||||||
!.config/yazi/yazi.toml
|
!.config/yazi/yazi.toml
|
||||||
!.config/yazi/theme.toml
|
|
||||||
!.config/micro/
|
!.config/micro/
|
||||||
!.config/micro/settings.json
|
!.config/micro/settings.json
|
||||||
!.config/micro/bindings.json
|
!.config/micro/bindings.json
|
||||||
!.config/micro/colorschemes/
|
|
||||||
!.config/micro/colorschemes/nord-tc.micro
|
|
||||||
!.config/bat/
|
!.config/bat/
|
||||||
!.config/bat/config
|
!.config/bat/config
|
||||||
!.config/bat/themes/
|
!.config/glow/
|
||||||
!.config/bat/themes/Nord.tmTheme
|
!.config/glow/glow.yml
|
||||||
|
!.config/noctalia/
|
||||||
|
!.config/noctalia/config.toml
|
||||||
|
!.config/hypr/
|
||||||
|
!.config/hypr/hyprland.lua
|
||||||
|
!.config/hypr/xdph.conf
|
||||||
|
!.config/hypr/config/
|
||||||
|
!.config/hypr/config/animations.lua
|
||||||
|
!.config/hypr/config/autostart.lua
|
||||||
|
!.config/hypr/config/binds.lua
|
||||||
|
!.config/hypr/config/colors.lua
|
||||||
|
!.config/hypr/config/decorations.lua
|
||||||
|
!.config/hypr/config/environment.lua
|
||||||
|
!.config/hypr/config/inputs.lua
|
||||||
|
!.config/hypr/config/misc.lua
|
||||||
|
!.config/hypr/config/variables.lua
|
||||||
|
!.config/hypr/config/windowrules.lua
|
||||||
|
!.config/hypr/config/workspaces.lua
|
||||||
|
!.config/zed/
|
||||||
|
!.config/zed/settings.json
|
||||||
|
!.config/uwsm/
|
||||||
|
!.config/uwsm/env
|
||||||
|
!.config/wayvnc/
|
||||||
|
!.config/wayvnc/config
|
||||||
|
!.config/systemd/
|
||||||
|
!.config/systemd/user/
|
||||||
|
!.config/systemd/user/wayvnc.service
|
||||||
|
!.config/kitty/
|
||||||
|
!.config/kitty/kitty.conf
|
||||||
|
!.config/kitty/themes/
|
||||||
|
!.config/kitty/themes/noctalia.conf
|
||||||
|
!.config/autostart/
|
||||||
|
!.config/autostart/OpenRGB.desktop
|
||||||
|
!.config/autostart/RQuickShare.desktop
|
||||||
|
!.local/
|
||||||
|
!.local/bin/
|
||||||
|
!.local/bin/openrgb-launcher.sh
|
||||||
|
!.local/share/
|
||||||
|
!.local/share/applications/
|
||||||
|
!.local/share/applications/org.openrgb.OpenRGB.desktop
|
||||||
|
!.local/share/applications/rquickshare.desktop
|
||||||
|
!.local/share/applications/vlc.desktop
|
||||||
!LICENSE
|
!LICENSE
|
||||||
!README.md
|
!README.md
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Categories=Development;
|
||||||
|
Exec=env GDK_BACKEND=x11 WEBKIT_DISABLE_COMPOSITING_MODE=1 WEBKIT_DISABLE_DMABUF_RENDERER=1 rquickshare
|
||||||
|
Icon=rquickshare
|
||||||
|
Name=RQuickShare
|
||||||
|
Terminal=false
|
||||||
|
Type=Application
|
||||||
|
X-Desktop-File-Install-Version=0.28
|
||||||
|
StartupWMClass=rquickshare
|
||||||
@@ -0,0 +1,230 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Version=1.0
|
||||||
|
Name=VLC media player
|
||||||
|
GenericName=Media player
|
||||||
|
Comment=Read, capture, broadcast your multimedia streams
|
||||||
|
Name[af]=VLC-mediaspeler
|
||||||
|
GenericName[af]=Mediaspeler
|
||||||
|
Comment[af]=Lees, vang, send u multimediastrome
|
||||||
|
Name[am]=የ ቪኤልሲ መገናኛ ማጫወቻ
|
||||||
|
GenericName[am]=የ መገናኛ ማጫወቻ
|
||||||
|
Comment[am]=የ እርስዎን በርካታ መገናኛ ማንበቢያ: መያዣ ማስተላለፊያ
|
||||||
|
Name[ar]=مشغل الوسائط VLC
|
||||||
|
GenericName[ar]=مشغل الوسائط
|
||||||
|
Comment[ar]=اقرأ ، التقط ، و بث تدفقات وسائطك المتعددة
|
||||||
|
Name[as_IN]=VLC মিডিয়া প্লেয়াৰ
|
||||||
|
GenericName[as_IN]=মিডিয়া প্লেয়াৰ
|
||||||
|
Comment[as_IN]=আপোনাৰ মাল্টিমিডিয়া ষ্ট্ৰীমসমূহ পঢ়ক, কেপচাৰ কৰক, সম্প্ৰচাৰ কৰক
|
||||||
|
Name[ast]=Reproductor multimedia VLC
|
||||||
|
GenericName[ast]=Reproductor multimedia
|
||||||
|
Comment[ast]=Llei, captura y emiti fluxos multimedia
|
||||||
|
Name[az]=VLC media pleyeri
|
||||||
|
GenericName[az]=Media pleyeri
|
||||||
|
Comment[az]=Multinedia axınlarını oxudun, yazın və yayımlayın
|
||||||
|
Name[be]=Медыяпрайгравальнік VLC
|
||||||
|
GenericName[be]=Медыяпрайгравальнік
|
||||||
|
Comment[be]=Чытаць, лавіць і трансляваць мультымедыйныя патокі
|
||||||
|
Name[bg]=Медиен плейър VLC
|
||||||
|
GenericName[bg]=Медиен плейър
|
||||||
|
Comment[bg]=Прочитане, прихващане и излъчване на мултимедийни потоци.
|
||||||
|
Name[bn_BD]=VLC মিডিয়া প্লেয়ার
|
||||||
|
GenericName[bn_BD]=মিডিয়া প্লেয়ার
|
||||||
|
Comment[bn_BD]=আপনার মাল্টিমিডিয়া স্ট্রীম পড়ুন, ধরে রাখুন এবং ছড়িয়ে দিন
|
||||||
|
Name[br]=VLC lenner mediaoù
|
||||||
|
GenericName[br]=Lenner mediaoù
|
||||||
|
Comment[br]=Lenn, enrollañ, skignañ ho froudoù liesvedia
|
||||||
|
Name[ca]=Reproductor multimèdia VLC
|
||||||
|
GenericName[ca]=Reproductor multimèdia
|
||||||
|
Comment[ca]=Reproduïu, captureu i emeteu fluxos multimèdia
|
||||||
|
Name[co]=Lettore multimedia VLC
|
||||||
|
GenericName[co]=Lettore multimedia
|
||||||
|
Comment[co]=Leghje, cattura, diffonde i vostri flussi multimedia
|
||||||
|
Name[cs]=Multimediální přehrávač VLC
|
||||||
|
GenericName[cs]=Multimediální přehrávač
|
||||||
|
Comment[cs]=Čtěte, zachytávejte, a vysílejte své multimediální proudy
|
||||||
|
Name[cy]=Chwaraeydd VLC
|
||||||
|
GenericName[cy]=Chwaraeydd cyfryngau
|
||||||
|
Comment[cy]=Darllen, cipio a darlledu dy ffrydiau aml-gyfrwng
|
||||||
|
Name[da]=VLC media player
|
||||||
|
GenericName[da]=Medieafspiller
|
||||||
|
Comment[da]=Læs, indspil, transmittér dine multimediestreams
|
||||||
|
Name[de]=VLC Media Player
|
||||||
|
GenericName[de]=Medienwiedergabe
|
||||||
|
Comment[de]=Wiedergabe, Aufnahme und Verbreitung Ihrer Multimedia-Streams
|
||||||
|
Name[el]=Αναπαραγωγός πολυμέσων VLC
|
||||||
|
GenericName[el]=Αναπαραγωγός πολυμέσων
|
||||||
|
Comment[el]=Διαβάστε, καταγράψτε, μεταδώστε τα πολυμέσα σας
|
||||||
|
Name[en_GB]=VLC media player
|
||||||
|
GenericName[en_GB]=Media player
|
||||||
|
Comment[en_GB]=Read, capture, broadcast your multimedia streams
|
||||||
|
Name[es]=Reproductor multimedia VLC
|
||||||
|
GenericName[es]=Reproductor multimedia
|
||||||
|
Comment[es]=Lea, capture y emita sus contenidos multimedia
|
||||||
|
Name[es_MX]=Reproductor multimedia VLC
|
||||||
|
GenericName[es_MX]=Reproductor multimedia
|
||||||
|
Comment[es_MX]=Lea, capture, emita sus transmisiones multimedia
|
||||||
|
Name[et]=VLC meediaesitaja
|
||||||
|
GenericName[et]=Meediaesitaja
|
||||||
|
Comment[et]=Multimeediafailide ja -voogude taasesitamine, lindistamine ja edastamine
|
||||||
|
Name[eu]=VLC multimedia-erreproduzigailua
|
||||||
|
GenericName[eu]=Multimedia irakurgailua
|
||||||
|
Comment[eu]=Irakurri, hartu, igorri zure multimedia jarioak
|
||||||
|
Name[fi]=VLC-mediasoitin
|
||||||
|
GenericName[fi]=Mediasoitin
|
||||||
|
Comment[fi]=Toista, tallenna ja lähetä multimediaa
|
||||||
|
Name[fr]=Lecteur multimédia VLC
|
||||||
|
GenericName[fr]=Lecteur multimédia
|
||||||
|
Comment[fr]=Lit, capture, diffuse vos flux multimédias
|
||||||
|
Name[fy]=VLC media player
|
||||||
|
GenericName[fy]=Mediaspiler
|
||||||
|
Comment[fy]=Jo multimedia-streams lêze, opnimme en útstjoere
|
||||||
|
Name[ga]=Seinnteoir meán VLC
|
||||||
|
GenericName[ga]=Seinnteoir meán
|
||||||
|
Comment[ga]=Léigh, gabh, craol do shruthanna ilmheán
|
||||||
|
Name[gd]=Cluicheadair mheadhanan VLC
|
||||||
|
GenericName[gd]=Cluicheadair mheadhanan
|
||||||
|
Comment[gd]=Leugh, glac is craol sruthan ioma-mheadhain
|
||||||
|
Name[gl]=Reprodutor multimedia VLC
|
||||||
|
GenericName[gl]=Reprodutor multimedia
|
||||||
|
Comment[gl]=Lea, capture e emita os seus fluxos multimedia
|
||||||
|
Name[he]=נגן המדיה VLC
|
||||||
|
GenericName[he]=נגן מדיה
|
||||||
|
Comment[he]=קריאה, לכידה ושידור של תזרימי המולטימדיה שלך
|
||||||
|
Name[hi]=वीएलसी मीडिया प्लेयर
|
||||||
|
GenericName[hi]=मीडिया प्लेयर
|
||||||
|
Comment[hi]=अपनी मल्टीमीडिया स्ट्रीम को पढ़ें, रिकॉर्ड करें, प्रसारित करें
|
||||||
|
Name[hu]=VLC médialejátszó
|
||||||
|
GenericName[hu]=Médialejátszó
|
||||||
|
Comment[hu]=Multimédia adatfolyamok olvasása, felvétele és továbbítása
|
||||||
|
Name[id]=Pemutar media VLC
|
||||||
|
GenericName[id]=Pemutar Media
|
||||||
|
Comment[id]=Baca, tangkap, pancarkan/broadcast aliran multimedia
|
||||||
|
Name[ie]=Reproductor de media VLC
|
||||||
|
GenericName[ie]=Reproductor de media
|
||||||
|
Comment[ie]=Leer, registrar e difuser vor fluvies multimedia
|
||||||
|
Name[is]=VLC spilarinn
|
||||||
|
GenericName[is]=Margmiðlunarspilari
|
||||||
|
Comment[is]=Lesa, taka upp og útvarpa margmiðlunarstreymi
|
||||||
|
Name[it]=Lettore multimediale VLC
|
||||||
|
GenericName[it]=Lettore multimediale
|
||||||
|
Comment[it]=Leggi, cattura, trasmetti i tuoi flussi multimediali
|
||||||
|
Name[ja]=VLCメディアプレイヤー
|
||||||
|
GenericName[ja]=メディアプレイヤー
|
||||||
|
Comment[ja]=マルチメディアストリームの読み込み、キャプチャー、ブロードキャスト
|
||||||
|
Name[ka]=VLC მედიადამკვრელი
|
||||||
|
GenericName[ka]=მედიაფაილების დამკვრელი
|
||||||
|
Comment[ka]=გახსენით, გადაიღეთ, გაუშვით მედიაფაილები ეთერში
|
||||||
|
Name[kab]=Imeɣri n umidya VLC
|
||||||
|
GenericName[kab]=Imeɣri n umidya
|
||||||
|
Comment[kab]=Ɣeṛ, ṭṭef agdil, suffeɣ-d isuddam n umidya-ik
|
||||||
|
Name[km]=កម្មវិធីចាក់មេឌៀ VLC
|
||||||
|
GenericName[km]=កម្មវិធីចាក់មេឌៀ
|
||||||
|
Comment[km]=អាន ចាប់យក ប្រកាសស្ទ្រីមពហុមេឌៀរបស់អ្នក
|
||||||
|
Name[ko]=VLC 미디어 플레이어
|
||||||
|
GenericName[ko]=미디어 플레이어
|
||||||
|
Comment[ko]=당신의 멀티미디어 스트림을 캡쳐 및 방송 할 수 있습니다
|
||||||
|
Name[lt]=VLC leistuvė
|
||||||
|
GenericName[lt]=Leistuvė
|
||||||
|
Comment[lt]=Groti, įrašyti, siųsti įvairialypės terpės kūrinius
|
||||||
|
Name[lv]=VLC mediju atskaņotājs
|
||||||
|
GenericName[lv]=Mediju atskaņotājs
|
||||||
|
Comment[lv]=Lasiet, tveriet un apraidiet savas multimediju straumes
|
||||||
|
Name[ml]=VLC മീഡിയ പ്ലെയർ
|
||||||
|
GenericName[ml]=മീഡിയ പ്ലെയർ
|
||||||
|
Comment[ml]=നിങ്ങളുടെ മൾട്ടിമീഡിയ സ്ട്രീമുകൾ റീഡ് ചെയ്യുക, ക്യാപ്ചർ ചെയ്യുക, പ്രക്ഷേപണം ചെയ്യുക
|
||||||
|
Name[mn]=VLC дамжуулга тоглуулагч
|
||||||
|
GenericName[mn]=Дамжуулга тоглуулагч
|
||||||
|
Comment[mn]=Таны дамжуулгын урсгалыг унших, бичиж авах, цацах
|
||||||
|
Name[mr]=VLC मीडिया प्लेअर
|
||||||
|
GenericName[mr]=मीडिया प्लेअर
|
||||||
|
Comment[mr]=आपले मल्टीमिडिया प्रवाह बघा, हस्तगत करा, प्रसारित करा
|
||||||
|
Name[ms]=Pemain media VLC
|
||||||
|
GenericName[ms]=Pemain media
|
||||||
|
Comment[ms]=Baca, tangkap, siarkan strim multimedia anda
|
||||||
|
Name[my]=VLC မီဒီယာ ပြစက်
|
||||||
|
GenericName[my]=မီဒီယာ ပြစက်
|
||||||
|
Comment[my]=သင်၏ မာတီမီဒီယာ တိုက်ရိုက်လွှင့်ပြ စီးကြောင်းများကို ဖတ်၊ ဖမ်းယူ၊ ထုတ်လွင့်ခြင်း
|
||||||
|
Name[nb]=VLC media player
|
||||||
|
GenericName[nb]=Mediespiller
|
||||||
|
Comment[nb]=Innless, ta opp, og kringkast dine multimediastrømmer
|
||||||
|
Name[ne]=VLC मिडिया प्लेयर
|
||||||
|
GenericName[ne]=मिडिया प्लेयर
|
||||||
|
Comment[ne]=पढ्नुहोस्, क्याप्चर गर्नुहोस्, तपाईंका मल्टिमिडिया स्ट्रिमहरू प्रसारण गर्नुहोस्
|
||||||
|
Name[nl]=VLC media player
|
||||||
|
GenericName[nl]=Mediaspeler
|
||||||
|
Comment[nl]=Uw multimedia-streams lezen, opnemen en uitzenden
|
||||||
|
Name[nn]=VLC mediespelar
|
||||||
|
GenericName[nn]=Mediespelar
|
||||||
|
Comment[nn]=Spel av, ta opp og send ut multimedia
|
||||||
|
Name[oc]=Lector multimèdia VLC
|
||||||
|
GenericName[oc]=Lector multimèdia
|
||||||
|
Comment[oc]=Legissètz, capturatz, difusatz vòstres fluxes multimèdia
|
||||||
|
Name[pa]=VLC ਮੀਡਿਆ ਪਲੇਅਰ
|
||||||
|
GenericName[pa]=ਮੀਡਿਆ ਪਲੇਅਰ
|
||||||
|
Comment[pa]=ਆਪਣੀ ਮਲਟੀਮੀਡਿਆ ਸਟਰੀਮ ਪੜ੍ਹੋ, ਕੈਪਚਰ ਤੇ ਬਰਾਡਕਾਸਟ ਕਰੋ
|
||||||
|
Name[pl]=VLC media player
|
||||||
|
GenericName[pl]=Odtwarzacz multimedialny
|
||||||
|
Comment[pl]=Odczytywanie, przechwytywanie i nadawanie strumieni multimedialnych
|
||||||
|
Name[pt_BR]=Reprodutor de Mídias VLC
|
||||||
|
GenericName[pt_BR]=Reprodutor de Mídias
|
||||||
|
Comment[pt_BR]=Reproduza, capture e transmita os seus transmissões multimídia
|
||||||
|
Name[pt_PT]=VLC media player
|
||||||
|
GenericName[pt_PT]=Reprodutor de multimédia
|
||||||
|
Comment[pt_PT]=Ler, capturar, transmitir as suas emissões de multimédia
|
||||||
|
Name[ro]=Redor media VLC
|
||||||
|
GenericName[ro]=Redor media
|
||||||
|
Comment[ro]=Citește, capturează, difuzează fluxurile multimedia
|
||||||
|
Name[ru]=Медиаплеер VLC
|
||||||
|
GenericName[ru]=Медиаплеер
|
||||||
|
Comment[ru]=Универсальный проигрыватель видео и аудио
|
||||||
|
Name[sc]=Leghidore multimediale VLC
|
||||||
|
GenericName[sc]=Leghidore multimediale
|
||||||
|
Comment[sc]=Leghe, catura, trasmite sos flussos multimediales tuos
|
||||||
|
Name[sk]=VLC media player
|
||||||
|
GenericName[sk]=Prehrávač médií
|
||||||
|
Comment[sk]=Načítavajte, zaznamenávajte, vysielajte svoje multimediálne streamy
|
||||||
|
Name[sl]=Predvajalnik VLC
|
||||||
|
GenericName[sl]=Predvajalnik predstavnih vsebin
|
||||||
|
Comment[sl]=Berite, zajemite, oddajajte vaše večpredstavne pretoke
|
||||||
|
Name[sr]=ВЛЦ медијски плејер
|
||||||
|
GenericName[sr]=Медијски плејер
|
||||||
|
Comment[sr]=Читај, хватај, емитуј своје мултимедијалне токове
|
||||||
|
Name[sq]=VLC lexues media
|
||||||
|
GenericName[sq]=Lexues Media
|
||||||
|
Comment[sq]=Lexoni, kapni dhe transmetoni transmetimet tuaja multimedia
|
||||||
|
Name[sv]=VLC media player
|
||||||
|
GenericName[sv]=Mediaspelare
|
||||||
|
Comment[sv]=Läs, fånga, sänd dina multimediaströmmar
|
||||||
|
Name[te]=VLC మాధ్యమ ప్రదర్శకం
|
||||||
|
GenericName[te]=మాధ్యమ ప్రదర్శకం
|
||||||
|
Comment[te]=మీ బహుళమాధ్యమ ప్రవాహాలను చదువు, బంధించు మరియు ప్రసారం చేయి
|
||||||
|
Name[th]=โปรแกรมเล่นสื่อ VLC
|
||||||
|
GenericName[th]=โปรแกรมเล่นสื่อ
|
||||||
|
Comment[th]=อ่าน จับ และถ่ายทอดสตรีมมัลติมีเดียของคุณ
|
||||||
|
Name[tr]=VLC ortam oynatıcısı
|
||||||
|
GenericName[tr]=Ortam oynatıcısı
|
||||||
|
Comment[tr]=Çoklu ortam akışlarınızı okuyun, yakalayın, yayınlayın
|
||||||
|
Name[uk]=Медіапрогравач VLC
|
||||||
|
GenericName[uk]=Медіапрогравач
|
||||||
|
Comment[uk]=Читання, захоплення та поширення ваших мультимедійних потоків
|
||||||
|
Name[vi]=Trình phát media VLC
|
||||||
|
GenericName[vi]=Trình phát Media
|
||||||
|
Comment[vi]=Đọc, chụp, phát các luồng đa phương tiện của bạn
|
||||||
|
Name[wa]=Djouweu d' media VLC
|
||||||
|
GenericName[wa]=Djouweu d' media
|
||||||
|
Comment[wa]=Lét, egaloye, evoye vos floûs multimedia
|
||||||
|
Name[zh_CN]=VLC 媒体播放器
|
||||||
|
GenericName[zh_CN]=媒体播放器
|
||||||
|
Comment[zh_CN]=读取、捕获、广播您的多媒体流
|
||||||
|
Name[zh_TW]=VLC 媒體播放器
|
||||||
|
GenericName[zh_TW]=媒體播放器
|
||||||
|
Comment[zh_TW]=讀取、擷取與廣播您的多媒體串流
|
||||||
|
Exec=env QT_SCALE_FACTOR=1.5 /usr/bin/vlc --started-from-file %U
|
||||||
|
TryExec=/usr/bin/vlc
|
||||||
|
Icon=vlc
|
||||||
|
Terminal=false
|
||||||
|
Type=Application
|
||||||
|
Categories=AudioVideo;Player;Recorder;
|
||||||
|
MimeType=application/ogg;application/x-ogg;audio/ogg;audio/vorbis;audio/x-vorbis;audio/x-vorbis+ogg;video/ogg;video/x-ogm;video/x-ogm+ogg;video/x-theora+ogg;video/x-theora;audio/x-speex;audio/opus;application/x-flac;audio/flac;audio/x-flac;audio/x-ms-asf;audio/x-ms-asx;audio/x-ms-wax;audio/x-ms-wma;video/x-ms-asf;video/x-ms-asf-plugin;video/x-ms-asx;video/x-ms-wm;video/x-ms-wmv;video/x-ms-wmx;video/x-ms-wvx;video/x-msvideo;audio/x-pn-windows-acm;video/divx;video/msvideo;video/vnd.divx;video/avi;video/x-avi;application/vnd.rn-realmedia;application/vnd.rn-realmedia-vbr;audio/vnd.rn-realaudio;audio/x-pn-realaudio;audio/x-pn-realaudio-plugin;audio/x-real-audio;audio/x-realaudio;video/vnd.rn-realvideo;audio/mpeg;audio/mpg;audio/mp1;audio/mp2;audio/mp3;audio/x-mp1;audio/x-mp2;audio/x-mp3;audio/x-mpeg;audio/x-mpg;video/mp2t;video/mpeg;video/mpeg-system;video/x-mpeg;video/x-mpeg2;video/x-mpeg-system;application/mpeg4-iod;application/mpeg4-muxcodetable;application/x-extension-m4a;application/x-extension-mp4;audio/aac;audio/m4a;audio/mp4;audio/x-m4a;audio/x-aac;video/mp4;video/mp4v-es;video/x-m4v;application/x-quicktime-media-link;application/x-quicktimeplayer;video/quicktime;application/x-matroska;audio/x-matroska;video/x-matroska;video/webm;audio/webm;audio/3gpp;audio/3gpp2;audio/AMR;audio/AMR-WB;video/3gp;video/3gpp;video/3gpp2;x-scheme-handler/mms;x-scheme-handler/mmsh;x-scheme-handler/rtsp;x-scheme-handler/rtp;x-scheme-handler/rtmp;x-scheme-handler/icy;x-scheme-handler/icyx;application/x-cd-image;x-content/video-vcd;x-content/video-svcd;x-content/video-dvd;x-content/audio-cdda;x-content/audio-player;application/ram;application/xspf+xml;audio/mpegurl;audio/x-mpegurl;audio/scpls;audio/x-scpls;text/google-video-pointer;text/x-google-video-pointer;video/vnd.mpegurl;application/vnd.apple.mpegurl;application/vnd.ms-asf;application/vnd.ms-wpl;application/sdp;audio/dv;video/dv;audio/x-aiff;audio/x-pn-aiff;video/x-anim;video/x-nsv;video/fli;video/flv;video/x-flc;video/x-fli;video/x-flv;audio/wav;audio/x-pn-au;audio/x-pn-wav;audio/x-wav;audio/x-adpcm;audio/ac3;audio/eac3;audio/vnd.dts;audio/vnd.dts.hd;audio/vnd.dolby.heaac.1;audio/vnd.dolby.heaac.2;audio/vnd.dolby.mlp;audio/basic;audio/midi;audio/x-ape;audio/x-gsm;audio/x-musepack;audio/x-tta;audio/x-wavpack;audio/x-shorten;application/x-shockwave-flash;application/x-flash-video;misc/ultravox;image/vnd.rn-realpix;audio/x-it;audio/x-mod;audio/x-s3m;audio/x-xm;application/mxf;
|
||||||
|
X-KDE-Protocols=ftp,http,https,mms,rtmp,rtsp,sftp,smb
|
||||||
|
Keywords=Player;Capture;DVD;Audio;Video;Server;Broadcast;
|
||||||
@@ -37,15 +37,15 @@
|
|||||||
# Zsh >= 5.1 is required.
|
# Zsh >= 5.1 is required.
|
||||||
[[ $ZSH_VERSION == (5.<1->*|<6->.*) ]] || return
|
[[ $ZSH_VERSION == (5.<1->*|<6->.*) ]] || return
|
||||||
|
|
||||||
# Prompt colors — Nord palette.
|
# Prompt colors — Catppuccin Frappé palette.
|
||||||
# https://www.nordtheme.com/docs/colors-and-palettes
|
# https://catppuccin.com/palette/
|
||||||
local grey='#4C566A' # nord3
|
local grey='#838ba7' # overlay1
|
||||||
local red='#BF616A' # nord11
|
local red='#e78284' # red
|
||||||
local yellow='#EBCB8B' # nord13
|
local yellow='#e5c890' # yellow
|
||||||
local blue='#88C0D0' # nord8
|
local blue='#85c1dc' # sapphire
|
||||||
local magenta='#B48EAD' # nord15
|
local magenta='#ca9ee6' # mauve
|
||||||
local cyan='#8FBCBB' # nord7
|
local cyan='#81c8be' # teal
|
||||||
local white='#ECEFF4' # nord6
|
local white='#c6d0f5' # text
|
||||||
|
|
||||||
# Left prompt segments.
|
# Left prompt segments.
|
||||||
typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(
|
typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(
|
||||||
|
|||||||
Vendored
-10
@@ -1,10 +0,0 @@
|
|||||||
[
|
|
||||||
{
|
|
||||||
"key": "shift+enter",
|
|
||||||
"command": "workbench.action.terminal.sendSequence",
|
|
||||||
"args": {
|
|
||||||
"text": "\u001b\r"
|
|
||||||
},
|
|
||||||
"when": "terminalFocus"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
Vendored
-1076
File diff suppressed because it is too large
Load Diff
@@ -15,4 +15,10 @@ plugins=(
|
|||||||
export EDITOR=micro
|
export EDITOR=micro
|
||||||
|
|
||||||
# Enable TrueColors for micro
|
# Enable TrueColors for micro
|
||||||
export MICRO_TRUECOLOR=1
|
export MICRO_TRUECOLOR=1
|
||||||
|
|
||||||
|
# Set custom glamour style
|
||||||
|
export GLAMOUR_STYLE="$HOME/.catppuccin/glamour/themes/catppuccin-frappe.json"
|
||||||
|
|
||||||
|
# Set custom glow style
|
||||||
|
export GLOW_STYLE="$HOME/.catppuccin/glamour/themes/catppuccin-frappe.json"
|
||||||
|
|||||||
@@ -65,6 +65,7 @@ path_extensions=(
|
|||||||
"$HOME/.pyenv/bin"
|
"$HOME/.pyenv/bin"
|
||||||
"$HOME/.cargo/bin"
|
"$HOME/.cargo/bin"
|
||||||
"$HOME/go/bin"
|
"$HOME/go/bin"
|
||||||
|
"$HOME/.local/share/pnpm/bin"
|
||||||
)
|
)
|
||||||
|
|
||||||
# Apply add_to_path to each directory (prepend by default)
|
# Apply add_to_path to each directory (prepend by default)
|
||||||
|
|||||||
@@ -1,276 +1,185 @@
|
|||||||
<div align="center">
|
# Valknar's home · v1.0.0
|
||||||
|
|
||||||
<pre>
|
This is a **personal development environment** configuration managed with `arty`.
|
||||||
_ _____ __ __ __ _ _____ ____ _ _____
|
|
||||||
| | / / | / / / //_// | / / | / __ ( ) ___/
|
|
||||||
| | / / /| | / / / ,< / |/ / /| | / /_/ //\__ \
|
|
||||||
| |/ / ___ |/ /___/ /| |/ /| / ___ |/ _, _/ ___/ /
|
|
||||||
|___/_/ |_/_____/_/ |_/_/ |_/_/ |_/_/ |_| /____/
|
|
||||||
|
|
||||||
__________ ____ ____________
|
|
||||||
/ ____/ __ \/ __ \/ ____/ ____/
|
|
||||||
/ /_ / / / / /_/ / / __/ __/
|
|
||||||
/ __/ / /_/ / _, _/ /_/ / /___
|
|
||||||
/_/ \____/_/ |_|\____/_____/
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
# WHERE CODE MEETS CHAOS
|
|
||||||
|
|
||||||
[](https://www.debian.org/)
|
|
||||||
[](https://www.slayer.net/)
|
|
||||||
[](/)
|
|
||||||
[](LICENSE)
|
|
||||||
|
|
||||||
**My Debian home directory - forged in the fires of chaos, tempered with configuration files,**
|
|
||||||
**and wielded with the fury of a thousand riffs.**
|
|
||||||
|
|
||||||
*This is where dotfiles headbang and shell scripts scream.*
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## THE ARSENAL
|
|
||||||
|
|
||||||
### WEAPONS OF MASS DEVELOPMENT
|
|
||||||
|
|
||||||
```
|
|
||||||
+-----------------------------------------------------+
|
|
||||||
| NODE.JS | Managed by nvm |
|
|
||||||
| PYTHON | Managed by pyenv |
|
|
||||||
| RUBY | Managed by rbenv |
|
|
||||||
| RUST | Managed by rustup |
|
|
||||||
| DOCKER | Containerized destruction |
|
|
||||||
+-----------------------------------------------------+
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## INSTALLATION
|
|
||||||
|
|
||||||
### One-liner bootstrap
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl https://dev.pivoine.art/valknar/home/raw/branch/main/bin/setup -sSf | sh
|
curl https://dev.pivoine.art/valknar/home/raw/branch/main/bin/setup -sSf | sh
|
||||||
```
|
```
|
||||||
|
|
||||||
**Prerequisites:** `curl` or `wget` · `sh`/`bash` · `sudo` *(for installing git/zsh if missing)*
|
---
|
||||||
|
|
||||||
### What the setup script does
|
## Dependencies
|
||||||
|
|
||||||
| Step | Action |
|
| Package | Location | Ref |
|
||||||
|------|--------|
|
|---------|----------|-----|
|
||||||
| 1 | Detects OS (Debian/Ubuntu, macOS, other Linux) |
|
| `nvm` | `.nvm` | — |
|
||||||
| 2 | Installs `git` if missing — `apt-get` on Debian/Ubuntu, `xcode-select` on macOS |
|
| `rbenv` | `.rbenv` | — |
|
||||||
| 3 | Installs `zsh` if missing, sets it as the default shell via `chsh` |
|
| `ruby-build` | `.rbenv/plugins/ruby-build` | — |
|
||||||
| 4 | Clones this repo into `~` via HTTPS — or `git pull` if already present *(idempotent)* |
|
| `pyenv` | `.pyenv` | — |
|
||||||
| 5 | Runs `arty deps` — clones nvm, rbenv, pyenv, oh-my-zsh, powerlevel10k, zsh plugins |
|
| `ohmyzsh` | `.oh-my-zsh` | — |
|
||||||
| 6 | Installs `arty` zsh completion via `arty completion zsh --install` |
|
| `powerlevel10k` | `.zsh/themes/powerlevel10k` | — |
|
||||||
| 7 | Drops into a zsh login shell |
|
| `zsh-autocomplete` | `.zsh/plugins/zsh-autocomplete` | — |
|
||||||
|
| `zsh-autosuggestions` | `.zsh/plugins/zsh-autosuggestions` | — |
|
||||||
|
| `zsh-syntax-highlighting` | `.zsh/plugins/zsh-syntax-highlighting` | — |
|
||||||
|
|
||||||
### After installation
|
---
|
||||||
|
|
||||||
```bash
|
## Scripts
|
||||||
p10k configure # first time: configure the Powerlevel10k prompt
|
|
||||||
|
|
||||||
arty ssh:keygen # generate an SSH key, then add it at https://dev.pivoine.art
|
### `git:config`
|
||||||
|
|
||||||
# switch the dotfiles remote from HTTPS to SSH (after key is set up)
|
```sh
|
||||||
git -C ~ remote set-url origin ssh://git@dev.pivoine.art/valknar/home.git
|
printf 'Name: ' && read name
|
||||||
|
printf 'Email: ' && read email
|
||||||
|
printf '[user]\n name = %s\n email = %s\n' "$name" "$email" > ~/.gitconfig.local
|
||||||
|
echo "Written ~/.gitconfig.local"
|
||||||
|
```
|
||||||
|
|
||||||
|
### `ssh:keygen`
|
||||||
|
|
||||||
|
```sh
|
||||||
|
ssh-keygen -t ed25519 -C "$(git config --global --include user.email)"
|
||||||
|
```
|
||||||
|
|
||||||
|
### `debian:upgrade`
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo apt update && sudo apt upgrade -y
|
||||||
|
```
|
||||||
|
|
||||||
|
### `debian:setup:contrib`
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo sed -i 's/main non-free-firmware/main contrib non-free non-free-firmware/g' /etc/apt/sources.list
|
||||||
|
```
|
||||||
|
|
||||||
|
### `debian:install:base`
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo apt install -y build-essential git curl wget unzip zip tar zsh file fzf
|
||||||
|
```
|
||||||
|
|
||||||
|
### `debian:install:libs`
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo apt install -y libffi-dev zlib1g-dev libyaml-dev libssl-dev liblzma-dev libbz2-dev libncurses-dev libreadline-dev libsqlite3-dev python3-tk tk-dev zstd
|
||||||
|
```
|
||||||
|
|
||||||
|
### `debian:install:tools`
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo apt install -y imagemagick rsvg-convert ffmpeg yt-dlp shellcheck
|
||||||
|
```
|
||||||
|
|
||||||
|
### `docker:install`
|
||||||
|
|
||||||
|
```sh
|
||||||
|
curl -fsSL -o- https://get.docker.com | sudo sh && sudo usermod -aG docker $USER
|
||||||
|
```
|
||||||
|
|
||||||
|
### `rust:install`
|
||||||
|
|
||||||
|
```sh
|
||||||
|
curl https://sh.rustup.rs -sSf | sh -s -- --no-modify-path -y
|
||||||
|
```
|
||||||
|
|
||||||
|
### `rust:install:tools`
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cargo install bat fd-find yazi-build
|
||||||
|
```
|
||||||
|
|
||||||
|
### `rust:update`
|
||||||
|
|
||||||
|
```sh
|
||||||
|
rustup update
|
||||||
|
```
|
||||||
|
|
||||||
|
### `node:install`
|
||||||
|
|
||||||
|
```sh
|
||||||
|
. "$HOME/.nvm/nvm.sh" && nvm install
|
||||||
|
```
|
||||||
|
|
||||||
|
### `node:install:base`
|
||||||
|
|
||||||
|
```sh
|
||||||
|
npm i -g npm pnpm
|
||||||
|
```
|
||||||
|
|
||||||
|
### `ruby:install`
|
||||||
|
|
||||||
|
```sh
|
||||||
|
rbenv install
|
||||||
|
```
|
||||||
|
|
||||||
|
### `ruby:install:base`
|
||||||
|
|
||||||
|
```sh
|
||||||
|
gem install bundler
|
||||||
|
```
|
||||||
|
|
||||||
|
### `python:install`
|
||||||
|
|
||||||
|
```sh
|
||||||
|
pyenv install
|
||||||
|
```
|
||||||
|
|
||||||
|
### `go:install`
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo apt install -y golang-go
|
||||||
|
```
|
||||||
|
|
||||||
|
### `go:install:tools`
|
||||||
|
|
||||||
|
```sh
|
||||||
|
CGO_ENABLED=1 go install -tags extended,withdeploy github.com/gohugoio/hugo@latest
|
||||||
|
go install github.com/mikefarah/yq/v4@latest
|
||||||
|
```
|
||||||
|
|
||||||
|
### `go:clean`
|
||||||
|
|
||||||
|
```sh
|
||||||
|
go clean -cache && go clean -modcache
|
||||||
|
```
|
||||||
|
|
||||||
|
### `vscode:extensions`
|
||||||
|
|
||||||
|
```sh
|
||||||
|
code --install-extension editorconfig.editorconfig
|
||||||
|
```
|
||||||
|
|
||||||
|
### `micro:install`
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo apt install -y micro
|
||||||
|
```
|
||||||
|
|
||||||
|
### `micro:plugins`
|
||||||
|
|
||||||
|
```sh
|
||||||
|
micro -plugin install editorconfig
|
||||||
|
```
|
||||||
|
|
||||||
|
### `bat:build`
|
||||||
|
|
||||||
|
```sh
|
||||||
|
bat cache --build
|
||||||
|
```
|
||||||
|
|
||||||
|
### `fonts:install`
|
||||||
|
|
||||||
|
```sh
|
||||||
|
mkdir -p ~/.local/share/fonts/Meslo
|
||||||
|
curl -L https://github.com/ryanoasis/nerd-fonts/releases/latest/download/Meslo.tar.xz | tar --extract --xz --directory ~/.local/share/fonts/Meslo
|
||||||
|
fc-cache -fv
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## arty - REPOSITORY ORCHESTRATION
|
## Details
|
||||||
|
|
||||||
### Available Scripts
|
- **Author**: valknar@pivoine.art
|
||||||
|
- **License**: MIT
|
||||||
```bash
|
- **URL**: [https://dev.pivoine.art/valknar/home](https://dev.pivoine.art/valknar/home)
|
||||||
# System setup
|
|
||||||
arty debian:setup:contrib # Enable contrib/non-free repos
|
|
||||||
arty debian:upgrade # apt update && apt upgrade
|
|
||||||
arty debian:install:base # build-essential, curl, wget, git, zsh, bat, fzf, make...
|
|
||||||
arty debian:install:libs # dev libs: libffi, zlib, libyaml, libssl, libsqlite3...
|
|
||||||
arty debian:install:tools # imagemagick, rsvg-convert, ffmpeg, yt-dlp
|
|
||||||
|
|
||||||
# Development tools
|
|
||||||
arty rust:install # Rust toolchain via rustup
|
|
||||||
arty node:install # Node.js via nvm
|
|
||||||
arty node:install:base # npm + pnpm globally
|
|
||||||
arty ruby:install # Ruby via rbenv
|
|
||||||
arty ruby:install:base # bundler gem
|
|
||||||
arty python:install # Python via pyenv
|
|
||||||
arty go:install # Go via apt
|
|
||||||
arty go:install:tools # hugo (extended) + yq via go install
|
|
||||||
arty go:clean # Clear go build and module cache
|
|
||||||
arty docker:install # Docker Engine with user group
|
|
||||||
```
|
|
||||||
|
|
||||||
### What arty Manages
|
|
||||||
|
|
||||||
- **Version managers** (nvm, rbenv, pyenv)
|
|
||||||
- **Shell configuration** (Oh-My-Zsh, Powerlevel10k, zsh plugins)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## COMMAND LINE BRUTALITY
|
|
||||||
|
|
||||||
### Custom Scripts
|
|
||||||
|
|
||||||
Scripts live in `~/bin/` and are tracked in this repo.
|
|
||||||
|
|
||||||
- **`arty`** — repository orchestration, reads `arty.yml`
|
|
||||||
- **`stacks`** — Docker Compose stack manager (runs in current directory, or set `STACKS_DIR`)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## ENVIRONMENT STRUCTURE
|
|
||||||
|
|
||||||
```
|
|
||||||
~/
|
|
||||||
+-- .nvm/ # Node Version Manager
|
|
||||||
+-- .rbenv/ # Ruby Version Manager
|
|
||||||
| +-- plugins/ruby-build/
|
|
||||||
+-- .pyenv/ # Python Version Manager
|
|
||||||
+-- .oh-my-zsh/ # Oh-My-Zsh framework
|
|
||||||
+-- .zsh/
|
|
||||||
| +-- themes/
|
|
||||||
| | +-- powerlevel10k/
|
|
||||||
| +-- plugins/
|
|
||||||
| +-- zsh-autocomplete/
|
|
||||||
| +-- zsh-autosuggestions/
|
|
||||||
| +-- zsh-syntax-highlighting/
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## DOTFILE HIGHLIGHTS
|
|
||||||
|
|
||||||
### Shell Configuration
|
|
||||||
- **`.zshrc`** - Oh-My-Zsh with Powerlevel10k theme
|
|
||||||
- **`.zlogin`** - Login script (mounts HiDrive, creates symbolic links)
|
|
||||||
- **`.p10k.zsh`** - Powerlevel10k configuration
|
|
||||||
- **`.zprofile`**, **`.zlogout`**, **`.zshenv`** - Zsh startup files
|
|
||||||
|
|
||||||
### Version Files
|
|
||||||
- **`.nvmrc`** - Node.js version
|
|
||||||
- **`.ruby-version`** - Ruby version
|
|
||||||
- **`.python-version`** - Python version
|
|
||||||
|
|
||||||
### Git Configuration
|
|
||||||
- **`.gitignore`** - INVERTED PATTERN (ignore all, allow specific files)
|
|
||||||
- **`.gitconfig`** - Git user configuration
|
|
||||||
|
|
||||||
### Personal
|
|
||||||
- **`signature.txt`** - ASCII art email signature
|
|
||||||
- **`.hushlogin`** - Suppress login banners
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## GIT SELECTIVE TRACKING
|
|
||||||
|
|
||||||
This repository uses an **inverted `.gitignore`** pattern:
|
|
||||||
|
|
||||||
```gitignore
|
|
||||||
# Ignore everything
|
|
||||||
*
|
|
||||||
|
|
||||||
# But not these files.
|
|
||||||
!.gitignore
|
|
||||||
!.gitconfig
|
|
||||||
!.editorconfig
|
|
||||||
!.nvmrc
|
|
||||||
!.ruby-version
|
|
||||||
!.python-version
|
|
||||||
!.p10k.zsh
|
|
||||||
!.zprofile
|
|
||||||
!.zlogout
|
|
||||||
!.zlogin
|
|
||||||
!.zshrc
|
|
||||||
!.zshenv
|
|
||||||
!.hushlogin
|
|
||||||
!arty.yml
|
|
||||||
!signature.txt
|
|
||||||
!LICENSE
|
|
||||||
!README.md
|
|
||||||
```
|
|
||||||
|
|
||||||
**Why?** To track only essential dotfiles and configurations while ignoring cache, logs, and user data.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## SHELL PLUGIN POWER
|
|
||||||
|
|
||||||
**Oh-My-Zsh Plugins Loaded:**
|
|
||||||
```
|
|
||||||
git gh sudo ssh ruby rust python node
|
|
||||||
rsync nvm rbenv pyenv docker docker-compose qrcode
|
|
||||||
zsh-autosuggestions zsh-syntax-highlighting
|
|
||||||
zsh-interactive-cd zsh-navigation-tools
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## USEFUL RESOURCES
|
|
||||||
|
|
||||||
### System & Shell
|
|
||||||
- [Oh-My-Zsh](https://ohmyz.sh/)
|
|
||||||
- [Powerlevel10k](https://github.com/romkatv/powerlevel10k)
|
|
||||||
|
|
||||||
### Language Managers
|
|
||||||
- [nvm](https://github.com/nvm-sh/nvm) - Node Version Manager
|
|
||||||
- [rbenv](https://github.com/rbenv/rbenv) - Ruby Version Manager
|
|
||||||
- [pyenv](https://github.com/pyenv/pyenv) - Python Version Manager
|
|
||||||
- [rustup](https://rustup.rs/) - Rust Toolchain Manager
|
|
||||||
|
|
||||||
### CLI Tools
|
|
||||||
- [yq](https://github.com/mikefarah/yq) - YAML processor
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## LICENSE
|
|
||||||
|
|
||||||
MIT License - Do whatever the hell you want with it.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
<div align="center">
|
|
||||||
|
|
||||||
<pre>
|
|
||||||
=================================================================
|
|
||||||
|
|
||||||
__________ ____ ______ _________
|
|
||||||
/ ____/ __ \/ __ \/ ____/ / _/ ___/
|
|
||||||
/ / / / / / / / / __/ / / \__ \
|
|
||||||
/ /___/ /_/ / /_/ / /___ _/ / ___/ /
|
|
||||||
\____/\____/_____/_____/ /___//____/
|
|
||||||
|
|
||||||
______________ _______ ____ ____ ___ ______ __
|
|
||||||
/_ __/ ____/ |/ / __ \/ __ \/ __ \/ | / __ \ \/ /
|
|
||||||
/ / / __/ / /|_/ / /_/ / / / / /_/ / /| | / /_/ /\ /
|
|
||||||
/ / / /___/ / / / ____/ /_/ / _, _/ ___ |/ _, _/ / /
|
|
||||||
/_/ /_____/_/ /_/_/ \____/_/ |_/_/ |_/_/ |_| /_/
|
|
||||||
|
|
||||||
__ __________________ __ _________
|
|
||||||
/ |/ / ____/_ __/ | / / / _/ ___/
|
|
||||||
/ /|_/ / __/ / / / /| | / / / / \__ \
|
|
||||||
/ / / / /___ / / / ___ |/ /___ _/ / ___/ /
|
|
||||||
/_/ /_/_____/ /_/ /_/ |_/_____/ /___//____/
|
|
||||||
|
|
||||||
______________________ _ _____ __
|
|
||||||
/ ____/_ __/ ____/ __ \/ | / / | / /
|
|
||||||
/ __/ / / / __/ / /_/ / |/ / /| | / /
|
|
||||||
/ /___ / / / /___/ _, _/ /| / ___ |/ /___
|
|
||||||
/_____/ /_/ /_____/_/ |_/_/ |_/_/ |_/_____/
|
|
||||||
|
|
||||||
=================================================================
|
|
||||||
|
|
||||||
FORGED BY VALKNAR
|
|
||||||
valknar@pivoine.art
|
|
||||||
Powered by Debian | Fueled by Metal
|
|
||||||
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
**[BACK TO THE TOP](#)**
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|||||||
@@ -1,30 +1,14 @@
|
|||||||
name: "Valknar's home"
|
name: "Valknar's home"
|
||||||
version: "1.0.0"
|
version: "1.0.0"
|
||||||
description: "Valknar's home repository"
|
|
||||||
author: "valknar@pivoine.art"
|
author: "valknar@pivoine.art"
|
||||||
license: "MIT"
|
license: "MIT"
|
||||||
notes: |
|
url: "https://dev.pivoine.art/valknar/home"
|
||||||
# Valknar's Home Repository
|
description: |
|
||||||
|
|
||||||
This is a **personal development environment** configuration managed with `arty`.
|
This is a **personal development environment** configuration managed with `arty`.
|
||||||
|
|
||||||
## Quick Start
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl https://dev.pivoine.art/valknar/home/raw/branch/main/bin/setup -sSf | sh
|
curl https://dev.pivoine.art/valknar/home/raw/branch/main/bin/setup -sSf | sh
|
||||||
```
|
```
|
||||||
|
|
||||||
## Key Features
|
|
||||||
|
|
||||||
- **Shell Configuration**: Zsh with Oh-My-Zsh and Powerlevel10k theme
|
|
||||||
- **Version Managers**: nvm (Node), rbenv (Ruby), pyenv (Python)
|
|
||||||
- **Development Tools**: Docker, Rust, Node.js, Python, Ruby
|
|
||||||
- **Utilities**: Custom scripts in `bin/` directory
|
|
||||||
|
|
||||||
## Links
|
|
||||||
|
|
||||||
- [Repository](ssh://git@dev.pivoine.art/valknar/home.git)
|
|
||||||
- [Documentation](https://dev.pivoine.art/valknar/home)
|
|
||||||
references:
|
references:
|
||||||
- url: https://github.com/nvm-sh/nvm.git
|
- url: https://github.com/nvm-sh/nvm.git
|
||||||
into: .nvm
|
into: .nvm
|
||||||
@@ -44,14 +28,29 @@ references:
|
|||||||
into: .zsh/plugins/zsh-autosuggestions
|
into: .zsh/plugins/zsh-autosuggestions
|
||||||
- url: https://github.com/zsh-users/zsh-syntax-highlighting.git
|
- url: https://github.com/zsh-users/zsh-syntax-highlighting.git
|
||||||
into: .zsh/plugins/zsh-syntax-highlighting
|
into: .zsh/plugins/zsh-syntax-highlighting
|
||||||
|
- url: https://github.com/catppuccin/bat.git
|
||||||
|
into: .catppuccin/bat
|
||||||
|
- url: https://github.com/catppuccin/yazi.git
|
||||||
|
into: .catppuccin/yazi
|
||||||
|
- url: https://github.com/catppuccin/zsh-syntax-highlighting.git
|
||||||
|
into: .catppuccin/zsh-syntax-highlighting
|
||||||
|
- url: https://github.com/catppuccin/micro.git
|
||||||
|
into: .catppuccin/micro
|
||||||
|
- url: https://github.com/catppuccin/glamour.git
|
||||||
|
into: .catppuccin/glamour
|
||||||
scripts:
|
scripts:
|
||||||
|
git:config: |
|
||||||
|
printf 'Name: ' && read name
|
||||||
|
printf 'Email: ' && read email
|
||||||
|
printf '[user]\n name = %s\n email = %s\n' "$name" "$email" > ~/.gitconfig.local
|
||||||
|
echo "Written ~/.gitconfig.local"
|
||||||
|
ssh:keygen: ssh-keygen -t ed25519 -C "$(git config --global --include user.email)"
|
||||||
debian:upgrade: sudo apt update && sudo apt upgrade -y
|
debian:upgrade: sudo apt update && sudo apt upgrade -y
|
||||||
debian:setup:contrib: sudo sed -i 's/main non-free-firmware/main contrib non-free non-free-firmware/g' /etc/apt/sources.list
|
debian:setup:contrib: sudo sed -i 's/main non-free-firmware/main contrib non-free non-free-firmware/g' /etc/apt/sources.list
|
||||||
debian:install:base: sudo apt install -y build-essential git curl wget unzip zip tar zsh file fzf
|
debian:install:base: sudo apt install -y build-essential git curl wget unzip zip tar zsh file fzf
|
||||||
debian:install:libs: sudo apt install -y libffi-dev zlib1g-dev libyaml-dev libssl-dev liblzma-dev libbz2-dev libncurses-dev libreadline-dev libsqlite3-dev python3-tk tk-dev zstd
|
debian:install:libs: sudo apt install -y libffi-dev zlib1g-dev libyaml-dev libssl-dev liblzma-dev libbz2-dev libncurses-dev libreadline-dev libsqlite3-dev python3-tk tk-dev zstd
|
||||||
debian:install:tools: sudo apt install -y imagemagick rsvg-convert ffmpeg yt-dlp shellcheck micro
|
debian:install:tools: sudo apt install -y imagemagick rsvg-convert ffmpeg yt-dlp shellcheck
|
||||||
docker:install: curl -fsSL -o- https://get.docker.com | sudo sh && sudo usermod -aG docker $USER
|
docker:install: curl -fsSL -o- https://get.docker.com | sudo sh && sudo usermod -aG docker $USER
|
||||||
ssh:keygen: ssh-keygen -t ed25519 -C "$(git config --global --include user.email)"
|
|
||||||
rust:install: curl https://sh.rustup.rs -sSf | sh -s -- --no-modify-path -y
|
rust:install: curl https://sh.rustup.rs -sSf | sh -s -- --no-modify-path -y
|
||||||
rust:install:tools: cargo install bat fd-find yazi-build
|
rust:install:tools: cargo install bat fd-find yazi-build
|
||||||
rust:update: rustup update
|
rust:update: rustup update
|
||||||
@@ -64,13 +63,24 @@ scripts:
|
|||||||
go:install:tools: |
|
go:install:tools: |
|
||||||
CGO_ENABLED=1 go install -tags extended,withdeploy github.com/gohugoio/hugo@latest
|
CGO_ENABLED=1 go install -tags extended,withdeploy github.com/gohugoio/hugo@latest
|
||||||
go install github.com/mikefarah/yq/v4@latest
|
go install github.com/mikefarah/yq/v4@latest
|
||||||
|
go install github.com/charmbracelet/glow/v2@latest
|
||||||
go:clean: go clean -cache && go clean -modcache
|
go:clean: go clean -cache && go clean -modcache
|
||||||
vscode:extensions: |
|
vscode:extensions: |
|
||||||
code --install-extension editorconfig.editorconfig
|
code --install-extension editorconfig.editorconfig
|
||||||
|
micro:install:
|
||||||
|
sudo apt install -y micro
|
||||||
micro:plugins: |
|
micro:plugins: |
|
||||||
micro -plugin install editorconfig
|
micro -plugin install editorconfig
|
||||||
|
catppuccin:install: |
|
||||||
|
mkdir -p ~/.config/micro/colorschemes
|
||||||
|
ln -sf ~/.catppuccin/micro/themes/catppuccin-frappe.micro ~/.config/micro/colorschemes/catppuccin-frappe.micro
|
||||||
|
mkdir -p ~/.config/bat/themes
|
||||||
|
ln -sf ~/.catppuccin/bat/themes/Catppuccin\ Frappe.tmTheme ~/.config/bat/themes/Catppuccin\ Frappe.tmTheme
|
||||||
|
bat cache --build
|
||||||
|
ln -sf ~/.catppuccin/yazi/themes/frappe/catppuccin-frappe-blue.toml ~/.config/yazi/theme.toml
|
||||||
|
ln -sf ~/.catppuccin/zsh-syntax-highlighting/themes/catppuccin_frappe-zsh-syntax-highlighting.zsh ~/.zsh/catppuccin_frappe-zsh-syntax-highlighting.zsh
|
||||||
fonts:install: |
|
fonts:install: |
|
||||||
mkdir -p ~/.local/share/fonts/Meslo
|
mkdir -p ~/.local/share/fonts/Meslo
|
||||||
curl -L https://github.com/ryanoasis/nerd-fonts/releases/latest/download/Meslo.tar.xz | tar --extract --xz --directory ~/.local/share/fonts/Meslo
|
curl -L https://github.com/ryanoasis/nerd-fonts/releases/latest/download/Meslo.tar.xz | tar --extract --xz --directory ~/.local/share/fonts/Meslo
|
||||||
fc-cache -fv
|
fc-cache -fv
|
||||||
bat:build: bat cache --build
|
tailscale:up: sudo tailscale up --login-server https://headscale.pivoine.art
|
||||||
|
|||||||
@@ -112,13 +112,4 @@ envs:
|
|||||||
production:
|
production:
|
||||||
APP_ENV: production
|
APP_ENV: production
|
||||||
LOG_LEVEL: info
|
LOG_LEVEL: info
|
||||||
|
|
||||||
notes: |
|
|
||||||
## Getting Started
|
|
||||||
Run `arty deps` to install all dependencies, then `arty build` to compile.
|
|
||||||
|
|
||||||
## Scripts
|
|
||||||
- **build** — compile the project
|
|
||||||
- **test** — run the test suite
|
|
||||||
- **deploy** — deploy to the configured environment
|
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1005,46 +1005,135 @@ list_libs() {
|
|||||||
echo
|
echo
|
||||||
}
|
}
|
||||||
|
|
||||||
# Display notes from arty.yml with markdown rendering
|
# Generate a comprehensive Markdown document from arty.yml
|
||||||
show_notes() {
|
generate_notes_md() {
|
||||||
local config_file="${1:-$ARTY_CONFIG_FILE}"
|
local config_file="${1:-$ARTY_CONFIG_FILE}"
|
||||||
|
local md=""
|
||||||
|
|
||||||
if [[ ! -f "$config_file" ]]; then
|
# Read top-level fields
|
||||||
log_error "Config file not found: $config_file"
|
local name version description author license url notes
|
||||||
|
name=$(get_yaml_field "$config_file" "name")
|
||||||
|
version=$(get_yaml_field "$config_file" "version")
|
||||||
|
description=$(get_yaml_field "$config_file" "description")
|
||||||
|
author=$(get_yaml_field "$config_file" "author")
|
||||||
|
license=$(get_yaml_field "$config_file" "license")
|
||||||
|
url=$(get_yaml_field "$config_file" "url")
|
||||||
|
notes=$(yq eval '.notes' "$config_file" 2>/dev/null)
|
||||||
|
|
||||||
|
# Null-clean
|
||||||
|
[[ "$name" == "null" || -z "$name" ]] && name="$(basename "$PWD")"
|
||||||
|
[[ "$version" == "null" ]] && version=""
|
||||||
|
[[ "$description" == "null" ]] && description=""
|
||||||
|
[[ "$author" == "null" ]] && author=""
|
||||||
|
[[ "$license" == "null" ]] && license=""
|
||||||
|
[[ "$url" == "null" ]] && url=""
|
||||||
|
[[ "$notes" == "null" ]] && notes=""
|
||||||
|
|
||||||
|
# Title
|
||||||
|
if [[ -n "$version" ]]; then
|
||||||
|
md+="# ${name} · v${version}"$'\n\n'
|
||||||
|
else
|
||||||
|
md+="# ${name}"$'\n\n'
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Description
|
||||||
|
if [[ -n "$description" ]]; then
|
||||||
|
md+="${description}"$'\n\n'
|
||||||
|
md+="---"$'\n\n'
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Overview (.notes field)
|
||||||
|
if [[ -n "$notes" ]]; then
|
||||||
|
md+="## Overview"$'\n\n'
|
||||||
|
md+="${notes}"$'\n\n'
|
||||||
|
md+="---"$'\n\n'
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Dependencies table
|
||||||
|
local ref_count
|
||||||
|
ref_count=$(yq eval '.references | length' "$config_file" 2>/dev/null)
|
||||||
|
if [[ "$ref_count" =~ ^[0-9]+$ ]] && [[ "$ref_count" -gt 0 ]]; then
|
||||||
|
md+="## Dependencies"$'\n\n'
|
||||||
|
md+="| Package | Location | Ref |"$'\n'
|
||||||
|
md+="|---------|----------|-----|"$'\n'
|
||||||
|
for ((i=0; i<ref_count; i++)); do
|
||||||
|
local ref_data ref_url ref_into ref_ref pkg_name _rest _rest2
|
||||||
|
ref_data=$(parse_reference "$config_file" "$i")
|
||||||
|
ref_url="${ref_data%%|*}"
|
||||||
|
_rest="${ref_data#*|}"
|
||||||
|
ref_into="${_rest%%|*}"
|
||||||
|
_rest2="${_rest#*|}"
|
||||||
|
ref_ref="${_rest2%%|*}"
|
||||||
|
pkg_name=$(get_lib_name "$ref_url")
|
||||||
|
[[ -z "$ref_into" ]] && ref_into=".arty/libs/${pkg_name}"
|
||||||
|
[[ -z "$ref_ref" ]] && ref_ref="—"
|
||||||
|
md+="| \`${pkg_name}\` | \`${ref_into}\` | ${ref_ref} |"$'\n'
|
||||||
|
done
|
||||||
|
md+=$'\n'
|
||||||
|
md+="---"$'\n\n'
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Scripts
|
||||||
|
local script_names
|
||||||
|
script_names=$(list_yaml_scripts "$config_file" 2>/dev/null)
|
||||||
|
if [[ -n "$script_names" ]]; then
|
||||||
|
md+="## Scripts"$'\n\n'
|
||||||
|
while IFS= read -r script_name; do
|
||||||
|
[[ -z "$script_name" ]] && continue
|
||||||
|
local cmd
|
||||||
|
cmd=$(get_yaml_script "$config_file" "$script_name")
|
||||||
|
[[ "$cmd" == "null" || -z "$cmd" ]] && continue
|
||||||
|
md+="### \`${script_name}\`"$'\n\n'
|
||||||
|
md+="\`\`\`sh"$'\n'
|
||||||
|
md+="${cmd}"$'\n'
|
||||||
|
md+="\`\`\`"$'\n\n'
|
||||||
|
done <<< "$script_names"
|
||||||
|
md+="---"$'\n\n'
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Details
|
||||||
|
local has_details=0
|
||||||
|
[[ -n "$author" ]] && has_details=1
|
||||||
|
[[ -n "$license" ]] && has_details=1
|
||||||
|
[[ -n "$url" ]] && has_details=1
|
||||||
|
if [[ "$has_details" -eq 1 ]]; then
|
||||||
|
md+="## Details"$'\n\n'
|
||||||
|
[[ -n "$author" ]] && md+="- **Author**: ${author}"$'\n'
|
||||||
|
[[ -n "$license" ]] && md+="- **License**: ${license}"$'\n'
|
||||||
|
[[ -n "$url" ]] && md+="- **URL**: [${url}](${url})"$'\n'
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf '%s' "$md"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Display notes from arty.yml — generated from the full config
|
||||||
|
show_notes() {
|
||||||
|
local raw_mode=0
|
||||||
|
for arg in "$@"; do [[ "$arg" == "--raw" ]] && raw_mode=1; done
|
||||||
|
|
||||||
|
if [[ ! -f "$ARTY_CONFIG_FILE" ]]; then
|
||||||
|
log_error "Config file not found: $ARTY_CONFIG_FILE"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Get notes field from YAML
|
local md
|
||||||
local notes=$(yq eval '.notes' "$config_file" 2>/dev/null)
|
md=$(generate_notes_md "$ARTY_CONFIG_FILE")
|
||||||
|
|
||||||
if [[ -z "$notes" ]] || [[ "$notes" == "null" ]]; then
|
if [[ "$raw_mode" -eq 1 ]]; then
|
||||||
log_info "No notes found in $config_file"
|
printf '%s\n' "$md"
|
||||||
log_info "Add a 'notes' field to your arty.yml to display project notes"
|
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Get project name for header
|
|
||||||
local project_name=$(get_yaml_field "$config_file" "name")
|
|
||||||
[[ "$project_name" == "null" ]] && project_name="$(basename "$PWD")"
|
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo -e "${BOLD}${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
||||||
echo -e "${BOLD}${GREEN} Notes: ${project_name}${NC}"
|
|
||||||
echo -e "${BOLD}${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
||||||
echo
|
|
||||||
|
|
||||||
# Try to render markdown with available tools
|
|
||||||
if command -v glow &>/dev/null; then
|
if command -v glow &>/dev/null; then
|
||||||
# Use glow if available (best option)
|
printf '%s\n' "$md" | glow -
|
||||||
echo "$notes" | glow -
|
|
||||||
elif command -v mdcat &>/dev/null; then
|
elif command -v mdcat &>/dev/null; then
|
||||||
# Use mdcat if available (good alternative)
|
printf '%s\n' "$md" | mdcat
|
||||||
echo "$notes" | mdcat
|
|
||||||
elif command -v python3 &>/dev/null; then
|
elif command -v python3 &>/dev/null; then
|
||||||
# Fallback to Python markdown rendering - create temp file to avoid quoting issues
|
local tmp
|
||||||
local temp_notes=$(mktemp)
|
tmp=$(mktemp)
|
||||||
echo "$notes" > "$temp_notes"
|
printf '%s\n' "$md" > "$tmp"
|
||||||
python3 - "$temp_notes" <<'EOPY' 2>/dev/null || echo "$notes"
|
python3 - "$tmp" <<'EOPY' 2>/dev/null || printf '%s\n' "$md"
|
||||||
import sys
|
import sys
|
||||||
import re
|
import re
|
||||||
|
|
||||||
@@ -1102,14 +1191,10 @@ text = re.sub(r'^(\d+)\. (.+)$', r' \1. \2', text, flags=re.MULTILINE)
|
|||||||
|
|
||||||
print(text)
|
print(text)
|
||||||
EOPY
|
EOPY
|
||||||
rm -f "$temp_notes"
|
rm -f "$tmp"
|
||||||
else
|
else
|
||||||
# Absolute fallback: just print the raw text
|
printf '%s\n' "$md"
|
||||||
echo "$notes"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo
|
|
||||||
echo -e "${BOLD}${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
||||||
echo
|
echo
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1537,7 +1622,7 @@ main() {
|
|||||||
list_libs
|
list_libs
|
||||||
;;
|
;;
|
||||||
notes)
|
notes)
|
||||||
show_notes
|
show_notes "${args[@]}"
|
||||||
;;
|
;;
|
||||||
scripts)
|
scripts)
|
||||||
list_scripts
|
list_scripts
|
||||||
|
|||||||
@@ -323,8 +323,8 @@ post_install() {
|
|||||||
echo
|
echo
|
||||||
echo -e "${GREEN}${BOLD}Setup complete.${NC} Next steps:"
|
echo -e "${GREEN}${BOLD}Setup complete.${NC} Next steps:"
|
||||||
echo
|
echo
|
||||||
echo -e " ${CYAN}1.${NC} First time on this machine? Configure the Powerlevel10k prompt:"
|
echo -e " ${CYAN}1.${NC} First time on this machine? Configure your git user:"
|
||||||
echo -e " ${BOLD}p10k configure${NC}"
|
echo -e " ${BOLD}arty git:config${NC}"
|
||||||
echo
|
echo
|
||||||
echo -e " ${CYAN}2.${NC} Generate an SSH key for git push access to dev.pivoine.art:"
|
echo -e " ${CYAN}2.${NC} Generate an SSH key for git push access to dev.pivoine.art:"
|
||||||
echo -e " ${BOLD}arty ssh:keygen${NC}"
|
echo -e " ${BOLD}arty ssh:keygen${NC}"
|
||||||
|
|||||||
+77
-18
@@ -379,22 +379,32 @@ cmd_compose() {
|
|||||||
|
|
||||||
# ─── Update Service ───────────────────────────────────────────────────────────
|
# ─── Update Service ───────────────────────────────────────────────────────────
|
||||||
|
|
||||||
# Resolve each service's image tag to its current local SHA256 ID.
|
# Resolve the compose config's image references to their current local SHA256
|
||||||
# Reads from the local image store (updated by 'docker compose pull'),
|
# IDs, one per line, sorted. Reads from the local image store (updated by
|
||||||
# NOT from running containers — so the comparison reflects the pulled image.
|
# 'docker compose pull'), NOT from running containers.
|
||||||
|
#
|
||||||
|
# Returns non-zero (and prints nothing) if the image list can't be resolved or
|
||||||
|
# none of the images are present locally — callers MUST treat that as "unknown",
|
||||||
|
# never as "everything changed".
|
||||||
_stack_image_ids() {
|
_stack_image_ids() {
|
||||||
local stack_dir="$1"; shift
|
local stack_dir="$1"; shift
|
||||||
local -a env_flag=("$@")
|
local -a env_flag=("$@")
|
||||||
local images
|
local images ids
|
||||||
|
|
||||||
# 'config --images' (compose v2.19+) outputs one image name per line;
|
# 'config --images' (compose v2.19+) outputs one image name per line;
|
||||||
# fall back to parsing the resolved config yaml for older versions.
|
# fall back to parsing the resolved config yaml for older versions.
|
||||||
if images=$(cd "$stack_dir" && docker compose "${env_flag[@]}" config --images 2>/dev/null) \
|
# NOTE: the fallback regex must be POSIX ([[:space:]], not \s) — mawk, the
|
||||||
&& [[ -n "$images" ]]; then
|
# default awk on Debian, does not understand \s and silently matches nothing.
|
||||||
echo "$images"
|
if ! images=$(cd "$stack_dir" && docker compose "${env_flag[@]}" config --images 2>/dev/null) \
|
||||||
else
|
|| [[ -z "$images" ]]; then
|
||||||
cd "$stack_dir" && docker compose "${env_flag[@]}" config 2>/dev/null \
|
images=$(cd "$stack_dir" && docker compose "${env_flag[@]}" config 2>/dev/null \
|
||||||
| awk '/^\s+image:/{print $2}' | sort -u
|
| awk '/^[[:space:]]+image:/{print $2}' | sort -u) || true
|
||||||
fi | xargs -r docker image inspect --format '{{.Id}}' 2>/dev/null | sort
|
fi
|
||||||
|
[[ -n "$images" ]] || return 1
|
||||||
|
|
||||||
|
ids=$(echo "$images" | xargs -r docker image inspect --format '{{.Id}}' 2>/dev/null | sort) || true
|
||||||
|
[[ -n "$ids" ]] || return 1
|
||||||
|
echo "$ids"
|
||||||
}
|
}
|
||||||
|
|
||||||
_update_run() {
|
_update_run() {
|
||||||
@@ -402,7 +412,7 @@ _update_run() {
|
|||||||
|
|
||||||
local -a all_stacks=()
|
local -a all_stacks=()
|
||||||
mapfile -t all_stacks < <(list_all_stacks)
|
mapfile -t all_stacks < <(list_all_stacks)
|
||||||
local -a updated=() failed=()
|
local -a updated=() failed=() skipped=()
|
||||||
local -i checked=0
|
local -i checked=0
|
||||||
|
|
||||||
log "Starting image update check (${#all_stacks[@]} stacks)"
|
log "Starting image update check (${#all_stacks[@]} stacks)"
|
||||||
@@ -415,13 +425,56 @@ _update_run() {
|
|||||||
info "Checking ${BOLD}$stack${RESET}"
|
info "Checking ${BOLD}$stack${RESET}"
|
||||||
((checked++)) || true
|
((checked++)) || true
|
||||||
|
|
||||||
local before after
|
# --- Pull, with retry. Nightly runs regularly hit transient registry
|
||||||
before=$(_stack_image_ids "$stack_dir" "${env_flag[@]+"${env_flag[@]}"}") || true
|
# errors (toomanyrequests, TLS resets, gitea registry restarting) that
|
||||||
(cd "$stack_dir" && docker compose "${env_flag[@]}" pull 2>&1) || true
|
# a short backoff clears. A pull that never succeeds must NOT fall
|
||||||
after=$(_stack_image_ids "$stack_dir" "${env_flag[@]+"${env_flag[@]}"}") || true
|
# through to the change check — otherwise a stale image looks
|
||||||
|
# "up to date" forever (this is what stuck coolify). ---
|
||||||
|
local pull_ok=false attempt
|
||||||
|
for attempt in 1 2 3 4 5; do
|
||||||
|
if (cd "$stack_dir" && docker compose "${env_flag[@]}" pull 2>&1); then
|
||||||
|
pull_ok=true
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
warn " Pull failed for $stack (attempt $attempt/5)"
|
||||||
|
[[ $attempt -lt 5 ]] && sleep $((attempt * 20))
|
||||||
|
done
|
||||||
|
if ! $pull_ok; then
|
||||||
|
err " Pull failed for $stack after 5 attempts — skipping (not recreated)"
|
||||||
|
skipped+=("$stack")
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ "$before" != "$after" ]]; then
|
# --- Decide whether a recreate is needed by comparing the image IDs the
|
||||||
|
# RUNNING containers use against the IDs the (post-pull) config
|
||||||
|
# resolves to. Unlike the old before/after snapshot diff, a transient
|
||||||
|
# empty read here can't be mistaken for "everything changed" — an
|
||||||
|
# unresolvable list is skipped, not acted on. ---
|
||||||
|
local desired current
|
||||||
|
desired=$(_stack_image_ids "$stack_dir" "${env_flag[@]+"${env_flag[@]}"}") || desired=""
|
||||||
|
if [[ -z "$desired" ]]; then
|
||||||
|
warn " Could not resolve images for $stack — skipping (not recreated)"
|
||||||
|
skipped+=("$stack")
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
current=$(cd "$stack_dir" && docker compose "${env_flag[@]}" ps -q 2>/dev/null \
|
||||||
|
| xargs -r docker inspect --format '{{.Image}}' 2>/dev/null | sort -u)
|
||||||
|
|
||||||
|
if [[ -z "$current" ]]; then
|
||||||
|
info " Up to date (stack not running — left as is)"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
local stale=false cid
|
||||||
|
while IFS= read -r cid; do
|
||||||
|
[[ -z "$cid" ]] && continue
|
||||||
|
grep -qxF -- "$cid" <<<"$desired" || stale=true
|
||||||
|
done <<<"$current"
|
||||||
|
|
||||||
|
if $stale; then
|
||||||
info " Updates found — recreating $stack"
|
info " Updates found — recreating $stack"
|
||||||
|
info " running: ${current//$'\n'/ }"
|
||||||
|
info " resolved: ${desired//$'\n'/ }"
|
||||||
if (cd "$stack_dir" && docker compose "${env_flag[@]}" up -d 2>&1); then
|
if (cd "$stack_dir" && docker compose "${env_flag[@]}" up -d 2>&1); then
|
||||||
updated+=("$stack")
|
updated+=("$stack")
|
||||||
ok " $stack updated"
|
ok " $stack updated"
|
||||||
@@ -440,9 +493,14 @@ _update_run() {
|
|||||||
local date_str
|
local date_str
|
||||||
date_str="$(date '+%Y-%m-%d %H:%M')"
|
date_str="$(date '+%Y-%m-%d %H:%M')"
|
||||||
|
|
||||||
|
local skipped_line=""
|
||||||
|
[[ ${#skipped[@]} -gt 0 ]] && skipped_line="\n⚠️ Skipped (transient errors, not recreated): ${skipped[*]}"
|
||||||
|
|
||||||
if [[ ${#failed[@]} -gt 0 ]]; then
|
if [[ ${#failed[@]} -gt 0 ]]; then
|
||||||
_notify "#cc0000" "❌ **Update failed** — $date_str\nUpdated: ${updated[*]:-none}\nFailed: ${failed[*]}"
|
_notify "#cc0000" "❌ **Update failed** — $date_str\nUpdated: ${updated[*]:-none}\nFailed: ${failed[*]}${skipped_line}"
|
||||||
return 1
|
return 1
|
||||||
|
elif [[ ${#skipped[@]} -gt 0 ]]; then
|
||||||
|
_notify "#e8a33d" "⚠️ **Update finished with warnings** — $date_str\nUpdated: ${updated[*]:-none}${skipped_line}"
|
||||||
elif [[ ${#updated[@]} -gt 0 ]]; then
|
elif [[ ${#updated[@]} -gt 0 ]]; then
|
||||||
_notify "#36a64f" "✅ **Updates applied** — $date_str\nStacks updated (${#updated[@]}/$checked): ${updated[*]}"
|
_notify "#36a64f" "✅ **Updates applied** — $date_str\nStacks updated (${#updated[@]}/$checked): ${updated[*]}"
|
||||||
else
|
else
|
||||||
@@ -482,6 +540,7 @@ Description=Daily Docker stacks image update at 2:00 AM
|
|||||||
|
|
||||||
[Timer]
|
[Timer]
|
||||||
OnCalendar=*-*-* 02:00:00 Europe/Amsterdam
|
OnCalendar=*-*-* 02:00:00 Europe/Amsterdam
|
||||||
|
RandomizedDelaySec=1800
|
||||||
Persistent=true
|
Persistent=true
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
|
|||||||
@@ -0,0 +1,486 @@
|
|||||||
|
# TriggerShell configuration.
|
||||||
|
# Full reference: https://dev.pivoine.art/valknar/triggershell.git (see docs/CONFIG_REFERENCE.md)
|
||||||
|
|
||||||
|
server:
|
||||||
|
host: 0.0.0.0
|
||||||
|
port: 4173
|
||||||
|
|
||||||
|
auth:
|
||||||
|
enabled: true
|
||||||
|
# Must be >= 32 characters if auth is enabled. Kept out of this file - `triggershell init`
|
||||||
|
# generated one into .env (TRIGGERSHELL_SESSION_SECRET) alongside this config.
|
||||||
|
sessionSecret: "${TRIGGERSHELL_SESSION_SECRET}"
|
||||||
|
sessionTtlHours: 12
|
||||||
|
users:
|
||||||
|
- username: admin
|
||||||
|
passwordHash: ${TRIGGERSHELL_USER_ADMIN_PASSWORD_HASH}
|
||||||
|
# Add a user with: triggershell users add <username>
|
||||||
|
tokens:
|
||||||
|
- name: test-verification
|
||||||
|
tokenHash: ${TRIGGERSHELL_TOKEN_TEST_VERIFICATION_HASH}
|
||||||
|
# Add an API token with: triggershell users add-token <name>
|
||||||
|
|
||||||
|
database:
|
||||||
|
path: .triggershell/triggershell.db
|
||||||
|
|
||||||
|
logs:
|
||||||
|
dir: .triggershell/logs
|
||||||
|
retentionDays: 30
|
||||||
|
|
||||||
|
scripts:
|
||||||
|
- id: openrgb-hue-apply
|
||||||
|
name: "OpenRGB: Apply Hue Scene"
|
||||||
|
description: Apply a Philips Hue scene as a static color gradient across OpenRGB-controlled lights (motherboard, GPU, RAM, etc).
|
||||||
|
command: bash
|
||||||
|
args:
|
||||||
|
- -c
|
||||||
|
- |
|
||||||
|
# systemd --user units run with a minimal PATH that skips pyenv shims
|
||||||
|
# and pip's --user bin dir, so add the common locations as a fallback.
|
||||||
|
export PATH="$HOME/.local/bin:$HOME/.pyenv/shims:$PATH"
|
||||||
|
if ! command -v openrgb-hue >/dev/null 2>&1; then
|
||||||
|
echo "error: 'openrgb-hue' was not found on PATH." >&2
|
||||||
|
echo "Install it with:" >&2
|
||||||
|
echo " pip install --index-url https://dev.pivoine.art/api/packages/valknar/pypi/simple/ --extra-index-url https://pypi.org/simple openrgb-hue" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
exec openrgb-hue apply "$SCENE" "$@"
|
||||||
|
- openrgb-hue-apply
|
||||||
|
cwd: ./
|
||||||
|
timeoutSeconds: 30
|
||||||
|
variables:
|
||||||
|
- name: scene
|
||||||
|
label: Scene
|
||||||
|
description: Philips Hue scene to render as a gradient.
|
||||||
|
type: enum
|
||||||
|
required: true
|
||||||
|
control: combobox
|
||||||
|
passAs: env
|
||||||
|
envName: SCENE
|
||||||
|
choices:
|
||||||
|
- "Tropical twilight"
|
||||||
|
- "Blossom"
|
||||||
|
- "Bright"
|
||||||
|
- "Savanna sunset"
|
||||||
|
- "Relax"
|
||||||
|
- "Energize"
|
||||||
|
- "Dreamy dusk"
|
||||||
|
- "Concentrate"
|
||||||
|
- "Warm embrace"
|
||||||
|
- "Golden pond"
|
||||||
|
- "Honolulu"
|
||||||
|
- "Rest"
|
||||||
|
- "Ruby glow"
|
||||||
|
- "Rolling hills"
|
||||||
|
- "Precious"
|
||||||
|
- "Cool bright"
|
||||||
|
- "Mountain breeze"
|
||||||
|
- "Read"
|
||||||
|
- "Dimmed"
|
||||||
|
- "Narcissa"
|
||||||
|
- "Crocus"
|
||||||
|
- "Nightlight"
|
||||||
|
- "São Paulo"
|
||||||
|
- "Ruby romance"
|
||||||
|
- "Sunset allure"
|
||||||
|
- "Smitten"
|
||||||
|
- "Promise"
|
||||||
|
- "City of love"
|
||||||
|
- "Lovebirds"
|
||||||
|
- "Glitz and glam"
|
||||||
|
- "Nighttime"
|
||||||
|
- "Unwind"
|
||||||
|
- "Shine"
|
||||||
|
- "Sleepy"
|
||||||
|
- "Storybook"
|
||||||
|
- "Arise"
|
||||||
|
- "Baby's breath"
|
||||||
|
- "Malibu pink"
|
||||||
|
- "Rio"
|
||||||
|
- "Ibiza"
|
||||||
|
- "Tokyo"
|
||||||
|
- "Fairfax"
|
||||||
|
- "Cancun"
|
||||||
|
- "Chinatown"
|
||||||
|
- "Osaka"
|
||||||
|
- "Motown"
|
||||||
|
- "Galaxy"
|
||||||
|
- "Blood moon"
|
||||||
|
- "Moonlight"
|
||||||
|
- "Starlight"
|
||||||
|
- "Arctic aurora"
|
||||||
|
- "Nebula"
|
||||||
|
- "Ocean dawn"
|
||||||
|
- "Sunday morning"
|
||||||
|
- "Spring blossom"
|
||||||
|
- "Lake mist"
|
||||||
|
- "Frosty dawn"
|
||||||
|
- "Emerald isle"
|
||||||
|
- "Beginnings"
|
||||||
|
- "Horizon"
|
||||||
|
- "Sunflare"
|
||||||
|
- "First light"
|
||||||
|
- "Valley dawn"
|
||||||
|
- "Emerald flutter"
|
||||||
|
- "Memento"
|
||||||
|
- "Resplendent"
|
||||||
|
- "Scarlet dream"
|
||||||
|
- "Amethyst valley"
|
||||||
|
- "Hazy days"
|
||||||
|
- "Autumn gold"
|
||||||
|
- "Winter mountain"
|
||||||
|
- "Misty ridge"
|
||||||
|
- "Midsummer sun"
|
||||||
|
- "Spring lake"
|
||||||
|
- "Midwinter"
|
||||||
|
- "Amber bloom"
|
||||||
|
- "Painted sky"
|
||||||
|
- "Orange fields"
|
||||||
|
- "Blue Planet"
|
||||||
|
- "Lily"
|
||||||
|
- "Winter beauty"
|
||||||
|
- "Forest adventure"
|
||||||
|
- "Meriete"
|
||||||
|
- "Soho"
|
||||||
|
- "Magneto"
|
||||||
|
- "Disturbia"
|
||||||
|
- "Vapor wave"
|
||||||
|
- "Tyrell"
|
||||||
|
- "Hal"
|
||||||
|
- "Still waters"
|
||||||
|
- "Pensive"
|
||||||
|
- "Sundown"
|
||||||
|
- "Palm Beach"
|
||||||
|
- "Adrift"
|
||||||
|
- "Majestic morning"
|
||||||
|
- "Blue lagoon"
|
||||||
|
- "Lake Placid"
|
||||||
|
- "Zandvoort"
|
||||||
|
- "Miami"
|
||||||
|
- "Bahrain"
|
||||||
|
- "Singapore"
|
||||||
|
- "Silverstone"
|
||||||
|
- "Suzuka"
|
||||||
|
|
||||||
|
- name: mapping
|
||||||
|
label: Mapping Mode
|
||||||
|
description: How the gradient is laid out across your LEDs.
|
||||||
|
type: enum
|
||||||
|
choices: [sequence, per-device, per-zone, matrix, mirror, shuffle]
|
||||||
|
default: per-zone
|
||||||
|
control: select
|
||||||
|
passAs: arg
|
||||||
|
argName: --mapping
|
||||||
|
|
||||||
|
- name: direction
|
||||||
|
label: Matrix Direction
|
||||||
|
description: Only used when mapping is "matrix".
|
||||||
|
type: enum
|
||||||
|
choices: [left-right, top-bottom, diagonal, radial]
|
||||||
|
default: left-right
|
||||||
|
control: select
|
||||||
|
passAs: arg
|
||||||
|
argName: --direction
|
||||||
|
|
||||||
|
- name: deviceType
|
||||||
|
label: Device Type
|
||||||
|
description: Limit to devices of this type. Leave unset to target every device.
|
||||||
|
type: enum
|
||||||
|
required: false
|
||||||
|
choices: [DRAM, GPU, MOTHERBOARD]
|
||||||
|
control: select
|
||||||
|
passAs: arg
|
||||||
|
argName: --device-type
|
||||||
|
|
||||||
|
- name: device
|
||||||
|
label: Device
|
||||||
|
description: Limit to a single device by name. Leave unset to target every device.
|
||||||
|
type: enum
|
||||||
|
required: false
|
||||||
|
choices:
|
||||||
|
- "Corsair Vengeance RGB DDR5"
|
||||||
|
- "Gigabyte GeForce RTX 3060 Gaming OC"
|
||||||
|
- "MSI MYSTIC LIGHT"
|
||||||
|
control: select
|
||||||
|
passAs: arg
|
||||||
|
argName: --device
|
||||||
|
|
||||||
|
- name: zone
|
||||||
|
label: Zone
|
||||||
|
description: Limit to a single zone by name. Leave unset to target every zone.
|
||||||
|
type: enum
|
||||||
|
required: false
|
||||||
|
choices:
|
||||||
|
- "Corsair DRAM"
|
||||||
|
- "GPU Zone"
|
||||||
|
- "JAF"
|
||||||
|
- "JARGB 1"
|
||||||
|
- "JARGB 2"
|
||||||
|
- "JARGB 3"
|
||||||
|
control: select
|
||||||
|
passAs: arg
|
||||||
|
argName: --zone
|
||||||
|
|
||||||
|
- name: seed
|
||||||
|
label: Shuffle Seed
|
||||||
|
description: Only used when mapping is "shuffle".
|
||||||
|
type: number
|
||||||
|
default: 0
|
||||||
|
passAs: arg
|
||||||
|
argName: --seed
|
||||||
|
|
||||||
|
- name: interpolation
|
||||||
|
label: Interpolation
|
||||||
|
description: Color space used to interpolate between gradient stops.
|
||||||
|
type: enum
|
||||||
|
choices: [rgb, hsv]
|
||||||
|
default: hsv
|
||||||
|
control: select
|
||||||
|
passAs: arg
|
||||||
|
argName: --interpolation
|
||||||
|
|
||||||
|
- name: dim
|
||||||
|
label: Dim
|
||||||
|
description: Global brightness multiplier (0-1), independent of the scene's own brightness.
|
||||||
|
type: number
|
||||||
|
default: 1.0
|
||||||
|
min: 0
|
||||||
|
max: 1
|
||||||
|
step: 0.05
|
||||||
|
control: slider
|
||||||
|
passAs: arg
|
||||||
|
argName: --dim
|
||||||
|
|
||||||
|
- name: noDedupe
|
||||||
|
label: Disable Color Deduping
|
||||||
|
description: Keep consecutive duplicate colors instead of collapsing them into one gradient stop.
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
control: switch
|
||||||
|
passAs: flag
|
||||||
|
argName: --no-dedupe
|
||||||
|
|
||||||
|
- name: noBrightness
|
||||||
|
label: Ignore Scene Brightness
|
||||||
|
description: Don't scale each gradient stop by the scene's recorded light brightness.
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
control: switch
|
||||||
|
passAs: flag
|
||||||
|
argName: --no-brightness
|
||||||
|
|
||||||
|
- name: fast
|
||||||
|
label: Fast Mode
|
||||||
|
description: Use OpenRGB's no-readback fast update mode.
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
control: switch
|
||||||
|
passAs: flag
|
||||||
|
argName: --fast
|
||||||
|
|
||||||
|
- name: dryRun
|
||||||
|
label: Dry Run
|
||||||
|
description: Preview the result without touching real hardware.
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
control: switch
|
||||||
|
passAs: flag
|
||||||
|
argName: --dry-run
|
||||||
|
|
||||||
|
- name: dryRunLeds
|
||||||
|
label: Dry Run LED Count
|
||||||
|
description: Number of synthetic flat LEDs to use for Dry Run. Ignored otherwise.
|
||||||
|
type: number
|
||||||
|
required: false
|
||||||
|
min: 1
|
||||||
|
passAs: arg
|
||||||
|
argName: --dry-run-leds
|
||||||
|
|
||||||
|
- id: openrgb-hue-off
|
||||||
|
name: "OpenRGB: Turn Off Lights"
|
||||||
|
description: Turn off OpenRGB-controlled LEDs. Leave every filter unset to turn off all of them.
|
||||||
|
command: bash
|
||||||
|
args:
|
||||||
|
- -c
|
||||||
|
- |
|
||||||
|
export PATH="$HOME/.local/bin:$HOME/.pyenv/shims:$PATH"
|
||||||
|
if ! command -v openrgb-hue >/dev/null 2>&1; then
|
||||||
|
echo "error: 'openrgb-hue' was not found on PATH." >&2
|
||||||
|
echo "Install it with:" >&2
|
||||||
|
echo " pip install --index-url https://dev.pivoine.art/api/packages/valknar/pypi/simple/ --extra-index-url https://pypi.org/simple openrgb-hue" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
exec openrgb-hue off "$@"
|
||||||
|
- openrgb-hue-off
|
||||||
|
cwd: ./
|
||||||
|
timeoutSeconds: 30
|
||||||
|
variables:
|
||||||
|
- name: deviceType
|
||||||
|
label: Device Type
|
||||||
|
description: Limit to devices of this type. Leave unset to target every device.
|
||||||
|
type: enum
|
||||||
|
required: false
|
||||||
|
choices: [DRAM, GPU, MOTHERBOARD]
|
||||||
|
control: select
|
||||||
|
passAs: arg
|
||||||
|
argName: --device-type
|
||||||
|
|
||||||
|
- name: device
|
||||||
|
label: Device
|
||||||
|
description: Limit to a single device by name. Leave unset to target every device.
|
||||||
|
type: enum
|
||||||
|
required: false
|
||||||
|
choices:
|
||||||
|
- "Corsair Vengeance RGB DDR5"
|
||||||
|
- "Gigabyte GeForce RTX 3060 Gaming OC"
|
||||||
|
- "MSI MYSTIC LIGHT"
|
||||||
|
control: select
|
||||||
|
passAs: arg
|
||||||
|
argName: --device
|
||||||
|
|
||||||
|
- name: zone
|
||||||
|
label: Zone
|
||||||
|
description: Limit to a single zone by name. Leave unset to target every zone.
|
||||||
|
type: enum
|
||||||
|
required: false
|
||||||
|
choices:
|
||||||
|
- "Corsair DRAM"
|
||||||
|
- "GPU Zone"
|
||||||
|
- "JAF"
|
||||||
|
- "JARGB 1"
|
||||||
|
- "JARGB 2"
|
||||||
|
- "JARGB 3"
|
||||||
|
control: select
|
||||||
|
passAs: arg
|
||||||
|
argName: --zone
|
||||||
|
|
||||||
|
- id: spotify-start
|
||||||
|
name: "Spotify: Start App"
|
||||||
|
description: >-
|
||||||
|
Launch the Spotify desktop app on the local session. Does nothing if it is
|
||||||
|
already running (Spotify focuses its existing window).
|
||||||
|
command: bash
|
||||||
|
args:
|
||||||
|
- -c
|
||||||
|
- |
|
||||||
|
# triggershell.service starts before the graphical session, so its own
|
||||||
|
# environment has no WAYLAND_DISPLAY/DISPLAY and a stripped-down PATH.
|
||||||
|
# systemd-run --user launches Spotify from the user manager instead,
|
||||||
|
# which does carry the full graphical environment.
|
||||||
|
if systemctl --user --quiet is-active spotify.service; then
|
||||||
|
echo "Spotify is already running."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
systemctl --user reset-failed spotify.service 2>/dev/null || true
|
||||||
|
exec systemd-run --user --collect --quiet --unit=spotify spotify-launcher
|
||||||
|
- spotify-start
|
||||||
|
cwd: ./
|
||||||
|
timeoutSeconds: 20
|
||||||
|
variables: []
|
||||||
|
|
||||||
|
- id: spotify-stop
|
||||||
|
name: "Spotify: Stop Playback"
|
||||||
|
description: >-
|
||||||
|
Pauses Spotify playback on the local session via its MPRIS D-Bus
|
||||||
|
interface. Does nothing if Spotify is not running.
|
||||||
|
command: bash
|
||||||
|
args:
|
||||||
|
- -c
|
||||||
|
- |
|
||||||
|
# triggershell.service starts before the graphical session and has no
|
||||||
|
# DBUS_SESSION_BUS_ADDRESS, so point dbus-send at the user bus socket
|
||||||
|
# directly (systemctl --user works here, so this socket exists).
|
||||||
|
bus="unix:path=${XDG_RUNTIME_DIR:-/run/user/$(id -u)}/bus"
|
||||||
|
if ! dbus-send --bus="$bus" --print-reply --dest=org.freedesktop.DBus \
|
||||||
|
/org/freedesktop/DBus org.freedesktop.DBus.ListNames 2>/dev/null \
|
||||||
|
| grep -q '"org.mpris.MediaPlayer2.spotify"'; then
|
||||||
|
echo "Spotify is not running."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
exec dbus-send --bus="$bus" --print-reply --type=method_call \
|
||||||
|
--dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 \
|
||||||
|
org.mpris.MediaPlayer2.Player.Pause
|
||||||
|
- spotify-stop
|
||||||
|
cwd: ./
|
||||||
|
timeoutSeconds: 15
|
||||||
|
variables: []
|
||||||
|
|
||||||
|
- id: system-shutdown
|
||||||
|
name: "System: Shutdown"
|
||||||
|
description: >-
|
||||||
|
Powers off this machine. Type "shutdown" in the Confirm field to proceed.
|
||||||
|
Optionally schedule it a few minutes out (cancel a pending one with "System: Cancel Shutdown").
|
||||||
|
command: bash
|
||||||
|
args:
|
||||||
|
- -c
|
||||||
|
- >-
|
||||||
|
if [ "$CONFIRM" != "shutdown" ]; then
|
||||||
|
echo 'Aborted: type "shutdown" in the Confirm field to proceed.' >&2; exit 1;
|
||||||
|
fi;
|
||||||
|
when=now;
|
||||||
|
if [ "${DELAY_MINUTES:-0}" -gt 0 ] 2>/dev/null; then when="+$DELAY_MINUTES"; fi;
|
||||||
|
echo "Scheduling poweroff ($when)...";
|
||||||
|
exec shutdown -h "$when"
|
||||||
|
timeoutSeconds: 30
|
||||||
|
variables:
|
||||||
|
- name: confirm
|
||||||
|
label: Confirm
|
||||||
|
description: Type "shutdown" (exactly) to confirm you want to power off this machine.
|
||||||
|
type: string
|
||||||
|
required: true
|
||||||
|
pattern: "^shutdown$"
|
||||||
|
passAs: env
|
||||||
|
envName: CONFIRM
|
||||||
|
- name: delayMinutes
|
||||||
|
label: Delay (minutes)
|
||||||
|
description: Wait this many minutes before powering off. 0 = immediately.
|
||||||
|
type: number
|
||||||
|
default: 0
|
||||||
|
min: 0
|
||||||
|
max: 120
|
||||||
|
passAs: env
|
||||||
|
envName: DELAY_MINUTES
|
||||||
|
|
||||||
|
- id: system-reboot
|
||||||
|
name: "System: Reboot"
|
||||||
|
description: >-
|
||||||
|
Reboots this machine. Type "reboot" in the Confirm field to proceed.
|
||||||
|
Optionally schedule it a few minutes out (cancel a pending one with "System: Cancel Shutdown").
|
||||||
|
command: bash
|
||||||
|
args:
|
||||||
|
- -c
|
||||||
|
- >-
|
||||||
|
if [ "$CONFIRM" != "reboot" ]; then
|
||||||
|
echo 'Aborted: type "reboot" in the Confirm field to proceed.' >&2; exit 1;
|
||||||
|
fi;
|
||||||
|
when=now;
|
||||||
|
if [ "${DELAY_MINUTES:-0}" -gt 0 ] 2>/dev/null; then when="+$DELAY_MINUTES"; fi;
|
||||||
|
echo "Scheduling reboot ($when)...";
|
||||||
|
exec shutdown -r "$when"
|
||||||
|
timeoutSeconds: 30
|
||||||
|
variables:
|
||||||
|
- name: confirm
|
||||||
|
label: Confirm
|
||||||
|
description: Type "reboot" (exactly) to confirm you want to reboot this machine.
|
||||||
|
type: string
|
||||||
|
required: true
|
||||||
|
pattern: "^reboot$"
|
||||||
|
passAs: env
|
||||||
|
envName: CONFIRM
|
||||||
|
- name: delayMinutes
|
||||||
|
label: Delay (minutes)
|
||||||
|
description: Wait this many minutes before rebooting. 0 = immediately.
|
||||||
|
type: number
|
||||||
|
default: 0
|
||||||
|
min: 0
|
||||||
|
max: 120
|
||||||
|
passAs: env
|
||||||
|
envName: DELAY_MINUTES
|
||||||
|
|
||||||
|
- id: system-cancel-shutdown
|
||||||
|
name: "System: Cancel Shutdown"
|
||||||
|
description: Cancels a pending scheduled shutdown or reboot.
|
||||||
|
command: shutdown
|
||||||
|
args: ["-c"]
|
||||||
|
timeoutSeconds: 15
|
||||||
|
variables: []
|
||||||
Reference in New Issue
Block a user