Compare commits
108
Commits
fd573e1a1d
...
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 | ||
|
|
fbaa4f170a | ||
|
|
d3427ae137 | ||
|
|
98d004b4d9 | ||
|
|
7143cf24b0 | ||
|
|
51b1478937 | ||
|
|
f925b408c6 | ||
|
|
824395fd91 | ||
|
|
faf2b60e8b | ||
|
|
fb5bcbc349 | ||
|
|
a403cf68f3 | ||
|
|
af6beaff1e | ||
|
|
5a6e209b6d | ||
|
|
4276a5b94e | ||
|
|
65acede0a5 | ||
|
|
bf396972b0 | ||
|
|
1bfea393da | ||
|
|
eeed7f3566 | ||
|
|
3ef96ff8ab | ||
|
|
44655ccbd9 | ||
|
|
e52029f9e5 | ||
|
|
39c9c04eb4 | ||
|
|
bdd4e290bd | ||
|
|
754f6d1092 | ||
|
|
7f5991c1bd | ||
|
|
febcd99e35 | ||
|
|
24e3c050c0 | ||
|
|
7e16a6475b | ||
|
|
cfee542f35 | ||
|
|
f38b15f550 | ||
|
|
38f4941649 | ||
|
|
fffd0a7ef8 | ||
|
|
5268b2da2e | ||
|
|
874ed8c36c | ||
|
|
133d61e32a | ||
|
|
2cae8978e7 | ||
|
|
df2d6bdce4 | ||
|
|
297a034e05 | ||
|
|
e862aaa0a2 | ||
|
|
63506e82c8 | ||
|
|
2130b7b67d | ||
|
|
f804d104de | ||
|
|
5239a98f47 | ||
|
|
e3cc576d96 | ||
|
|
f6fcf9ff57 | ||
|
|
bccadcaba9 | ||
|
|
84f7fec2a7 | ||
|
|
bb114faec6 | ||
|
|
3476766b26 | ||
|
|
b63e76e779 | ||
|
|
efd2c86a78 | ||
|
|
26d2b066bc | ||
|
|
b76b9762ab | ||
|
|
23bde1b367 | ||
|
|
8138779c22 | ||
|
|
9ffaab9836 | ||
|
|
45aea1c478 | ||
|
|
d29214d140 | ||
|
|
43a4864a50 | ||
|
|
e84b1e51d8 |
@@ -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
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
--theme="Catppuccin Frappe"
|
||||||
@@ -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
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"Alt-/": "lua:comment.comment",
|
||||||
|
"CtrlUnderscore": "lua:comment.comment"
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"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
|
||||||
@@ -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é",
|
||||||
|
},
|
||||||
|
}
|
||||||
+14
-12
@@ -1,18 +1,20 @@
|
|||||||
[user]
|
|
||||||
name = Sebastian Krüger
|
|
||||||
email = valknar@pivoine.art
|
|
||||||
[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 = nano
|
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]
|
||||||
|
path = .gitconfig.local
|
||||||
|
|||||||
+56
-1
@@ -16,9 +16,64 @@
|
|||||||
!.zshenv
|
!.zshenv
|
||||||
!.hushlogin
|
!.hushlogin
|
||||||
!arty.yml
|
!arty.yml
|
||||||
|
!triggershell.yml
|
||||||
|
!scripts/
|
||||||
|
!scripts/openrgb-hue-apply.sh
|
||||||
|
!bin/
|
||||||
|
!bin/arty
|
||||||
|
!bin/stacks
|
||||||
|
!bin/README.md
|
||||||
|
!bin/setup
|
||||||
!.config/
|
!.config/
|
||||||
!.config/yazi/
|
!.config/yazi/
|
||||||
!.config/yazi/yazi.toml
|
!.config/yazi/yazi.toml
|
||||||
!signature.txt
|
!.config/micro/
|
||||||
|
!.config/micro/settings.json
|
||||||
|
!.config/micro/bindings.json
|
||||||
|
!.config/bat/
|
||||||
|
!.config/bat/config
|
||||||
|
!.config/glow/
|
||||||
|
!.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,14 +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.
|
# Prompt colors — Catppuccin Frappé palette.
|
||||||
local grey='242'
|
# https://catppuccin.com/palette/
|
||||||
local red='#FF5C57'
|
local grey='#838ba7' # overlay1
|
||||||
local yellow='#F3F99D'
|
local red='#e78284' # red
|
||||||
local blue='#57C7FF'
|
local yellow='#e5c890' # yellow
|
||||||
local magenta='#FF6AC1'
|
local blue='#85c1dc' # sapphire
|
||||||
local cyan='#9AEDFE'
|
local magenta='#ca9ee6' # mauve
|
||||||
local white='#F1F1F0'
|
local cyan='#81c8be' # teal
|
||||||
|
local white='#c6d0f5' # text
|
||||||
|
|
||||||
# Left prompt segments.
|
# Left prompt segments.
|
||||||
typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(
|
typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(
|
||||||
@@ -59,7 +60,7 @@
|
|||||||
# Right prompt segments.
|
# Right prompt segments.
|
||||||
typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(
|
typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(
|
||||||
# command_execution_time # previous command duration
|
# command_execution_time # previous command duration
|
||||||
# virtualenv # python virtual environment
|
virtualenv # python virtual environment
|
||||||
# context # user@host
|
# context # user@host
|
||||||
time # current time
|
time # current time
|
||||||
)
|
)
|
||||||
@@ -89,9 +90,9 @@
|
|||||||
typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=false
|
typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=false
|
||||||
|
|
||||||
# Grey Python Virtual Environment.
|
# Grey Python Virtual Environment.
|
||||||
typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=$grey
|
typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=$blue
|
||||||
# Don't show Python version.
|
typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=true
|
||||||
typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false
|
typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_WITH_PYENV=true
|
||||||
typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER=
|
typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER=
|
||||||
|
|
||||||
# Blue current directory.
|
# Blue current directory.
|
||||||
|
|||||||
@@ -2,20 +2,25 @@ SSH_ENV="$HOME/.ssh/agent-environment"
|
|||||||
|
|
||||||
function start_agent {
|
function start_agent {
|
||||||
echo "Initialising new SSH agent..."
|
echo "Initialising new SSH agent..."
|
||||||
|
mkdir -p "$HOME/.ssh"
|
||||||
|
chmod 700 "$HOME/.ssh"
|
||||||
/usr/bin/ssh-agent | sed 's/^echo/#echo/' >"$SSH_ENV"
|
/usr/bin/ssh-agent | sed 's/^echo/#echo/' >"$SSH_ENV"
|
||||||
echo succeeded
|
echo succeeded
|
||||||
chmod 600 "$SSH_ENV"
|
chmod 600 "$SSH_ENV"
|
||||||
. "$SSH_ENV" >/dev/null
|
. "$SSH_ENV" >/dev/null
|
||||||
/usr/bin/ssh-add;
|
/usr/bin/ssh-add 2>/dev/null || true
|
||||||
}
|
}
|
||||||
|
|
||||||
# Source SSH settings, if applicable
|
# Source SSH settings, if applicable — skip entirely if ssh-agent is not available
|
||||||
|
if ! command -v ssh-agent >/dev/null 2>&1; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
if [ -f "$SSH_ENV" ]; then
|
if [ -f "$SSH_ENV" ]; then
|
||||||
. "$SSH_ENV" >/dev/null
|
. "$SSH_ENV" >/dev/null
|
||||||
#ps $SSH_AGENT_PID doesn't work under Cygwin
|
|
||||||
ps -ef | grep $SSH_AGENT_PID | grep ssh-agent$ >/dev/null || {
|
ps -ef | grep $SSH_AGENT_PID | grep ssh-agent$ >/dev/null || {
|
||||||
start_agent
|
start_agent
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
start_agent
|
start_agent
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -10,3 +10,15 @@ plugins=(
|
|||||||
docker docker-compose zsh-autosuggestions zsh-syntax-highlighting
|
docker docker-compose zsh-autosuggestions zsh-syntax-highlighting
|
||||||
zsh-interactive-cd zsh-navigation-tools
|
zsh-interactive-cd zsh-navigation-tools
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Set micro as editor
|
||||||
|
export EDITOR=micro
|
||||||
|
|
||||||
|
# Enable TrueColors for micro
|
||||||
|
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"
|
||||||
|
|||||||
@@ -28,12 +28,16 @@ add_to_path() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Source a file with existence and readability check (zsh-friendly)
|
# Source a file with existence and readability check (zsh-friendly)
|
||||||
# Usage: source_file /path/to/file
|
# Usage: source_file /path/to/file [export]
|
||||||
|
# Pass 'export' as second arg to auto-export all variables via set -a/+a.
|
||||||
source_file() {
|
source_file() {
|
||||||
local file="$1"
|
local file="$1"
|
||||||
|
local export_vars="${2:-}"
|
||||||
|
|
||||||
if [[ -f "$file" && -r "$file" ]]; then
|
if [[ -f "$file" && -r "$file" ]]; then
|
||||||
|
[[ "$export_vars" == "export" ]] && set -a
|
||||||
source "$file"
|
source "$file"
|
||||||
|
[[ "$export_vars" == "export" ]] && set +a
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -61,7 +65,7 @@ path_extensions=(
|
|||||||
"$HOME/.pyenv/bin"
|
"$HOME/.pyenv/bin"
|
||||||
"$HOME/.cargo/bin"
|
"$HOME/.cargo/bin"
|
||||||
"$HOME/go/bin"
|
"$HOME/go/bin"
|
||||||
"$HOME/scripts"
|
"$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)
|
||||||
@@ -90,13 +94,16 @@ done
|
|||||||
|
|
||||||
# Define files to source in an array for easy management
|
# Define files to source in an array for easy management
|
||||||
source_files=(
|
source_files=(
|
||||||
"$HOME/.env"
|
"${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
|
||||||
"$HOME/.nvm/nvm.sh"
|
"$HOME/.nvm/nvm.sh"
|
||||||
"$HOME/.cargo/env"
|
"$HOME/.cargo/env"
|
||||||
"$HOME/.oh-my-zsh/oh-my-zsh.sh"
|
"$HOME/.oh-my-zsh/oh-my-zsh.sh"
|
||||||
"$HOME/.p10k.zsh"
|
"$HOME/.p10k.zsh"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Source ~/.env with auto-export so variables reach child processes
|
||||||
|
source_file "$HOME/.env" export
|
||||||
|
|
||||||
# Source zsh-compatible files (skip if missing, no warnings)
|
# Source zsh-compatible files (skip if missing, no warnings)
|
||||||
for config_file in "${source_files[@]}"; do
|
for config_file in "${source_files[@]}"; do
|
||||||
source_file "$config_file"
|
source_file "$config_file"
|
||||||
@@ -133,8 +140,6 @@ done
|
|||||||
# - $ZSH_CUSTOM/aliases.zsh
|
# - $ZSH_CUSTOM/aliases.zsh
|
||||||
# - $ZSH_CUSTOM/functions.zsh
|
# - $ZSH_CUSTOM/functions.zsh
|
||||||
|
|
||||||
alias arty="arty.sh"
|
|
||||||
alias stacks="stacks.sh"
|
|
||||||
type bat >/dev/null 2>&1 && alias cat="bat --paging=never"
|
type bat >/dev/null 2>&1 && alias cat="bat --paging=never"
|
||||||
|
|
||||||
function y() {
|
function y() {
|
||||||
|
|||||||
@@ -1,256 +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 |
|
|
||||||
+-----------------------------------------------------+
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## QUICK START RITUAL
|
|
||||||
|
|
||||||
### Summoning the Environment
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Clone this unholy repository
|
curl https://dev.pivoine.art/valknar/home/raw/branch/main/bin/setup -sSf | sh
|
||||||
git init && git remote add origin ssh://git@dev.pivoine.art/valknar/home.git
|
|
||||||
git fetch && git reset --hard origin/main
|
|
||||||
git branch --set-upstream-to=origin/main main
|
|
||||||
|
|
||||||
# Clone scripts repository
|
|
||||||
git clone ssh://git@dev.pivoine.art/valknar/scripts.git ~/scripts
|
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## arty - REPOSITORY ORCHESTRATION
|
## Dependencies
|
||||||
|
|
||||||
### Available Scripts
|
| Package | Location | Ref |
|
||||||
|
|---------|----------|-----|
|
||||||
```bash
|
| `nvm` | `.nvm` | — |
|
||||||
# System setup
|
| `rbenv` | `.rbenv` | — |
|
||||||
arty debian:setup:contrib # Enable contrib/non-free repos
|
| `ruby-build` | `.rbenv/plugins/ruby-build` | — |
|
||||||
arty debian:upgrade # apt update && apt upgrade
|
| `pyenv` | `.pyenv` | — |
|
||||||
arty debian:install:base # build-essential, curl, wget, git, zsh, bat, fzf, make...
|
| `ohmyzsh` | `.oh-my-zsh` | — |
|
||||||
arty debian:install:libs # dev libs: libffi, zlib, libyaml, libssl, libsqlite3...
|
| `powerlevel10k` | `.zsh/themes/powerlevel10k` | — |
|
||||||
arty debian:install:tools # imagemagick, rsvg-convert, ffmpeg, yt-dlp
|
| `zsh-autocomplete` | `.zsh/plugins/zsh-autocomplete` | — |
|
||||||
|
| `zsh-autosuggestions` | `.zsh/plugins/zsh-autosuggestions` | — |
|
||||||
# Development tools
|
| `zsh-syntax-highlighting` | `.zsh/plugins/zsh-syntax-highlighting` | — |
|
||||||
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
|
## Scripts
|
||||||
|
|
||||||
### Custom Scripts
|
### `git:config`
|
||||||
|
|
||||||
Scripts in `~/scripts/` are loaded via PATH. They live in their own repo: `git@dev.pivoine.art:valknar/scripts.git`.
|
|
||||||
|
|
||||||
Available scripts: `stacks.sh` (Docker Compose stack manager), `arty.sh` (repository orchestration).
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## ENVIRONMENT STRUCTURE
|
|
||||||
|
|
||||||
|
```sh
|
||||||
|
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"
|
||||||
```
|
```
|
||||||
~/
|
|
||||||
+-- .nvm/ # Node Version Manager
|
### `ssh:keygen`
|
||||||
+-- .rbenv/ # Ruby Version Manager
|
|
||||||
| +-- plugins/ruby-build/
|
```sh
|
||||||
+-- .pyenv/ # Python Version Manager
|
ssh-keygen -t ed25519 -C "$(git config --global --include user.email)"
|
||||||
+-- .oh-my-zsh/ # Oh-My-Zsh framework
|
```
|
||||||
+-- .zsh/
|
|
||||||
| +-- themes/
|
### `debian:upgrade`
|
||||||
| | +-- powerlevel10k/
|
|
||||||
| +-- plugins/
|
```sh
|
||||||
| +-- zsh-autocomplete/
|
sudo apt update && sudo apt upgrade -y
|
||||||
| +-- zsh-autosuggestions/
|
```
|
||||||
| +-- zsh-syntax-highlighting/
|
|
||||||
|
### `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
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## DOTFILE HIGHLIGHTS
|
## Details
|
||||||
|
|
||||||
### Shell Configuration
|
- **Author**: valknar@pivoine.art
|
||||||
- **`.zshrc`** - Oh-My-Zsh with Powerlevel10k theme
|
- **License**: MIT
|
||||||
- **`.zlogin`** - Login script (mounts HiDrive, creates symbolic links)
|
- **URL**: [https://dev.pivoine.art/valknar/home](https://dev.pivoine.art/valknar/home)
|
||||||
- **`.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,31 +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
|
||||||
# Install all dependencies
|
curl https://dev.pivoine.art/valknar/home/raw/branch/main/bin/setup -sSf | sh
|
||||||
arty deps
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## 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
|
||||||
@@ -45,22 +28,59 @@ 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 curl wget git unzip zip zsh fzf pkg-config make file
|
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
|
debian:install:tools: sudo apt install -y imagemagick rsvg-convert ffmpeg yt-dlp shellcheck
|
||||||
ssh:keygen: ssh-keygen -t ed25519 -C "valknar@pivoine.art"
|
docker:install: curl -fsSL -o- https://get.docker.com | sudo sh && sudo usermod -aG docker $USER
|
||||||
rust:install: curl https://sh.rustup.rs -sSf | sh
|
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
|
||||||
node:install: nvm install
|
node:install: . "$HOME/.nvm/nvm.sh" && nvm install
|
||||||
node:install:base: npm i -g npm pnpm
|
node:install:base: npm i -g npm pnpm
|
||||||
ruby:install: rbenv install
|
ruby:install: rbenv install
|
||||||
ruby:install:base: gem install bundler
|
ruby:install:base: gem install bundler
|
||||||
python:install: pyenv install
|
python:install: pyenv install
|
||||||
go:install: sudo apt install -y golang-go
|
go:install: sudo apt install -y golang-go
|
||||||
go:install:tools: CGO_ENABLED=1 go install -tags extended,withdeploy github.com/gohugoio/hugo@latest github.com/mikefarah/yq/v4@latest
|
go:install:tools: |
|
||||||
|
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/charmbracelet/glow/v2@latest
|
||||||
go:clean: go clean -cache && go clean -modcache
|
go:clean: go clean -cache && go clean -modcache
|
||||||
docker:install: curl -fsSL -o- https://get.docker.com | sudo sh && sudo usermod -aG docker $USER
|
vscode:extensions: |
|
||||||
|
code --install-extension editorconfig.editorconfig
|
||||||
|
micro:install:
|
||||||
|
sudo apt install -y micro
|
||||||
|
micro:plugins: |
|
||||||
|
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: |
|
||||||
|
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
|
||||||
|
tailscale:up: sudo tailscale up --login-server https://headscale.pivoine.art
|
||||||
|
|||||||
+115
@@ -0,0 +1,115 @@
|
|||||||
|
# scripts
|
||||||
|
|
||||||
|
Personal shell scripts, available system-wide via `~/scripts` in `PATH`.
|
||||||
|
|
||||||
|
## stacks
|
||||||
|
|
||||||
|
Docker Compose stack manager for `~/stacks`. Set `STACKS_DIR` to override the default location.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
stacks ls # list all stacks with live container status
|
||||||
|
stacks ps gitea # container status table
|
||||||
|
stacks up # start all stacks
|
||||||
|
stacks up gitea traefik # start specific stacks
|
||||||
|
stacks down 'g*' # stop stacks matching glob
|
||||||
|
stacks restart 'g*,traefik' # glob + exact name, comma-separated
|
||||||
|
stacks pull --parallel # pull all images in parallel
|
||||||
|
stacks logs -f gitea # follow logs
|
||||||
|
stacks logs -n 100 gitea n8n # tail multiple stacks
|
||||||
|
stacks exec gitea gitea gitea admin user list # exec in container
|
||||||
|
stacks run passbolt passbolt bin/cake passbolt healthcheck
|
||||||
|
stacks top # resource usage per stack
|
||||||
|
stacks stats # live docker stats
|
||||||
|
```
|
||||||
|
|
||||||
|
**Update service** — nightly at 2:00 AM, pulls new images and recreates changed containers:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
stacks update install # write & enable systemd unit + timer
|
||||||
|
stacks update run # run now
|
||||||
|
stacks update status # timer/service status
|
||||||
|
stacks update logs # journald logs
|
||||||
|
stacks update next # next scheduled run
|
||||||
|
```
|
||||||
|
|
||||||
|
**Backup service** — daily at 3:00 AM, dumps Postgres DBs and runs restic backup:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
stacks backup install # write & enable systemd unit + timer
|
||||||
|
stacks backup run # run now
|
||||||
|
stacks backup status # timer/service status
|
||||||
|
stacks backup logs # journald logs
|
||||||
|
stacks backup snapshots # list restic snapshots
|
||||||
|
```
|
||||||
|
|
||||||
|
**Scaffold a new stack:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
stacks new myapp # basic stack with Traefik labels
|
||||||
|
stacks new myapp --db postgres # with Postgres service
|
||||||
|
stacks new myapp --db postgres --redis # with Postgres + Redis
|
||||||
|
stacks new myapp --no-traefik # expose port instead of Traefik
|
||||||
|
```
|
||||||
|
|
||||||
|
**Shell completion:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
stacks completion zsh --install # dynamic (discovers stacks at tab time)
|
||||||
|
stacks completion zsh --static --install # static (bakes current list in)
|
||||||
|
```
|
||||||
|
|
||||||
|
**Global flags:** `--dry-run`, `--parallel`, `--verbose`, `--quiet`
|
||||||
|
|
||||||
|
## arty
|
||||||
|
|
||||||
|
Bash library repository and release management system. Run inside a directory with an `arty.yml`.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
arty install <repo-url> [name] # install a library from git
|
||||||
|
arty deps [--dry-run] # install all dependencies from arty.yml
|
||||||
|
arty list # list installed libraries with dependency tree
|
||||||
|
arty notes # display project notes from arty.yml
|
||||||
|
arty scripts # list all scripts defined in arty.yml
|
||||||
|
arty remove <name> # remove an installed library
|
||||||
|
arty init [name] # initialise a new arty.yml project
|
||||||
|
arty completion bash|zsh # print shell completion script
|
||||||
|
arty <script-name> [args] # run a script defined in arty.yml scripts section
|
||||||
|
```
|
||||||
|
|
||||||
|
**Shell completion:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
arty completion zsh --install # install zsh completion
|
||||||
|
arty completion bash --install # install bash completion
|
||||||
|
```
|
||||||
|
|
||||||
|
**Global Flags:** `--dry-run`, `--verbose`
|
||||||
|
|
||||||
|
**Example `arty.yml`:**
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
name: "my-project"
|
||||||
|
version: "0.1.0"
|
||||||
|
description: "A bash library project"
|
||||||
|
|
||||||
|
references:
|
||||||
|
- https://github.com/user/bash-utils.git # simple URL
|
||||||
|
- url: git@github.com:user/logging-lib.git
|
||||||
|
into: lib/logging # clone into this path (relative to arty.yml)
|
||||||
|
ref: v2.1.0 # branch, tag, or commit hash
|
||||||
|
- url: git@github.com:user/dev-tools.git
|
||||||
|
env: [dev, ci] # only install in these environments
|
||||||
|
|
||||||
|
scripts:
|
||||||
|
build: bash scripts/build.sh
|
||||||
|
test: bash scripts/test.sh
|
||||||
|
deploy: bash scripts/deploy.sh $@
|
||||||
|
|
||||||
|
envs:
|
||||||
|
default:
|
||||||
|
APP_ENV: development
|
||||||
|
LOG_LEVEL: debug
|
||||||
|
production:
|
||||||
|
APP_ENV: production
|
||||||
|
LOG_LEVEL: info
|
||||||
|
```
|
||||||
@@ -0,0 +1,361 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# setup — Dotfiles bootstrap for https://dev.pivoine.art/valknar/home
|
||||||
|
#
|
||||||
|
# Quick install:
|
||||||
|
# curl https://dev.pivoine.art/valknar/home/raw/branch/main/bin/setup -sSf | sh
|
||||||
|
#
|
||||||
|
# Safe to re-run — all steps are idempotent.
|
||||||
|
#
|
||||||
|
# What this script does:
|
||||||
|
# 1. Re-execs itself with bash (curl|sh consumes stdin, so bash -c re-fetch is required)
|
||||||
|
# 2. Detects OS, installs git if missing — apt-get on Debian/Ubuntu, xcode-select on macOS
|
||||||
|
# 3. Installs zsh if missing, sets it as the default shell
|
||||||
|
# 4. Clones this dotfiles repo into ~ via HTTPS (or pulls if already present)
|
||||||
|
# 5. Runs arty deps — oh-my-zsh, p10k, nvm, rbenv, pyenv, zsh plugins
|
||||||
|
# 6. Installs arty zsh completion via: arty completion zsh --install
|
||||||
|
# 7. Prints next steps
|
||||||
|
|
||||||
|
# ─── Step 0: Re-exec with bash ────────────────────────────────────────────────
|
||||||
|
# curl URL | sh feeds the script on stdin. Once read, stdin is exhausted —
|
||||||
|
# `exec bash -s` would give bash nothing to interpret. The only reliable
|
||||||
|
# solution (used by Homebrew and rustup) is to re-download the script and
|
||||||
|
# hand it to `bash -c`. This costs one extra HTTP request but is correct.
|
||||||
|
if [ -z "${BASH_VERSION:-}" ]; then
|
||||||
|
_SETUP_URL="https://dev.pivoine.art/valknar/home/raw/branch/main/bin/setup"
|
||||||
|
if command -v curl >/dev/null 2>&1; then
|
||||||
|
exec bash -c "$(curl -fsSL "$_SETUP_URL")" -- "$@"
|
||||||
|
elif command -v wget >/dev/null 2>&1; then
|
||||||
|
exec bash -c "$(wget -qO- "$_SETUP_URL")" -- "$@"
|
||||||
|
else
|
||||||
|
echo "[x] curl or wget is required. Please install one and retry." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ─── Bash from here ───────────────────────────────────────────────────────────
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
# ─── Constants ────────────────────────────────────────────────────────────────
|
||||||
|
readonly REPO_HTTPS="https://dev.pivoine.art/valknar/home.git"
|
||||||
|
readonly SETUP_URL="https://dev.pivoine.art/valknar/home/raw/branch/main/bin/setup"
|
||||||
|
|
||||||
|
# ─── Colors ───────────────────────────────────────────────────────────────────
|
||||||
|
# Matches arty's FORCE_COLOR convention: colors only when stdout is a terminal.
|
||||||
|
if [[ -t 1 && "${TERM:-}" != "dumb" ]]; then
|
||||||
|
export FORCE_COLOR="${FORCE_COLOR:-1}"
|
||||||
|
fi
|
||||||
|
if [[ "${FORCE_COLOR:-0}" == "0" ]]; then
|
||||||
|
RED='' GREEN='' YELLOW='' BLUE='' CYAN='' BOLD='' NC=''
|
||||||
|
else
|
||||||
|
RED='\033[0;31m'
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
YELLOW='\033[1;33m'
|
||||||
|
BLUE='\033[0;34m'
|
||||||
|
CYAN='\033[0;36m'
|
||||||
|
BOLD='\033[1m'
|
||||||
|
NC='\033[0m'
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ─── Logging ──────────────────────────────────────────────────────────────────
|
||||||
|
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
|
||||||
|
log_success() { echo -e "${GREEN}[ok]${NC} $1"; }
|
||||||
|
log_warn() { echo -e "${YELLOW}[!]${NC} $1"; }
|
||||||
|
log_error() { echo -e "${RED}[x]${NC} $1" >&2; }
|
||||||
|
|
||||||
|
step_header() {
|
||||||
|
echo
|
||||||
|
echo -e "${CYAN}${BOLD}══════════════════════════════════════════${NC}"
|
||||||
|
echo -e "${CYAN}${BOLD} $1${NC}"
|
||||||
|
echo -e "${CYAN}${BOLD}══════════════════════════════════════════${NC}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# ─── OS Detection ─────────────────────────────────────────────────────────────
|
||||||
|
OS="unknown"
|
||||||
|
|
||||||
|
detect_os() {
|
||||||
|
local kernel
|
||||||
|
kernel="$(uname -s | tr '[:upper:]' '[:lower:]')"
|
||||||
|
case "$kernel" in
|
||||||
|
darwin)
|
||||||
|
OS="macos"
|
||||||
|
;;
|
||||||
|
linux)
|
||||||
|
if [[ -f /etc/os-release ]]; then
|
||||||
|
local os_id
|
||||||
|
os_id="$(. /etc/os-release && echo "${ID:-}")"
|
||||||
|
case "$os_id" in
|
||||||
|
debian|ubuntu|linuxmint|pop) OS="debian" ;;
|
||||||
|
*) OS="linux" ;;
|
||||||
|
esac
|
||||||
|
else
|
||||||
|
OS="linux"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
OS="unknown"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
# ─── Step 1: Prerequisites ────────────────────────────────────────────────────
|
||||||
|
check_prerequisites() {
|
||||||
|
step_header "Step 1 of 7 — Prerequisites"
|
||||||
|
|
||||||
|
detect_os
|
||||||
|
log_info "OS detected: ${BOLD}$OS${NC}"
|
||||||
|
|
||||||
|
if command -v curl >/dev/null 2>&1; then
|
||||||
|
log_success "curl $(curl --version | head -1 | awk '{print $2}')"
|
||||||
|
elif command -v wget >/dev/null 2>&1; then
|
||||||
|
log_success "wget $(wget --version 2>&1 | head -1 | awk '{print $3}')"
|
||||||
|
else
|
||||||
|
log_error "curl or wget is required."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# ─── Step 2: Ensure git ───────────────────────────────────────────────────────
|
||||||
|
ensure_git() {
|
||||||
|
step_header "Step 2 of 7 — Git"
|
||||||
|
|
||||||
|
if command -v git >/dev/null 2>&1; then
|
||||||
|
log_success "git $(git --version | awk '{print $3}')"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
log_warn "git not found — installing for OS: $OS"
|
||||||
|
|
||||||
|
case "$OS" in
|
||||||
|
debian)
|
||||||
|
if ! command -v sudo >/dev/null 2>&1; then
|
||||||
|
log_error "sudo is required to install git on Debian/Ubuntu."
|
||||||
|
log_error "Run as root: apt-get install -y git — then re-run this script."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
sudo apt-get update -qq
|
||||||
|
sudo apt-get install -y git
|
||||||
|
log_success "git installed: $(git --version | awk '{print $3}')"
|
||||||
|
;;
|
||||||
|
macos)
|
||||||
|
# xcode-select --install shows a GUI dialog — it cannot run non-interactively.
|
||||||
|
# We trigger it and exit, asking the user to re-run after the tools install.
|
||||||
|
log_warn "git on macOS is provided by Xcode Command Line Tools."
|
||||||
|
log_warn "A system dialog will appear — click 'Install' to proceed."
|
||||||
|
xcode-select --install 2>/dev/null || true
|
||||||
|
echo
|
||||||
|
log_warn "After the tools finish installing, re-run:"
|
||||||
|
log_warn " curl $SETUP_URL -sSf | sh"
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
log_error "Cannot install git automatically on OS: $OS"
|
||||||
|
log_error "Please install git manually, then re-run this script."
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
# ─── Step 3: Ensure zsh ───────────────────────────────────────────────────────
|
||||||
|
ensure_zsh() {
|
||||||
|
step_header "Step 3 of 7 — Zsh"
|
||||||
|
|
||||||
|
if command -v zsh >/dev/null 2>&1; then
|
||||||
|
log_success "zsh $(zsh --version | awk '{print $2}')"
|
||||||
|
else
|
||||||
|
log_warn "zsh not found — installing for OS: $OS"
|
||||||
|
case "$OS" in
|
||||||
|
debian)
|
||||||
|
if ! command -v sudo >/dev/null 2>&1; then
|
||||||
|
log_error "sudo is required to install zsh on Debian/Ubuntu."
|
||||||
|
log_error "Run as root: apt-get install -y zsh — then re-run this script."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
sudo apt-get update -qq
|
||||||
|
sudo apt-get install -y zsh
|
||||||
|
log_success "zsh installed: $(zsh --version | awk '{print $2}')"
|
||||||
|
;;
|
||||||
|
macos)
|
||||||
|
if command -v brew >/dev/null 2>&1; then
|
||||||
|
brew install zsh
|
||||||
|
log_success "zsh installed: $(zsh --version | awk '{print $2}')"
|
||||||
|
else
|
||||||
|
log_warn "zsh not found and Homebrew is not available."
|
||||||
|
log_warn "Install zsh manually: https://www.zsh.org"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
log_warn "Cannot install zsh automatically on OS: $OS"
|
||||||
|
log_warn "Please install zsh manually, then re-run this script."
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Set zsh as the default shell if it isn't already.
|
||||||
|
local zsh_path
|
||||||
|
zsh_path="$(command -v zsh 2>/dev/null || true)"
|
||||||
|
if [[ -n "$zsh_path" && "$SHELL" != "$zsh_path" ]]; then
|
||||||
|
log_info "Setting zsh as default shell..."
|
||||||
|
if command -v chsh >/dev/null 2>&1; then
|
||||||
|
# Add zsh to /etc/shells if missing (required by chsh).
|
||||||
|
if ! grep -qx "$zsh_path" /etc/shells 2>/dev/null; then
|
||||||
|
echo "$zsh_path" | sudo tee -a /etc/shells >/dev/null
|
||||||
|
fi
|
||||||
|
if sudo chsh -s "$zsh_path" "$USER" 2>/dev/null || chsh -s "$zsh_path" 2>/dev/null; then
|
||||||
|
log_success "Default shell set to zsh (takes effect on next login)"
|
||||||
|
else
|
||||||
|
log_warn "Could not set default shell automatically."
|
||||||
|
log_warn "Run manually: chsh -s $zsh_path"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
log_warn "chsh not available — set your default shell manually: chsh -s $zsh_path"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# ─── Step 4: Clone or update dotfiles ─────────────────────────────────────────
|
||||||
|
setup_dotfiles() {
|
||||||
|
step_header "Step 4 of 7 — Dotfiles"
|
||||||
|
|
||||||
|
local is_git_repo=0
|
||||||
|
local is_this_repo=0
|
||||||
|
|
||||||
|
if git -C "$HOME" rev-parse --git-dir >/dev/null 2>&1; then
|
||||||
|
is_git_repo=1
|
||||||
|
local remote_url
|
||||||
|
remote_url="$(git -C "$HOME" remote get-url origin 2>/dev/null || echo '')"
|
||||||
|
if echo "$remote_url" | grep -q "dev.pivoine.art/valknar/home"; then
|
||||||
|
is_this_repo=1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Idempotent update: repo already present and pointing to this remote → pull.
|
||||||
|
if [[ -f "$HOME/arty.yml" && "$is_this_repo" == 1 ]]; then
|
||||||
|
log_info "Dotfiles already present at $HOME"
|
||||||
|
log_info "Pulling latest changes..."
|
||||||
|
if ! git -C "$HOME" pull --ff-only 2>&1; then
|
||||||
|
log_warn "Fast-forward pull failed — repo may have local divergence."
|
||||||
|
log_warn "Inspect with: git -C ~ status"
|
||||||
|
log_warn "Continuing with current state."
|
||||||
|
else
|
||||||
|
log_success "Dotfiles up to date"
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Fresh install: initialise ~ as a git repo.
|
||||||
|
log_info "Initialising dotfiles repository in $HOME"
|
||||||
|
log_info "Remote: $REPO_HTTPS"
|
||||||
|
|
||||||
|
(
|
||||||
|
cd "$HOME"
|
||||||
|
git init
|
||||||
|
|
||||||
|
if git remote get-url origin >/dev/null 2>&1; then
|
||||||
|
log_warn "Replacing existing 'origin' remote (was: $(git remote get-url origin))"
|
||||||
|
git remote remove origin
|
||||||
|
fi
|
||||||
|
|
||||||
|
git remote add origin "$REPO_HTTPS"
|
||||||
|
log_info "Fetching repository..."
|
||||||
|
git fetch --quiet
|
||||||
|
|
||||||
|
# Force-checkout is intentional: this dotfiles repo uses an inverted
|
||||||
|
# .gitignore (ignore everything, whitelist specific files), so only the
|
||||||
|
# tracked dotfiles are overwritten — no other home directory files are touched.
|
||||||
|
git checkout -f -t origin/main
|
||||||
|
|
||||||
|
# Silence `git status` noise — the home directory has thousands of
|
||||||
|
# untracked files that we deliberately do not track.
|
||||||
|
git config status.showUntrackedFiles no
|
||||||
|
)
|
||||||
|
|
||||||
|
log_success "Dotfiles cloned into $HOME"
|
||||||
|
}
|
||||||
|
|
||||||
|
# ─── Step 5: Install dependencies via arty ────────────────────────────────────
|
||||||
|
install_deps() {
|
||||||
|
step_header "Step 5 of 7 — Dependencies (arty deps)"
|
||||||
|
|
||||||
|
local arty_bin="$HOME/bin/arty"
|
||||||
|
|
||||||
|
if [[ ! -f "$arty_bin" ]]; then
|
||||||
|
log_error "arty not found at $arty_bin"
|
||||||
|
log_error "Step 3 (dotfiles clone) may have failed."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -x "$arty_bin" ]]; then
|
||||||
|
chmod +x "$arty_bin"
|
||||||
|
fi
|
||||||
|
|
||||||
|
log_info "Installing: oh-my-zsh, powerlevel10k, nvm, rbenv, pyenv, zsh plugins..."
|
||||||
|
|
||||||
|
(
|
||||||
|
cd "$HOME"
|
||||||
|
"$arty_bin" deps
|
||||||
|
)
|
||||||
|
|
||||||
|
log_success "All dependencies installed"
|
||||||
|
}
|
||||||
|
|
||||||
|
# ─── Step 6: Install arty zsh completion ──────────────────────────────────────
|
||||||
|
install_completion() {
|
||||||
|
step_header "Step 6 of 7 — Zsh completion"
|
||||||
|
|
||||||
|
local arty_bin="$HOME/bin/arty"
|
||||||
|
|
||||||
|
# Ensure tools that arty deps may have installed (yq, etc.) are on PATH.
|
||||||
|
# arty deps runs in a subshell — its PATH exports don't survive back here.
|
||||||
|
export PATH="$HOME/.local/bin:$HOME/go/bin:$PATH"
|
||||||
|
|
||||||
|
# arty completion zsh --install writes to the first writable fpath dir,
|
||||||
|
# defaulting to ~/.zsh/completions/_arty (which .zshenv/oh-my-zsh picks up).
|
||||||
|
(cd "$HOME" && "$arty_bin" completion zsh --install) || true
|
||||||
|
if [[ ! -f "$HOME/.zsh/completions/_arty" ]]; then
|
||||||
|
log_warn "arty completion zsh --install failed — skipping."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# ─── Step 7: Post-install summary ─────────────────────────────────────────────
|
||||||
|
post_install() {
|
||||||
|
step_header "Step 7 of 7 — Done"
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo -e "${GREEN}${BOLD}Setup complete.${NC} Next steps:"
|
||||||
|
echo
|
||||||
|
echo -e " ${CYAN}1.${NC} First time on this machine? Configure your git user:"
|
||||||
|
echo -e " ${BOLD}arty git:config${NC}"
|
||||||
|
echo
|
||||||
|
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 " Then add the public key at ${BLUE}https://dev.pivoine.art${NC}"
|
||||||
|
echo
|
||||||
|
echo -e " ${CYAN}3.${NC} Switch the dotfiles remote from HTTPS to SSH (after key is set up):"
|
||||||
|
echo -e " ${BOLD}git -C ~ remote set-url origin ssh://git@dev.pivoine.art/valknar/home.git${NC}"
|
||||||
|
echo
|
||||||
|
}
|
||||||
|
|
||||||
|
# ─── Main ─────────────────────────────────────────────────────────────────────
|
||||||
|
main() {
|
||||||
|
echo
|
||||||
|
echo -e "${BOLD}${CYAN}Valknar's dotfiles${NC} — ${BLUE}https://dev.pivoine.art/valknar/home${NC}"
|
||||||
|
echo
|
||||||
|
|
||||||
|
check_prerequisites # Step 1
|
||||||
|
ensure_git # Step 2
|
||||||
|
ensure_zsh # Step 3
|
||||||
|
setup_dotfiles # Step 4
|
||||||
|
install_deps # Step 5
|
||||||
|
install_completion # Step 6
|
||||||
|
post_install # Step 7
|
||||||
|
|
||||||
|
# Hand off to a zsh login shell immediately.
|
||||||
|
# Read from /dev/tty so zsh gets the terminal, not the leftover pipe bytes
|
||||||
|
# from the curl|sh pattern (which still has the tail of this script buffered).
|
||||||
|
if command -v zsh >/dev/null 2>&1 && [[ -e /dev/tty ]]; then
|
||||||
|
exec zsh -l </dev/tty
|
||||||
|
fi
|
||||||
|
echo -e "${YELLOW}[!]${NC} Start a new shell session: ${BOLD}exec zsh${NC}"
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
||||||
Executable
+1429
File diff suppressed because it is too large
Load Diff
@@ -1,10 +0,0 @@
|
|||||||
|
|
||||||
██╗ ██╗ █████╗ ██╗ ██╗ ██╗███╗ ██╗ █████╗ ██████╗
|
|
||||||
██║ ██║██╔══██╗██║ ██║ ██╔╝████╗ ██║██╔══██╗██╔══██╗
|
|
||||||
██║ ██║███████║██║ █████╔╝ ██╔██╗ ██║███████║██████╔╝
|
|
||||||
╚██╗ ██╔╝██╔══██║██║ ██╔═██╗ ██║╚██╗██║██╔══██║██╔══██╗
|
|
||||||
╚████╔╝ ██║ ██║███████╗██║ ██╗██║ ╚████║██║ ██║██║ ██║
|
|
||||||
╚═══╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝╚═╝ ╚═╝
|
|
||||||
───────────────────────────────────────────────────────────────────
|
|
||||||
valknar@pivoine.art │ (+49) 174 8188918 │ https://pivoine.art
|
|
||||||
───────────────────────────────────────────────────────────────────
|
|
||||||
@@ -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