Merge remote-tracking branch 'origin/master'
# Conflicts: # nixos/flake.nix
This commit is contained in:
@@ -411,7 +411,8 @@ Required behavior:
|
|||||||
- `Hyper+p` opens the password picker with `rofi-pass`.
|
- `Hyper+p` opens the password picker with `rofi-pass`.
|
||||||
- `Hyper+h` opens the screenshot tool with the compositor/session-appropriate
|
- `Hyper+h` opens the screenshot tool with the compositor/session-appropriate
|
||||||
screenshot command.
|
screenshot command.
|
||||||
- `Hyper+c` opens a shell command prompt with `shell_command.sh`.
|
- `Hyper+c` opens the Codex launcher with `rofi_tmcodex.sh`.
|
||||||
|
- `Hyper+Shift+c` opens the Codex launcher with `tmcodex resume`.
|
||||||
- `Hyper+k` opens the process killer with `rofi_kill_process.sh`.
|
- `Hyper+k` opens the process killer with `rofi_kill_process.sh`.
|
||||||
- `Hyper+Shift+k` opens the kill-all/process-tree killer with
|
- `Hyper+Shift+k` opens the kill-all/process-tree killer with
|
||||||
`rofi_kill_all.sh`.
|
`rofi_kill_all.sh`.
|
||||||
|
|||||||
@@ -116,6 +116,10 @@ local function exec(command)
|
|||||||
return hl.dsp.exec_cmd(command)
|
return hl.dsp.exec_cmd(command)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function dispatch(dispatcher)
|
||||||
|
return hl.dispatch(dispatcher)
|
||||||
|
end
|
||||||
|
|
||||||
local function shell_quote(value)
|
local function shell_quote(value)
|
||||||
return "'" .. tostring(value):gsub("'", "'\\''") .. "'"
|
return "'" .. tostring(value):gsub("'", "'\\''") .. "'"
|
||||||
end
|
end
|
||||||
@@ -520,6 +524,33 @@ local function window_center(window)
|
|||||||
numeric_component(at, "y", 2) + numeric_component(size, "y", 2) / 2
|
numeric_component(at, "y", 2) + numeric_component(size, "y", 2) / 2
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function tiled_window_geometry(window)
|
||||||
|
if not window or window.floating then
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
local selector = window_selector(window)
|
||||||
|
if not selector then
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
local at = window.at or {}
|
||||||
|
local size = window.size or {}
|
||||||
|
local width = math.floor(numeric_component(size, "x", 1))
|
||||||
|
local height = math.floor(numeric_component(size, "y", 2))
|
||||||
|
if width <= 0 or height <= 0 then
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
return {
|
||||||
|
selector = selector,
|
||||||
|
x = math.floor(numeric_component(at, "x", 1)),
|
||||||
|
y = math.floor(numeric_component(at, "y", 2)),
|
||||||
|
width = width,
|
||||||
|
height = height,
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
local function window_distance_squared(window, x, y)
|
local function window_distance_squared(window, x, y)
|
||||||
local wx, wy = window_center(window)
|
local wx, wy = window_center(window)
|
||||||
local dx = wx - x
|
local dx = wx - x
|
||||||
@@ -625,7 +656,7 @@ local function update_nstack_count()
|
|||||||
end
|
end
|
||||||
|
|
||||||
stack_count = math.max(stack_count, 2)
|
stack_count = math.max(stack_count, 2)
|
||||||
hl.dsp.layout("setstackcount " .. tostring(stack_count))()
|
dispatch(hl.dsp.layout("setstackcount " .. tostring(stack_count)))
|
||||||
end
|
end
|
||||||
|
|
||||||
local function schedule_nstack_count_update()
|
local function schedule_nstack_count_update()
|
||||||
@@ -701,6 +732,22 @@ local function set_layout(layout)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
_G.im_hyprland_set_layout = function(layout)
|
||||||
|
if not layout_names[layout] then
|
||||||
|
hl.notification.create({
|
||||||
|
text = "Unknown layout: " .. tostring(layout),
|
||||||
|
duration = 1800,
|
||||||
|
icon = notification_icons.warning,
|
||||||
|
color = "rgba(edb443ff)",
|
||||||
|
font_size = 13,
|
||||||
|
})
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
set_layout(layout)
|
||||||
|
notify_layout(layout)
|
||||||
|
end
|
||||||
|
|
||||||
local function sync_layout_for_active_workspace()
|
local function sync_layout_for_active_workspace()
|
||||||
current_layout = current_workspace_layout()
|
current_layout = current_workspace_layout()
|
||||||
hl.config({ general = { layout = hyprland_layout(current_layout) } })
|
hl.config({ general = { layout = hyprland_layout(current_layout) } })
|
||||||
@@ -745,24 +792,24 @@ end
|
|||||||
local function monocle_next()
|
local function monocle_next()
|
||||||
local window = hl.get_active_window()
|
local window = hl.get_active_window()
|
||||||
if window and window.group and window.group.size and window.group.size > 1 then
|
if window and window.group and window.group.size and window.group.size > 1 then
|
||||||
hl.dsp.group.next({ window = window_selector(window) })()
|
dispatch(hl.dsp.group.next({ window = window_selector(window) }))
|
||||||
elseif current_layout == monocle_layout then
|
elseif current_layout == monocle_layout then
|
||||||
hl.dsp.layout("cyclenext")()
|
dispatch(hl.dsp.layout("cyclenext"))
|
||||||
update_monocle_notice()
|
update_monocle_notice()
|
||||||
else
|
else
|
||||||
hl.dsp.window.cycle_next({ next = true, tiled = true, floating = false })()
|
dispatch(hl.dsp.window.cycle_next({ next = true, tiled = true, floating = false }))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local function monocle_prev()
|
local function monocle_prev()
|
||||||
local window = hl.get_active_window()
|
local window = hl.get_active_window()
|
||||||
if window and window.group and window.group.size and window.group.size > 1 then
|
if window and window.group and window.group.size and window.group.size > 1 then
|
||||||
hl.dsp.group.prev({ window = window_selector(window) })()
|
dispatch(hl.dsp.group.prev({ window = window_selector(window) }))
|
||||||
elseif current_layout == monocle_layout then
|
elseif current_layout == monocle_layout then
|
||||||
hl.dsp.layout("cycleprev")()
|
dispatch(hl.dsp.layout("cycleprev"))
|
||||||
update_monocle_notice()
|
update_monocle_notice()
|
||||||
else
|
else
|
||||||
hl.dsp.window.cycle_next({ next = false, tiled = true, floating = false })()
|
dispatch(hl.dsp.window.cycle_next({ next = false, tiled = true, floating = false }))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -777,30 +824,30 @@ local function focus_direction(direction)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
hl.dsp.focus({ direction = direction })()
|
dispatch(hl.dsp.focus({ direction = direction }))
|
||||||
end
|
end
|
||||||
|
|
||||||
local function swap_direction(direction)
|
local function swap_direction(direction)
|
||||||
if enable_nstack and is_nstack_layout(current_layout) and active_group_size() <= 1 then
|
if enable_nstack and is_nstack_layout(current_layout) and active_group_size() <= 1 then
|
||||||
hl.dsp.layout("swapdirection " .. direction)()
|
dispatch(hl.dsp.layout("swapdirection " .. direction))
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
hl.dsp.window.swap({ direction = direction })()
|
dispatch(hl.dsp.window.swap({ direction = direction }))
|
||||||
end
|
end
|
||||||
|
|
||||||
local function focus_workspace(workspace_id)
|
local function focus_workspace(workspace_id)
|
||||||
hl.dsp.focus({ workspace = tostring(workspace_id), on_current_monitor = true })()
|
dispatch(hl.dsp.focus({ workspace = tostring(workspace_id), on_current_monitor = true }))
|
||||||
end
|
end
|
||||||
|
|
||||||
local function move_window_to_workspace(workspace_id, follow, window)
|
local function move_window_to_workspace(workspace_id, follow, window)
|
||||||
local target_window = window or hl.get_active_window()
|
local target_window = window or hl.get_active_window()
|
||||||
local target_selector = window_selector(target_window)
|
local target_selector = window_selector(target_window)
|
||||||
hl.dsp.window.move({ workspace = tostring(workspace_id), follow = false, window = target_selector })()
|
dispatch(hl.dsp.window.move({ workspace = tostring(workspace_id), follow = false, window = target_selector }))
|
||||||
if follow then
|
if follow then
|
||||||
focus_workspace(workspace_id)
|
focus_workspace(workspace_id)
|
||||||
if target_selector then
|
if target_selector then
|
||||||
hl.dsp.focus({ window = target_selector })()
|
dispatch(hl.dsp.focus({ window = target_selector }))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -828,8 +875,8 @@ local function move_window_into_group(window, anchor)
|
|||||||
end
|
end
|
||||||
|
|
||||||
for _, direction in ipairs(grouping_directions(window, anchor)) do
|
for _, direction in ipairs(grouping_directions(window, anchor)) do
|
||||||
hl.dsp.focus({ window = selector })()
|
dispatch(hl.dsp.focus({ window = selector }))
|
||||||
hl.dsp.window.move({ into_group = direction, window = selector })()
|
dispatch(hl.dsp.window.move({ into_group = direction, window = selector }))
|
||||||
|
|
||||||
local active = hl.get_active_window()
|
local active = hl.get_active_window()
|
||||||
if active and active.group and active.group.size and active.group.size > 1 then
|
if active and active.group and active.group.size and active.group.size > 1 then
|
||||||
@@ -917,12 +964,12 @@ local function restore_workspace_tabbed_group()
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
hl.dsp.focus({ window = anchor_selector })()
|
dispatch(hl.dsp.focus({ window = anchor_selector }))
|
||||||
hl.dsp.group.toggle({ window = anchor_selector })()
|
dispatch(hl.dsp.group.toggle({ window = anchor_selector }))
|
||||||
tabbed_workspace_groups[key] = nil
|
tabbed_workspace_groups[key] = nil
|
||||||
set_layout(columns_layout)
|
set_layout(columns_layout)
|
||||||
restore_tabbed_group_window_order(state, target_workspace_id)
|
restore_tabbed_group_window_order(state, target_workspace_id)
|
||||||
hl.dsp.focus({ window = anchor_selector })()
|
dispatch(hl.dsp.focus({ window = anchor_selector }))
|
||||||
schedule_nstack_count_update()
|
schedule_nstack_count_update()
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -971,8 +1018,8 @@ local function gather_workspace_into_tabbed_group()
|
|||||||
|
|
||||||
set_layout(columns_layout)
|
set_layout(columns_layout)
|
||||||
|
|
||||||
hl.dsp.focus({ window = anchor_selector })()
|
dispatch(hl.dsp.focus({ window = anchor_selector }))
|
||||||
hl.dsp.group.toggle({ window = anchor_selector })()
|
dispatch(hl.dsp.group.toggle({ window = anchor_selector }))
|
||||||
|
|
||||||
local group_windows = {}
|
local group_windows = {}
|
||||||
for _, window in ipairs(candidates) do
|
for _, window in ipairs(candidates) do
|
||||||
@@ -994,8 +1041,8 @@ local function gather_workspace_into_tabbed_group()
|
|||||||
end
|
end
|
||||||
|
|
||||||
if grouped_count <= 1 then
|
if grouped_count <= 1 then
|
||||||
hl.dsp.focus({ window = anchor_selector })()
|
dispatch(hl.dsp.focus({ window = anchor_selector }))
|
||||||
hl.dsp.group.toggle({ window = anchor_selector })()
|
dispatch(hl.dsp.group.toggle({ window = anchor_selector }))
|
||||||
notify_tabbed_group("Unable to group tiled windows")
|
notify_tabbed_group("Unable to group tiled windows")
|
||||||
return
|
return
|
||||||
elseif grouped_count < #candidates then
|
elseif grouped_count < #candidates then
|
||||||
@@ -1007,7 +1054,7 @@ local function gather_workspace_into_tabbed_group()
|
|||||||
order = original_order,
|
order = original_order,
|
||||||
windows = candidate_addresses,
|
windows = candidate_addresses,
|
||||||
}
|
}
|
||||||
hl.dsp.focus({ window = anchor_selector })()
|
dispatch(hl.dsp.focus({ window = anchor_selector }))
|
||||||
end
|
end
|
||||||
|
|
||||||
local function force_columns_layout()
|
local function force_columns_layout()
|
||||||
@@ -1071,7 +1118,7 @@ local function enter_workspace_swap_mode()
|
|||||||
color = "rgba(edb443ff)",
|
color = "rgba(edb443ff)",
|
||||||
font_size = 13,
|
font_size = 13,
|
||||||
})
|
})
|
||||||
hl.dsp.submap("swap-workspace")()
|
dispatch(hl.dsp.submap("swap-workspace"))
|
||||||
end
|
end
|
||||||
|
|
||||||
local function focus_next_empty_workspace()
|
local function focus_next_empty_workspace()
|
||||||
@@ -1106,10 +1153,10 @@ local function move_window_to_monitor(direction, follow)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local original_monitor = hl.get_active_monitor()
|
local original_monitor = hl.get_active_monitor()
|
||||||
hl.dsp.window.move({ monitor = direction, follow = follow, window = window_selector(window) })()
|
dispatch(hl.dsp.window.move({ monitor = direction, follow = follow, window = window_selector(window) }))
|
||||||
|
|
||||||
if not follow and original_monitor then
|
if not follow and original_monitor then
|
||||||
hl.dsp.focus({ monitor = original_monitor })()
|
dispatch(hl.dsp.focus({ monitor = original_monitor }))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -1127,9 +1174,9 @@ local function move_window_to_empty_workspace_on_monitor(direction)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
hl.dsp.focus({ monitor = target_monitor })()
|
dispatch(hl.dsp.focus({ monitor = target_monitor }))
|
||||||
focus_workspace(workspace_id)
|
focus_workspace(workspace_id)
|
||||||
hl.dsp.focus({ monitor = original_monitor })()
|
dispatch(hl.dsp.focus({ monitor = original_monitor }))
|
||||||
move_window_to_workspace(workspace_id, false, window)
|
move_window_to_workspace(workspace_id, false, window)
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -1400,25 +1447,54 @@ local function apply_scratchpad_geometry(name, window, target_monitor)
|
|||||||
end
|
end
|
||||||
local selector = window_selector(window)
|
local selector = window_selector(window)
|
||||||
|
|
||||||
hl.dsp.window.float({ action = "enable", window = selector })()
|
dispatch(hl.dsp.window.float({ action = "enable", window = selector }))
|
||||||
hl.dsp.window.tag({ tag = "+scratchpad", window = selector })()
|
dispatch(hl.dsp.window.tag({ tag = "+scratchpad", window = selector }))
|
||||||
hl.dsp.window.tag({ tag = "+scratchpad-" .. name, window = selector })()
|
dispatch(hl.dsp.window.tag({ tag = "+scratchpad-" .. name, window = selector }))
|
||||||
hl.dsp.window.resize({ x = width, y = height, relative = false, window = selector })()
|
dispatch(hl.dsp.window.resize({ x = width, y = height, relative = false, window = selector }))
|
||||||
hl.dsp.window.move({ x = x, y = y, relative = false, window = selector })()
|
dispatch(hl.dsp.window.move({ x = x, y = y, relative = false, window = selector }))
|
||||||
if def.dropdown then
|
if def.dropdown then
|
||||||
hl.dsp.window.set_prop({ prop = "border_size", value = "0", window = selector })()
|
dispatch(hl.dsp.window.set_prop({ prop = "border_size", value = "0", window = selector }))
|
||||||
hl.dsp.window.set_prop({ prop = "no_shadow", value = "1", window = selector })()
|
dispatch(hl.dsp.window.set_prop({ prop = "no_shadow", value = "1", window = selector }))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function float_active_window_preserving_tiled_geometry()
|
||||||
|
local geometry = tiled_window_geometry(hl.get_active_window())
|
||||||
|
dispatch(hl.dsp.window.float({ action = "enable", window = geometry and geometry.selector or nil }))
|
||||||
|
if geometry then
|
||||||
|
dispatch(hl.dsp.window.resize({ x = geometry.width, y = geometry.height, relative = false, window = geometry.selector }))
|
||||||
|
dispatch(hl.dsp.window.move({ x = geometry.x, y = geometry.y, relative = false, window = geometry.selector }))
|
||||||
|
end
|
||||||
|
return geometry
|
||||||
|
end
|
||||||
|
|
||||||
local function float_and_drag_active_window()
|
local function float_and_drag_active_window()
|
||||||
hl.dsp.window.float({ action = "enable" })()
|
float_active_window_preserving_tiled_geometry()
|
||||||
hl.dsp.window.drag()()
|
dispatch(hl.dsp.window.drag())
|
||||||
end
|
end
|
||||||
|
|
||||||
local function float_and_resize_active_window()
|
local function float_and_resize_active_window()
|
||||||
hl.dsp.window.float({ action = "enable" })()
|
float_active_window_preserving_tiled_geometry()
|
||||||
hl.dsp.window.resize()()
|
dispatch(hl.dsp.window.resize())
|
||||||
|
end
|
||||||
|
|
||||||
|
local function toggle_pinned_active_window()
|
||||||
|
local window = hl.get_active_window()
|
||||||
|
local selector = window_selector(window)
|
||||||
|
if not window or not selector then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
if window.pinned then
|
||||||
|
dispatch(hl.dsp.window.pin({ action = "disable", window = selector }))
|
||||||
|
dispatch(hl.dsp.window.float({ action = "disable", window = selector }))
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
if not window.floating then
|
||||||
|
float_active_window_preserving_tiled_geometry()
|
||||||
|
end
|
||||||
|
dispatch(hl.dsp.window.pin({ action = "enable", window = selector }))
|
||||||
end
|
end
|
||||||
|
|
||||||
local function schedule_scratchpad_geometry(name, window, target_monitor)
|
local function schedule_scratchpad_geometry(name, window, target_monitor)
|
||||||
@@ -1440,7 +1516,7 @@ local function show_scratchpad_window(name, window, workspace, target_monitor)
|
|||||||
|
|
||||||
remove_minimized_window(window)
|
remove_minimized_window(window)
|
||||||
move_window_to_workspace(workspace.id, false, window)
|
move_window_to_workspace(workspace.id, false, window)
|
||||||
hl.dsp.focus({ window = window_selector(window) })()
|
dispatch(hl.dsp.focus({ window = window_selector(window) }))
|
||||||
schedule_scratchpad_geometry(name, window, target_monitor or hl.get_active_monitor())
|
schedule_scratchpad_geometry(name, window, target_monitor or hl.get_active_monitor())
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -1557,36 +1633,36 @@ local function activate_window_picker_candidate(index)
|
|||||||
local mode = window_picker_mode
|
local mode = window_picker_mode
|
||||||
window_picker_mode = nil
|
window_picker_mode = nil
|
||||||
window_picker_candidates = {}
|
window_picker_candidates = {}
|
||||||
hl.dsp.submap("reset")()
|
dispatch(hl.dsp.submap("reset"))
|
||||||
|
|
||||||
if not window then
|
if not window then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
if mode == "go" then
|
if mode == "go" then
|
||||||
hl.dsp.focus({ window = window_selector(window) })()
|
dispatch(hl.dsp.focus({ window = window_selector(window) }))
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local workspace = active_workspace()
|
local workspace = active_workspace()
|
||||||
if mode == "bring" and workspace then
|
if mode == "bring" and workspace then
|
||||||
move_window_to_workspace(workspace.id, false, window)
|
move_window_to_workspace(workspace.id, false, window)
|
||||||
hl.dsp.focus({ window = window_selector(window) })()
|
dispatch(hl.dsp.focus({ window = window_selector(window) }))
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
if mode == "minimized" and workspace then
|
if mode == "minimized" and workspace then
|
||||||
remove_minimized_window(window)
|
remove_minimized_window(window)
|
||||||
restore_minimized_window(window, workspace)
|
restore_minimized_window(window, workspace)
|
||||||
hl.dsp.focus({ window = window_selector(window) })()
|
dispatch(hl.dsp.focus({ window = window_selector(window) }))
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
if mode == "replace" then
|
if mode == "replace" then
|
||||||
local focused = hl.get_active_window()
|
local focused = hl.get_active_window()
|
||||||
if focused and focused ~= window then
|
if focused and focused ~= window then
|
||||||
hl.dsp.window.swap({ target = window_selector(window), window = window_selector(focused) })()
|
dispatch(hl.dsp.window.swap({ target = window_selector(window), window = window_selector(focused) }))
|
||||||
hl.dsp.focus({ window = window_selector(window) })()
|
dispatch(hl.dsp.focus({ window = window_selector(window) }))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -1624,7 +1700,7 @@ local function enter_window_picker(mode)
|
|||||||
color = "rgba(edb443ff)",
|
color = "rgba(edb443ff)",
|
||||||
font_size = 11,
|
font_size = 11,
|
||||||
})
|
})
|
||||||
hl.dsp.submap("window-picker")()
|
dispatch(hl.dsp.submap("window-picker"))
|
||||||
end
|
end
|
||||||
|
|
||||||
local function gather_focused_class()
|
local function gather_focused_class()
|
||||||
@@ -1654,7 +1730,7 @@ end
|
|||||||
local function focus_next_class()
|
local function focus_next_class()
|
||||||
local focused = hl.get_active_window()
|
local focused = hl.get_active_window()
|
||||||
if not focused or not focused.class or focused.class == "" then
|
if not focused or not focused.class or focused.class == "" then
|
||||||
hl.dsp.window.cycle_next({ next = true, tiled = true, floating = false })()
|
dispatch(hl.dsp.window.cycle_next({ next = true, tiled = true, floating = false }))
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -1683,7 +1759,7 @@ local function focus_next_class()
|
|||||||
local next_class = classes[(current_index % #classes) + 1]
|
local next_class = classes[(current_index % #classes) + 1]
|
||||||
local target = first_by_class[next_class]
|
local target = first_by_class[next_class]
|
||||||
if target then
|
if target then
|
||||||
hl.dsp.focus({ window = window_selector(target) })()
|
dispatch(hl.dsp.focus({ window = window_selector(target) }))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -1705,6 +1781,7 @@ local function show_active_window_info()
|
|||||||
"Class: " .. tostring(window.class or ""),
|
"Class: " .. tostring(window.class or ""),
|
||||||
"Title: " .. tostring(window.title or ""),
|
"Title: " .. tostring(window.title or ""),
|
||||||
"Workspace: " .. tostring(workspace),
|
"Workspace: " .. tostring(workspace),
|
||||||
|
"Pinned: " .. tostring(window.pinned or false),
|
||||||
"Address: " .. tostring(window.address or ""),
|
"Address: " .. tostring(window.address or ""),
|
||||||
"PID: " .. tostring(window.pid or ""),
|
"PID: " .. tostring(window.pid or ""),
|
||||||
}
|
}
|
||||||
@@ -1722,7 +1799,7 @@ local function raise_or_spawn(class_fragment, command)
|
|||||||
local fragment = string.lower(class_fragment)
|
local fragment = string.lower(class_fragment)
|
||||||
for _, window in ipairs(hl.get_windows()) do
|
for _, window in ipairs(hl.get_windows()) do
|
||||||
if is_normal_window(window) and window.class and string.find(string.lower(window.class), fragment, 1, true) then
|
if is_normal_window(window) and window.class and string.find(string.lower(window.class), fragment, 1, true) then
|
||||||
hl.dsp.focus({ window = window_selector(window) })()
|
dispatch(hl.dsp.focus({ window = window_selector(window) }))
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -1752,7 +1829,7 @@ local function restore_last_minimized()
|
|||||||
local window = table.remove(minimized_windows)
|
local window = table.remove(minimized_windows)
|
||||||
if window and window.address and is_minimized_window(window) then
|
if window and window.address and is_minimized_window(window) then
|
||||||
restore_minimized_window(window, workspace)
|
restore_minimized_window(window, workspace)
|
||||||
hl.dsp.focus({ window = window_selector(window) })()
|
dispatch(hl.dsp.focus({ window = window_selector(window) }))
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -1886,10 +1963,10 @@ hl.config({
|
|||||||
general = {
|
general = {
|
||||||
gaps_in = 5,
|
gaps_in = 5,
|
||||||
gaps_out = 10,
|
gaps_out = 10,
|
||||||
border_size = 0,
|
border_size = 2,
|
||||||
col = {
|
col = {
|
||||||
active_border = { colors = { "rgba(edb443ee)", "rgba(33ccffee)" }, angle = 45 },
|
active_border = { colors = { "rgba(3b82f6ee)", "rgba(33ccffee)" }, angle = 45 },
|
||||||
inactive_border = "rgba(595959aa)",
|
inactive_border = "rgba(00000000)",
|
||||||
},
|
},
|
||||||
layout = columns_layout,
|
layout = columns_layout,
|
||||||
allow_tearing = false,
|
allow_tearing = false,
|
||||||
@@ -2029,6 +2106,12 @@ local function apply_rules()
|
|||||||
decorate = false,
|
decorate = false,
|
||||||
no_shadow = true,
|
no_shadow = true,
|
||||||
})
|
})
|
||||||
|
hl.window_rule({
|
||||||
|
name = "subtle-pinned-window-border",
|
||||||
|
match = { pin = true },
|
||||||
|
border_size = 2,
|
||||||
|
border_color = "rgba(edb443ff) rgba(ff4d5dcc)",
|
||||||
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
bind(main_mod .. " + P", exec(launcher_command))
|
bind(main_mod .. " + P", exec(launcher_command))
|
||||||
@@ -2127,7 +2210,7 @@ hl.define_submap("swap-workspace", function()
|
|||||||
local workspace_id = i
|
local workspace_id = i
|
||||||
bind(tostring(i), function()
|
bind(tostring(i), function()
|
||||||
swap_current_workspace_with(workspace_id)
|
swap_current_workspace_with(workspace_id)
|
||||||
hl.dsp.submap("reset")()
|
dispatch(hl.dsp.submap("reset"))
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -2175,6 +2258,7 @@ bind(main_mod .. " + CTRL + Space", gather_workspace_into_tabbed_group)
|
|||||||
bind(main_mod .. " + bracketright", monocle_next)
|
bind(main_mod .. " + bracketright", monocle_next)
|
||||||
bind(main_mod .. " + bracketleft", monocle_prev)
|
bind(main_mod .. " + bracketleft", monocle_prev)
|
||||||
bind(main_mod .. " + T", hl.dsp.window.float({ action = "disable" }))
|
bind(main_mod .. " + T", hl.dsp.window.float({ action = "disable" }))
|
||||||
|
bind(main_mod .. " + O", toggle_pinned_active_window)
|
||||||
bind(main_mod .. " + M", minimize_active_window)
|
bind(main_mod .. " + M", minimize_active_window)
|
||||||
bind(main_mod .. " + SHIFT + M", restore_last_minimized)
|
bind(main_mod .. " + SHIFT + M", restore_last_minimized)
|
||||||
bind(main_mod .. " + CTRL + SHIFT + M", function()
|
bind(main_mod .. " + CTRL + SHIFT + M", function()
|
||||||
@@ -2229,8 +2313,8 @@ for i = 1, 9 do
|
|||||||
bind(main_mod .. " + " .. workspace, hl.dsp.focus({ workspace = workspace, on_current_monitor = true }))
|
bind(main_mod .. " + " .. workspace, hl.dsp.focus({ workspace = workspace, on_current_monitor = true }))
|
||||||
bind(main_mod .. " + SHIFT + " .. workspace, hl.dsp.window.move({ workspace = workspace, follow = false }))
|
bind(main_mod .. " + SHIFT + " .. workspace, hl.dsp.window.move({ workspace = workspace, follow = false }))
|
||||||
bind(main_mod .. " + CTRL + " .. workspace, function()
|
bind(main_mod .. " + CTRL + " .. workspace, function()
|
||||||
hl.dsp.window.move({ workspace = workspace, follow = false })()
|
dispatch(hl.dsp.window.move({ workspace = workspace, follow = false }))
|
||||||
hl.dsp.focus({ workspace = workspace, on_current_monitor = true })()
|
dispatch(hl.dsp.focus({ workspace = workspace, on_current_monitor = true }))
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -2270,7 +2354,9 @@ bind(hyper .. " + V", exec([[cliphist list | rofi -dmenu -p "Clipboard" | cliphi
|
|||||||
bind(hyper .. " + P", exec("rofi-pass"))
|
bind(hyper .. " + P", exec("rofi-pass"))
|
||||||
bind(hyper .. " + H", exec([[grim -g "$(slurp)" - | swappy -f -]]))
|
bind(hyper .. " + H", exec([[grim -g "$(slurp)" - | swappy -f -]]))
|
||||||
bind(hyper .. " + C", exec("rofi_tmcodex.sh"))
|
bind(hyper .. " + C", exec("rofi_tmcodex.sh"))
|
||||||
|
bind(hyper .. " + SHIFT + C", exec("rofi_tmcodex.sh resume"))
|
||||||
bind(hyper .. " + SHIFT + L", exec("hyprlock"))
|
bind(hyper .. " + SHIFT + L", exec("hyprlock"))
|
||||||
|
bind(hyper .. " + L", exec("hypr_rofi_layout"))
|
||||||
bind(hyper .. " + K", exec("rofi_kill_process.sh"))
|
bind(hyper .. " + K", exec("rofi_kill_process.sh"))
|
||||||
bind(hyper .. " + SHIFT + K", exec("rofi_kill_all.sh"))
|
bind(hyper .. " + SHIFT + K", exec("rofi_kill_all.sh"))
|
||||||
bind(hyper .. " + R", exec("rofi-systemd"))
|
bind(hyper .. " + R", exec("rofi-systemd"))
|
||||||
|
|||||||
@@ -127,7 +127,8 @@ workspaceCandidateInfo name =
|
|||||||
WorkspaceModel.windowPosition = Nothing,
|
WorkspaceModel.windowPosition = Nothing,
|
||||||
WorkspaceModel.windowUrgent = False,
|
WorkspaceModel.windowUrgent = False,
|
||||||
WorkspaceModel.windowActive = False,
|
WorkspaceModel.windowActive = False,
|
||||||
WorkspaceModel.windowMinimized = False
|
WorkspaceModel.windowMinimized = False,
|
||||||
|
WorkspaceModel.windowPinned = False
|
||||||
}
|
}
|
||||||
|
|
||||||
workspaceIconFromCandidate :: Int32 -> Text -> TaffyIO (Maybe Gdk.Pixbuf)
|
workspaceIconFromCandidate :: Int32 -> Text -> TaffyIO (Maybe Gdk.Pixbuf)
|
||||||
|
|||||||
6
dotfiles/config/taffybar/flake.lock
generated
6
dotfiles/config/taffybar/flake.lock
generated
@@ -136,11 +136,11 @@
|
|||||||
"xmonad-contrib": "xmonad-contrib"
|
"xmonad-contrib": "xmonad-contrib"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1778147268,
|
"lastModified": 1778303085,
|
||||||
"narHash": "sha256-q/1DIMXQEU4y95gAFacnrHwqxYbkpqwtpmVGTFmmTMo=",
|
"narHash": "sha256-pDFWJ3BJ4jaZOi1hq7SHzRCdnII8PgvBNxcyoFgx4BE=",
|
||||||
"owner": "taffybar",
|
"owner": "taffybar",
|
||||||
"repo": "taffybar",
|
"repo": "taffybar",
|
||||||
"rev": "e52f00e8d6a0fe903dada5001778808d093eafb6",
|
"rev": "45b31b789fdfeff7251f0f77e1259ef4d1cc987a",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|||||||
Submodule dotfiles/config/taffybar/taffybar updated: be3aa010f7...8ab1f3399f
@@ -256,10 +256,22 @@
|
|||||||
|
|
||||||
.workspaces .window-icon-container.active {
|
.workspaces .window-icon-container.active {
|
||||||
background-color: rgba(255, 255, 255, 0.10);
|
background-color: rgba(255, 255, 255, 0.10);
|
||||||
border-color: rgba(255, 255, 255, 0.5);
|
border-color: rgba(59, 130, 246, 0.76);
|
||||||
border-radius: 7px;
|
border-radius: 7px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.workspaces .window-icon-container.pinned {
|
||||||
|
border-color: rgba(255, 77, 93, 0.74);
|
||||||
|
box-shadow: inset 0 -2px 0 rgba(255, 77, 93, 0.72);
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspaces .window-icon-container.pinned.active {
|
||||||
|
border-color: rgba(237, 180, 67, 0.95);
|
||||||
|
box-shadow:
|
||||||
|
inset 0 -2px 0 rgba(237, 180, 67, 0.9),
|
||||||
|
0 0 0 1px rgba(237, 180, 67, 0.22);
|
||||||
|
}
|
||||||
|
|
||||||
.workspaces .active .contents,
|
.workspaces .active .contents,
|
||||||
.workspaces .visible .contents {
|
.workspaces .visible .contents {
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
|
|||||||
@@ -1071,6 +1071,7 @@ addKeys conf@XConfig { modMask = modm } =
|
|||||||
, ((hyper, xK_p), spawn "rofi-pass")
|
, ((hyper, xK_p), spawn "rofi-pass")
|
||||||
, ((hyper, xK_h), spawn "rofi_shutter")
|
, ((hyper, xK_h), spawn "rofi_shutter")
|
||||||
, ((hyper, xK_c), spawn "rofi_tmcodex.sh")
|
, ((hyper, xK_c), spawn "rofi_tmcodex.sh")
|
||||||
|
, ((hyper .|. shiftMask, xK_c), spawn "rofi_tmcodex.sh resume")
|
||||||
, ((hyper .|. shiftMask, xK_l), spawn "dm-tool lock")
|
, ((hyper .|. shiftMask, xK_l), spawn "dm-tool lock")
|
||||||
, ((hyper, xK_l), selectLayout)
|
, ((hyper, xK_l), selectLayout)
|
||||||
, ((hyper, xK_k), spawn "rofi_kill_process.sh")
|
, ((hyper, xK_k), spawn "rofi_kill_process.sh")
|
||||||
|
|||||||
24
dotfiles/config/zellij/config.kdl.bak
Normal file
24
dotfiles/config/zellij/config.kdl.bak
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
keybinds {
|
||||||
|
// Keep Ctrl-p available for readline/history/up in shells and editors.
|
||||||
|
unbind "Ctrl p"
|
||||||
|
|
||||||
|
shared_except "locked" "pane" {
|
||||||
|
bind "Ctrl Space" { SwitchToMode "Pane"; }
|
||||||
|
}
|
||||||
|
|
||||||
|
pane {
|
||||||
|
bind "Ctrl Space" { SwitchToMode "Normal"; }
|
||||||
|
}
|
||||||
|
|
||||||
|
tmux {
|
||||||
|
// Ctrl-b C: start a Codex pane from the current zellij tab.
|
||||||
|
bind "C" {
|
||||||
|
Run "codex" "--dangerously-bypass-approvals-and-sandbox" {
|
||||||
|
name "codex"
|
||||||
|
}
|
||||||
|
SwitchToMode "Normal"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
default_mode "locked"
|
||||||
@@ -4106,7 +4106,7 @@ Ensure all themes that I use are installed:
|
|||||||
:custom
|
:custom
|
||||||
(doom-modeline-height 40))
|
(doom-modeline-height 40))
|
||||||
|
|
||||||
(defvar imalison:enable-doom-modeline-on-startup nil
|
(defvar imalison:enable-doom-modeline-on-startup t
|
||||||
"Non-nil means enable `doom-modeline-mode' during startup.")
|
"Non-nil means enable `doom-modeline-mode' during startup.")
|
||||||
#+end_src
|
#+end_src
|
||||||
** page-break-lines
|
** page-break-lines
|
||||||
|
|||||||
70
dotfiles/lib/bin/hypr_rofi_layout
Executable file
70
dotfiles/lib/bin/hypr_rofi_layout
Executable file
@@ -0,0 +1,70 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
ensure_hyprland_instance() {
|
||||||
|
if [[ -n "${HYPRLAND_INSTANCE_SIGNATURE:-}" ]]; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
local runtime="${XDG_RUNTIME_DIR:-/run/user/$(id -u)}"
|
||||||
|
local hypr_dir="$runtime/hypr"
|
||||||
|
if [[ ! -d "$hypr_dir" ]]; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
local socket_dir
|
||||||
|
socket_dir="$(
|
||||||
|
find "$hypr_dir" -mindepth 2 -maxdepth 2 -name .socket.sock -printf '%T@ %h\n' 2>/dev/null |
|
||||||
|
sort -nr |
|
||||||
|
awk 'NR == 1 { print $2 }'
|
||||||
|
)"
|
||||||
|
|
||||||
|
if [[ -n "$socket_dir" ]]; then
|
||||||
|
export HYPRLAND_INSTANCE_SIGNATURE="${socket_dir##*/}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
current_layout() {
|
||||||
|
local state_file="${XDG_RUNTIME_DIR:-}/hyprland-layout-state"
|
||||||
|
if [[ -r "$state_file" ]]; then
|
||||||
|
awk -F= '$1 == "layout" { print $2; exit }' "$state_file"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
ensure_hyprland_instance
|
||||||
|
|
||||||
|
layouts=(
|
||||||
|
"nStack Columns"
|
||||||
|
"master Large main"
|
||||||
|
"grid Grid"
|
||||||
|
"monocle Monocle"
|
||||||
|
)
|
||||||
|
|
||||||
|
current="$(current_layout || true)"
|
||||||
|
selected_row=0
|
||||||
|
labels=()
|
||||||
|
|
||||||
|
for index in "${!layouts[@]}"; do
|
||||||
|
layout="${layouts[$index]%%$'\t'*}"
|
||||||
|
label="${layouts[$index]#*$'\t'}"
|
||||||
|
labels+=("$label")
|
||||||
|
|
||||||
|
if [[ "$layout" == "$current" ]]; then
|
||||||
|
selected_row="$index"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
selection="$(
|
||||||
|
printf '%s\n' "${labels[@]}" |
|
||||||
|
rofi -dmenu -i -p "Layout" -selected-row "$selected_row"
|
||||||
|
)" || exit 0
|
||||||
|
|
||||||
|
for entry in "${layouts[@]}"; do
|
||||||
|
layout="${entry%%$'\t'*}"
|
||||||
|
label="${entry#*$'\t'}"
|
||||||
|
|
||||||
|
if [[ "$label" == "$selection" ]]; then
|
||||||
|
hyprctl dispatch "_G.im_hyprland_set_layout(\"$layout\")" >/dev/null
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
@@ -11,6 +11,7 @@ history_file="$state_dir/dirs"
|
|||||||
codex_home="${CODEX_HOME:-$HOME/.codex}"
|
codex_home="${CODEX_HOME:-$HOME/.codex}"
|
||||||
terminal="${TMCODEX_TERMINAL:-${TERMINAL:-ghostty}}"
|
terminal="${TMCODEX_TERMINAL:-${TERMINAL:-ghostty}}"
|
||||||
debug_log="$state_dir/debug.log"
|
debug_log="$state_dir/debug.log"
|
||||||
|
tmcodex_args=("$@")
|
||||||
mkdir -p "$state_dir"
|
mkdir -p "$state_dir"
|
||||||
touch "$history_file"
|
touch "$history_file"
|
||||||
|
|
||||||
@@ -91,7 +92,7 @@ if [[ "${1:-}" == "--print-candidates" ]]; then
|
|||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
debug "script=$0 codex_home=$codex_home history_file=$history_file terminal=$terminal"
|
debug "script=$0 codex_home=$codex_home history_file=$history_file terminal=$terminal args=${tmcodex_args[*]}"
|
||||||
selected_dir="$(
|
selected_dir="$(
|
||||||
emit_candidates | dedup | existing_dirs | rofi -dmenu -i -p 'tmcodex dir' || true
|
emit_candidates | dedup | existing_dirs | rofi -dmenu -i -p 'tmcodex dir' || true
|
||||||
)"
|
)"
|
||||||
@@ -133,4 +134,4 @@ if (( ${#terminal_argv[@]} == 0 )); then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
("${terminal_argv[@]}" -e zsh -lc 'cd -- "$1" && exec tmcodex' zsh "$selected_dir" >/dev/null 2>&1 &!)
|
("${terminal_argv[@]}" -e zsh -lc 'cd -- "$1" && shift && exec tmcodex "$@"' zsh "$selected_dir" "${tmcodex_args[@]}" >/dev/null 2>&1 &!)
|
||||||
|
|||||||
17
dotfiles/lib/bin/zellij_switch_session
Executable file
17
dotfiles/lib/bin/zellij_switch_session
Executable file
@@ -0,0 +1,17 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
if ! command -v sk >/dev/null 2>&1; then
|
||||||
|
echo "zellij_switch_session: sk is required" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
selected=$(
|
||||||
|
zellij list-sessions --short --no-formatting |
|
||||||
|
sed '/^[[:space:]]*$/d' |
|
||||||
|
sk --prompt 'zellij session> ' --height 100% --reverse
|
||||||
|
)
|
||||||
|
|
||||||
|
if [ -n "$selected" ]; then
|
||||||
|
zellij action switch-session "$selected"
|
||||||
|
fi
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
[ 305ms] [ERROR] Failed to load resource: the server responded with a status of 403 () @ https://www.reddit.com/r/hyprland/comments/1t74dt6/pre055_discussion_share_your_new_lua_scripts_that/?solution=c0ac3501a8dec997c0ac3501a8dec997&js_challenge=1&token=bbbe4bf1c9a2b5160829c4be34da586130c27f161a9c565bc73f58c2dec5bfa9&jsc_orig_r=:0
|
||||||
26
nixos/.playwright-cli/page-2026-05-08T10-57-16-545Z.yml
Normal file
26
nixos/.playwright-cli/page-2026-05-08T10-57-16-545Z.yml
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
- generic [active] [ref=e1]:
|
||||||
|
- link [ref=e3] [cursor=pointer]:
|
||||||
|
- /url: https://www.reddit.com
|
||||||
|
- img [ref=e4]
|
||||||
|
- generic [ref=e5]:
|
||||||
|
- img [ref=e6]
|
||||||
|
- heading "Prove your humanity" [level=1] [ref=e8]
|
||||||
|
- paragraph [ref=e9]: We’re committed to safety and security. But not for bots. Complete the challenge below and let us know you’re a real person.
|
||||||
|
- iframe [ref=e14]:
|
||||||
|
- generic [ref=f1e2]:
|
||||||
|
- generic [ref=f1e3]:
|
||||||
|
- checkbox "I'm not a robot" [ref=f1e7]
|
||||||
|
- generic [ref=f1e11]: I'm not a robot
|
||||||
|
- generic [ref=f1e15]: reCAPTCHA
|
||||||
|
- generic [ref=e15]:
|
||||||
|
- link "Reddit, Inc. © \"2026\". All rights reserved." [ref=e16] [cursor=pointer]:
|
||||||
|
- /url: https://www.redditinc.com/
|
||||||
|
- generic [ref=e17]:
|
||||||
|
- link "User Agreement" [ref=e18] [cursor=pointer]:
|
||||||
|
- /url: https://www.reddit.com/help/useragreement
|
||||||
|
- link "Privacy Policy" [ref=e19] [cursor=pointer]:
|
||||||
|
- /url: https://www.reddit.com/help/privacypolicy
|
||||||
|
- link "Content Policy" [ref=e20] [cursor=pointer]:
|
||||||
|
- /url: https://www.reddit.com/help/contentpolicy
|
||||||
|
- link "Help" [ref=e21] [cursor=pointer]:
|
||||||
|
- /url: https://support.reddithelp.com/hc/en-us
|
||||||
9
nixos/.playwright-cli/page-2026-05-08T10-57-35-450Z.yml
Normal file
9
nixos/.playwright-cli/page-2026-05-08T10-57-35-450Z.yml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
- generic [ref=e3]:
|
||||||
|
- img [ref=e5]
|
||||||
|
- generic [ref=e7]:
|
||||||
|
- generic [ref=e8]: You've been blocked by network security.
|
||||||
|
- generic [ref=e10]:
|
||||||
|
- text: If you think you've been blocked by mistake, file a ticket below and we'll look into it.
|
||||||
|
- link "File a ticket" [ref=e12] [cursor=pointer]:
|
||||||
|
- /url: https://support.reddithelp.com/hc/en-us/requests/new?ticket_form_id=21879292693140
|
||||||
|
- generic [ref=e14]: File a ticket
|
||||||
9
nixos/.playwright-cli/page-2026-05-08T10-57-42-387Z.yml
Normal file
9
nixos/.playwright-cli/page-2026-05-08T10-57-42-387Z.yml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
- generic [ref=e3]:
|
||||||
|
- img [ref=e5]
|
||||||
|
- generic [ref=e7]:
|
||||||
|
- generic [ref=e8]: You've been blocked by network security.
|
||||||
|
- generic [ref=e10]:
|
||||||
|
- text: If you think you've been blocked by mistake, file a ticket below and we'll look into it.
|
||||||
|
- link "File a ticket" [ref=e12] [cursor=pointer]:
|
||||||
|
- /url: https://support.reddithelp.com/hc/en-us/requests/new?ticket_form_id=21879292693140
|
||||||
|
- generic [ref=e14]: File a ticket
|
||||||
@@ -3,11 +3,11 @@
|
|||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
cfg = config.myModules.bootloaders.grubWindows;
|
cfg = config.myModules.bootloaders.grub;
|
||||||
systemdBootCfg = config.myModules.bootloaders.systemdBoot;
|
systemdBootCfg = config.myModules.bootloaders.systemdBoot;
|
||||||
in {
|
in {
|
||||||
options.myModules.bootloaders.grubWindows = {
|
options.myModules.bootloaders.grub = {
|
||||||
enable = lib.mkEnableOption "GRUB with Windows chainloading support";
|
enable = lib.mkEnableOption "GRUB bootloader support";
|
||||||
|
|
||||||
configurationLimit = lib.mkOption {
|
configurationLimit = lib.mkOption {
|
||||||
default = 5;
|
default = 5;
|
||||||
@@ -24,6 +24,18 @@ in {
|
|||||||
entries discovered by os-prober.
|
entries discovered by os-prober.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
theme = lib.mkOption {
|
||||||
|
default = null;
|
||||||
|
type = lib.types.nullOr lib.types.path;
|
||||||
|
description = "GRUB theme directory.";
|
||||||
|
};
|
||||||
|
|
||||||
|
gfxmode = lib.mkOption {
|
||||||
|
default = "auto";
|
||||||
|
type = lib.types.str;
|
||||||
|
description = "GRUB graphical mode used for EFI and BIOS.";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
config = lib.mkIf cfg.enable {
|
config = lib.mkIf cfg.enable {
|
||||||
@@ -31,14 +43,14 @@ in {
|
|||||||
{
|
{
|
||||||
assertion = !systemdBootCfg.enable;
|
assertion = !systemdBootCfg.enable;
|
||||||
message = ''
|
message = ''
|
||||||
myModules.bootloaders.grubWindows.enable conflicts with
|
myModules.bootloaders.grub.enable conflicts with
|
||||||
myModules.bootloaders.systemdBoot.enable. Disable systemdBoot before
|
myModules.bootloaders.systemdBoot.enable. Disable systemdBoot before
|
||||||
enabling the GRUB Windows boot strategy.
|
enabling the GRUB boot strategy.
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
assertion = builtins.hasAttr "/boot" config.fileSystems;
|
assertion = builtins.hasAttr "/boot" config.fileSystems;
|
||||||
message = "The GRUB Windows boot strategy expects an EFI filesystem mounted at /boot.";
|
message = "The GRUB boot strategy expects an EFI filesystem mounted at /boot.";
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -55,6 +67,9 @@ in {
|
|||||||
useOSProber = true;
|
useOSProber = true;
|
||||||
configurationLimit = cfg.configurationLimit;
|
configurationLimit = cfg.configurationLimit;
|
||||||
timeoutStyle = "menu";
|
timeoutStyle = "menu";
|
||||||
|
theme = lib.mkIf (cfg.theme != null) (lib.mkDefault cfg.theme);
|
||||||
|
gfxmodeEfi = lib.mkDefault cfg.gfxmode;
|
||||||
|
gfxmodeBios = lib.mkDefault cfg.gfxmode;
|
||||||
extraEntries = lib.optionalString (cfg.windowsEfiUuid != null) ''
|
extraEntries = lib.optionalString (cfg.windowsEfiUuid != null) ''
|
||||||
menuentry "Windows Boot Manager" {
|
menuentry "Windows Boot Manager" {
|
||||||
insmod part_gpt
|
insmod part_gpt
|
||||||
@@ -13,6 +13,11 @@ pkgs.runCommand "hyprland-config-syntax" {
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if grep -nE 'hl[.]dsp.*[)][(][)]' hyprland.lua; then
|
||||||
|
echo "hyprland.lua should use hl.dispatch(...) instead of calling dispatcher objects directly" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
lua ${./smoke-test.lua} ./hyprland.lua
|
lua ${./smoke-test.lua} ./hyprland.lua
|
||||||
touch "$out"
|
touch "$out"
|
||||||
''
|
''
|
||||||
|
|||||||
@@ -3,14 +3,18 @@ local callbacks = {}
|
|||||||
|
|
||||||
local function noop() end
|
local function noop() end
|
||||||
|
|
||||||
local function dispatcher_proxy()
|
local dispatcher = setmetatable({}, {
|
||||||
local proxy = {}
|
|
||||||
return setmetatable(proxy, {
|
|
||||||
__index = function()
|
|
||||||
return dispatcher_proxy()
|
|
||||||
end,
|
|
||||||
__call = function()
|
__call = function()
|
||||||
return noop
|
error("dispatcher objects cannot be called directly; use hl.dispatch(dispatcher)", 2)
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
local function dispatcher_namespace()
|
||||||
|
return setmetatable({}, {
|
||||||
|
__index = function()
|
||||||
|
return function()
|
||||||
|
return dispatcher
|
||||||
|
end
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
@@ -48,6 +52,7 @@ hl = {
|
|||||||
bind = noop,
|
bind = noop,
|
||||||
config = noop,
|
config = noop,
|
||||||
curve = noop,
|
curve = noop,
|
||||||
|
dispatch = noop,
|
||||||
env = noop,
|
env = noop,
|
||||||
exec_cmd = noop,
|
exec_cmd = noop,
|
||||||
define_submap = function(_, reset_or_callback, callback)
|
define_submap = function(_, reset_or_callback, callback)
|
||||||
@@ -59,7 +64,17 @@ hl = {
|
|||||||
monitor = noop,
|
monitor = noop,
|
||||||
workspace_rule = noop,
|
workspace_rule = noop,
|
||||||
window_rule = noop,
|
window_rule = noop,
|
||||||
dsp = dispatcher_proxy(),
|
dsp = setmetatable({
|
||||||
|
group = dispatcher_namespace(),
|
||||||
|
window = dispatcher_namespace(),
|
||||||
|
workspace = dispatcher_namespace(),
|
||||||
|
}, {
|
||||||
|
__index = function()
|
||||||
|
return function()
|
||||||
|
return dispatcher
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
}),
|
||||||
notification = {
|
notification = {
|
||||||
create = function()
|
create = function()
|
||||||
return notification
|
return notification
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
./android.nix
|
./android.nix
|
||||||
./base.nix
|
./base.nix
|
||||||
./ben.nix
|
./ben.nix
|
||||||
./bootloaders/grub-windows.nix
|
./bootloaders/grub.nix
|
||||||
./bootloaders/systemd-boot.nix
|
./bootloaders/systemd-boot.nix
|
||||||
./cache-server.nix
|
./cache-server.nix
|
||||||
./cache.nix
|
./cache.nix
|
||||||
|
|||||||
75
nixos/flake.lock
generated
75
nixos/flake.lock
generated
@@ -47,11 +47,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1776876344,
|
"lastModified": 1777499565,
|
||||||
"narHash": "sha256-Ubqb/agkuMJK+k19gjQgHux/eOYRc1sRGoOZOho8+VY=",
|
"narHash": "sha256-nU55VWk99Pn1QzQDDjFISocC4SgDZ3Xp+zb6ji3JclM=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "aquamarine",
|
"repo": "aquamarine",
|
||||||
"rev": "648a13d0ee1e03a843b3e145b8ece15393058701",
|
"rev": "813c1e8981893c11e118b19c125d6bc282f51765",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -594,6 +594,26 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"grub2-themes": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1757136219,
|
||||||
|
"narHash": "sha256-tKU+vq34KHu/A2wD7WdgP5A4/RCmSD8hB0TyQAUlixA=",
|
||||||
|
"owner": "vinceliuice",
|
||||||
|
"repo": "grub2-themes",
|
||||||
|
"rev": "80dd04ddf3ba7b284a7b1a5df2b1e95ee2aad606",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "vinceliuice",
|
||||||
|
"repo": "grub2-themes",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"hercules-ci-effects": {
|
"hercules-ci-effects": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-parts": "flake-parts_3",
|
"flake-parts": "flake-parts_3",
|
||||||
@@ -783,11 +803,11 @@
|
|||||||
"xdph": "xdph"
|
"xdph": "xdph"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1777497195,
|
"lastModified": 1778199997,
|
||||||
"narHash": "sha256-I9z3somAUJ5jGwv4ZBjADco8CmdglEUqYs0AgJ5LSDs=",
|
"narHash": "sha256-L+jaxpUg7l8dThBsuXddzd5rv1QKMiKLENuwM/aG3aA=",
|
||||||
"ref": "refs/heads/main",
|
"ref": "refs/heads/main",
|
||||||
"rev": "56d7a43102b53f79a2311662783d5dd94cb2f1a5",
|
"rev": "de9f8dc9831d921cd1ee30d5d14f45f0e345a8ca",
|
||||||
"revCount": 7215,
|
"revCount": 7275,
|
||||||
"submodules": true,
|
"submodules": true,
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/hyprwm/Hyprland"
|
"url": "https://github.com/hyprwm/Hyprland"
|
||||||
@@ -916,11 +936,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1776426736,
|
"lastModified": 1777320127,
|
||||||
"narHash": "sha256-rl7i4aY+9p8LysJp7o8uRWahCkpFznCgGHXszlTw7b0=",
|
"narHash": "sha256-Qu+Wf2Bp5qUjyn2YpZNq8a7JyzTGowhT1knrwE38a9U=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "hyprlang",
|
"repo": "hyprlang",
|
||||||
"rev": "7833ff33b2e82d3406337b5dcf0d1cec595d83e9",
|
"rev": "090117506ddc3d7f26e650ff344d378c2ec329cc",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -1014,11 +1034,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1777492286,
|
"lastModified": 1778179779,
|
||||||
"narHash": "sha256-PwuoEJQcjSKJNP5T55qhfDwIP0tw5zxEhfu8GDfKfeg=",
|
"narHash": "sha256-Ri6rVf54CRD3aISHLhSY6H4tBScVjm9ebkv7rF2lcZM=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "hyprutils",
|
"repo": "hyprutils",
|
||||||
"rev": "ec5c0c709706bad5b82f667fd8758eae442577ce",
|
"rev": "3e170e5ad010602671f5f25b327e8bdb8fdd532c",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -1039,11 +1059,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1777148232,
|
"lastModified": 1777159683,
|
||||||
"narHash": "sha256-Uv0WZLhu89SafuSOmYDA7akrPt4wBRmsa1ucasO5aXg=",
|
"narHash": "sha256-Jxixw6wZphUp+nHYxOKUYSckL17QMBx2d5Zp0rJHr1g=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "hyprwayland-scanner",
|
"repo": "hyprwayland-scanner",
|
||||||
"rev": "fec9cf1abcc1011e46f0a0986f46bf93c6bf8b92",
|
"rev": "b8632713a6beaf28b56f2a7b0ab2fb7088dbb404",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -1098,11 +1118,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1776728575,
|
"lastModified": 1777388329,
|
||||||
"narHash": "sha256-z9eGphrArEBpl1O/GCH0wlY6z4K9vA6yWh2gAS6qytU=",
|
"narHash": "sha256-40YxVGF2rA9iH3D7am5fy4EOSBbMgpJtJ9yhl0Cx+qI=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "hyprwire",
|
"repo": "hyprwire",
|
||||||
"rev": "f3a80888783702a39691b684d099e16b83ed4702",
|
"rev": "04be2897e05f9b271d532b5ae56ca088d2eeac02",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -1365,11 +1385,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs_2": {
|
"nixpkgs_2": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1776877367,
|
"lastModified": 1777954456,
|
||||||
"narHash": "sha256-EHq1/OX139R1RvBzOJ0aMRT3xnWyqtHBRUBuO1gFzjI=",
|
"narHash": "sha256-hGdgeU2Nk87RAuZyYjyDjFL6LK7dAZN5RE9+hrDTkDU=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "0726a0ecb6d4e08f6adced58726b95db924cef57",
|
"rev": "549bd84d6279f9852cae6225e372cc67fb91a4c1",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -1678,6 +1698,7 @@
|
|||||||
"git-blame-rank": "git-blame-rank",
|
"git-blame-rank": "git-blame-rank",
|
||||||
"git-ignore-nix": "git-ignore-nix",
|
"git-ignore-nix": "git-ignore-nix",
|
||||||
"git-sync-rs": "git-sync-rs",
|
"git-sync-rs": "git-sync-rs",
|
||||||
|
"grub2-themes": "grub2-themes",
|
||||||
"home-manager": "home-manager",
|
"home-manager": "home-manager",
|
||||||
"hypr-workspace-history": "hypr-workspace-history",
|
"hypr-workspace-history": "hypr-workspace-history",
|
||||||
"hyprNStack": "hyprNStack",
|
"hyprNStack": "hyprNStack",
|
||||||
@@ -1806,8 +1827,8 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1778195259,
|
"lastModified": 1778303132,
|
||||||
"narHash": "sha256-exYzNU6vVQg3z1v8ZNDLMjV8+GxbubiEqndT8rFzrm0=",
|
"narHash": "sha256-P8W/cn7iiWbvrrkyv4LPENnsVbKbASK6+bLKZbxeIoA=",
|
||||||
"path": "/home/imalison/dotfiles/dotfiles/config/taffybar/taffybar",
|
"path": "/home/imalison/dotfiles/dotfiles/config/taffybar/taffybar",
|
||||||
"type": "path"
|
"type": "path"
|
||||||
},
|
},
|
||||||
@@ -1889,11 +1910,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1777035886,
|
"lastModified": 1777585783,
|
||||||
"narHash": "sha256-m1TNuBoSXUBSKhD9UVMkU90M0wFTPTfvIOOltO8IM8A=",
|
"narHash": "sha256-JTeWRy42VElroJ0rVdZuVXSoTLsx+NzQfGPKMbtn3SU=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "xdg-desktop-portal-hyprland",
|
"repo": "xdg-desktop-portal-hyprland",
|
||||||
"rev": "ecfcdcc781f48821d83e1e2a0e30d7beca0eeb5e",
|
"rev": "fa50d6fbaff8f42c61071b87b034a90d82a33558",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|||||||
@@ -235,6 +235,11 @@
|
|||||||
flake-utils.follows = "flake-utils";
|
flake-utils.follows = "flake-utils";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
grub2-themes = {
|
||||||
|
url = "github:vinceliuice/grub2-themes";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = inputs @ {
|
outputs = inputs @ {
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
"https://cache.flox.dev"
|
"https://cache.flox.dev"
|
||||||
"https://org-agenda-api.cachix.org"
|
"https://org-agenda-api.cachix.org"
|
||||||
"https://colonelpanic8-dotfiles.cachix.org"
|
"https://colonelpanic8-dotfiles.cachix.org"
|
||||||
|
"https://taffybar.cachix.org"
|
||||||
"https://codex-cli.cachix.org"
|
"https://codex-cli.cachix.org"
|
||||||
"https://claude-code.cachix.org"
|
"https://claude-code.cachix.org"
|
||||||
];
|
];
|
||||||
@@ -36,6 +37,7 @@
|
|||||||
"flox-cache-public-1:7F4OyH7ZCnFhcze3fJdfyXYLQw/aV7GEed86nQ7IsOs="
|
"flox-cache-public-1:7F4OyH7ZCnFhcze3fJdfyXYLQw/aV7GEed86nQ7IsOs="
|
||||||
"org-agenda-api.cachix.org-1:liKFemKkOLV/rJt2txDNcpDjRsqLuBneBjkSw/UVXKA="
|
"org-agenda-api.cachix.org-1:liKFemKkOLV/rJt2txDNcpDjRsqLuBneBjkSw/UVXKA="
|
||||||
"colonelpanic8-dotfiles.cachix.org-1:O6GF3nptpeMFapX29okzO92eSWXR36zqW6ZF2C8P0eQ="
|
"colonelpanic8-dotfiles.cachix.org-1:O6GF3nptpeMFapX29okzO92eSWXR36zqW6ZF2C8P0eQ="
|
||||||
|
"taffybar.cachix.org-1:beZotJ1nVEsAnJxa3lWn0zwzZM7oeXmGh4ADRpHeeIo="
|
||||||
"codex-cli.cachix.org-1:1Br3H1hHoRYG22n//cGKJOk3cQXgYobUel6O8DgSing="
|
"codex-cli.cachix.org-1:1Br3H1hHoRYG22n//cGKJOk3cQXgYobUel6O8DgSing="
|
||||||
"claude-code.cachix.org-1:YeXf2aNu7UTX8Vwrze0za1WEDS+4DuI2kVeWEE4fsRk="
|
"claude-code.cachix.org-1:YeXf2aNu7UTX8Vwrze0za1WEDS+4DuI2kVeWEE4fsRk="
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -116,6 +116,19 @@
|
|||||||
exec ${../dotfiles/lib/bin/hypr_shell_ui} "$@"
|
exec ${../dotfiles/lib/bin/hypr_shell_ui} "$@"
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
hyprRofiLayout = pkgs.writeShellApplication {
|
||||||
|
name = "hypr_rofi_layout";
|
||||||
|
runtimeInputs = [
|
||||||
|
pkgs.coreutils
|
||||||
|
pkgs.findutils
|
||||||
|
pkgs.gawk
|
||||||
|
pkgs.rofi
|
||||||
|
hyprlandPackage
|
||||||
|
];
|
||||||
|
text = ''
|
||||||
|
exec ${../dotfiles/lib/bin/hypr_rofi_layout} "$@"
|
||||||
|
'';
|
||||||
|
};
|
||||||
hyprscratchSettings = {
|
hyprscratchSettings = {
|
||||||
daemon_options = "clean";
|
daemon_options = "clean";
|
||||||
global_options = "";
|
global_options = "";
|
||||||
@@ -267,6 +280,7 @@
|
|||||||
ddcutil # Monitor input switching over DDC/CI
|
ddcutil # Monitor input switching over DDC/CI
|
||||||
|
|
||||||
# For scripts
|
# For scripts
|
||||||
|
hyprRofiLayout
|
||||||
hyprRofiWindow
|
hyprRofiWindow
|
||||||
hyprShellUi
|
hyprShellUi
|
||||||
jq
|
jq
|
||||||
|
|||||||
@@ -1,105 +0,0 @@
|
|||||||
{
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
imports = [
|
|
||||||
../configuration.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
features.full.enable = true;
|
|
||||||
myModules.kubelet.enable = false;
|
|
||||||
myModules.nvidia.enable = true;
|
|
||||||
# Needed for now because monitors have different refresh rates
|
|
||||||
myModules.xmonad.picom.vSync.enable = false;
|
|
||||||
myModules.cache-server = {
|
|
||||||
enable = true;
|
|
||||||
port = 3090;
|
|
||||||
};
|
|
||||||
myModules.gitea-runner.enable = true;
|
|
||||||
myModules.postgres.enable = true;
|
|
||||||
myModules.railbird-k3s = {
|
|
||||||
enable = true;
|
|
||||||
# extraFlags = ["--node-taint preferNoSchedule=true:NoSchedule"];
|
|
||||||
};
|
|
||||||
|
|
||||||
boot.loader.systemd-boot.configurationLimit = 5;
|
|
||||||
|
|
||||||
networking.hostName = "ryzen-shine";
|
|
||||||
myModules.hostIdentity = {
|
|
||||||
emoticon = "☀️";
|
|
||||||
tmux.background = "#ea580c";
|
|
||||||
};
|
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
perf
|
|
||||||
];
|
|
||||||
|
|
||||||
boot.initrd.systemd.enable = true;
|
|
||||||
boot.plymouth = {
|
|
||||||
enable = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
hardware.enableRedistributableFirmware = true;
|
|
||||||
|
|
||||||
networking.interfaces.enp5s0.useDHCP = true;
|
|
||||||
networking.interfaces.wlp4s0.useDHCP = true;
|
|
||||||
|
|
||||||
boot.loader.systemd-boot.enable = true;
|
|
||||||
boot.loader.efi.canTouchEfiVariables = true;
|
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod"];
|
|
||||||
boot.initrd.luks.devices."cryptroot".device = "/dev/nvme0n1p5";
|
|
||||||
boot.initrd.kernelModules = ["dm-snapshot"];
|
|
||||||
|
|
||||||
# install nvidia drivers in addition to intel one
|
|
||||||
hardware.graphics.extraPackages = [pkgs.linuxPackages.nvidia_x11.out];
|
|
||||||
hardware.graphics.extraPackages32 = [pkgs.linuxPackages.nvidia_x11.lib32];
|
|
||||||
services.xserver = {
|
|
||||||
videoDrivers = ["nvidia"];
|
|
||||||
};
|
|
||||||
|
|
||||||
hardware.nvidia.modesetting.enable = true;
|
|
||||||
|
|
||||||
hardware.graphics.enable32Bit = true;
|
|
||||||
|
|
||||||
boot.kernelModules = ["kvm-amd"];
|
|
||||||
boot.extraModulePackages = [];
|
|
||||||
|
|
||||||
fileSystems."/" = {
|
|
||||||
device = "/dev/disk/by-uuid/356173ab-d076-43e0-aeb6-6a6829c4402b";
|
|
||||||
fsType = "ext4";
|
|
||||||
};
|
|
||||||
|
|
||||||
fileSystems."/boot" = {
|
|
||||||
device = "/dev/disk/by-uuid/B270-C7E6";
|
|
||||||
fsType = "vfat";
|
|
||||||
};
|
|
||||||
|
|
||||||
fileSystems."/shared" = {
|
|
||||||
device = "/dev/disk/by-uuid/D4009CE8009CD33A";
|
|
||||||
fsType = "ntfs";
|
|
||||||
options = ["nofail" "uid=0" "gid=users" "umask=002"];
|
|
||||||
};
|
|
||||||
|
|
||||||
swapDevices = [
|
|
||||||
{device = "/dev/disk/by-uuid/f719b44e-295a-4909-9a60-84f87acb7f77";}
|
|
||||||
];
|
|
||||||
|
|
||||||
# nix.settings.maxJobs = lib.mkDefault 16;
|
|
||||||
# High-DPI console
|
|
||||||
console.font = lib.mkDefault "${pkgs.terminus_font}/share/consolefonts/ter-u28n.psf.gz";
|
|
||||||
|
|
||||||
# services.xrdp.enable = true;
|
|
||||||
# services.xrdp.defaultWindowManager = "startplasma-x11";
|
|
||||||
# services.xrdp.openFirewall = true;
|
|
||||||
|
|
||||||
system.stateVersion = "20.03";
|
|
||||||
home-manager.sharedModules = [
|
|
||||||
{
|
|
||||||
home.stateVersion = "21.05";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
# users.extraUsers.dean.home = "/shared/dean";
|
|
||||||
}
|
|
||||||
@@ -1,9 +1,11 @@
|
|||||||
{
|
{
|
||||||
|
inputs,
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
imports = [
|
imports = [
|
||||||
|
inputs.grub2-themes.nixosModules.default
|
||||||
../configuration.nix
|
../configuration.nix
|
||||||
../nixified.ai.nix
|
../nixified.ai.nix
|
||||||
];
|
];
|
||||||
@@ -18,7 +20,7 @@
|
|||||||
enable = true;
|
enable = true;
|
||||||
port = 3090;
|
port = 3090;
|
||||||
};
|
};
|
||||||
myModules.gitea-runner.enable = true;
|
myModules.gitea-runner.enable = false;
|
||||||
myModules.postgres.enable = true;
|
myModules.postgres.enable = true;
|
||||||
myModules.tts.enable = true;
|
myModules.tts.enable = true;
|
||||||
myModules.cua = {
|
myModules.cua = {
|
||||||
@@ -41,15 +43,22 @@
|
|||||||
|
|
||||||
boot.loader.systemd-boot.configurationLimit = 5;
|
boot.loader.systemd-boot.configurationLimit = 5;
|
||||||
myModules.bootloaders.systemdBoot.enable = false;
|
myModules.bootloaders.systemdBoot.enable = false;
|
||||||
myModules.bootloaders.grubWindows = {
|
myModules.bootloaders.grub = {
|
||||||
enable = true;
|
enable = true;
|
||||||
windowsEfiUuid = "B270-C7E6";
|
windowsEfiUuid = "B270-C7E6";
|
||||||
|
gfxmode = "3440x1440,auto";
|
||||||
|
};
|
||||||
|
boot.loader.grub2-theme = {
|
||||||
|
enable = true;
|
||||||
|
theme = "whitesur";
|
||||||
|
icon = "whitesur";
|
||||||
|
screen = "ultrawide2k";
|
||||||
};
|
};
|
||||||
|
|
||||||
networking.hostName = "ryzen-shine";
|
networking.hostName = "ryzen-shine";
|
||||||
myModules.hostIdentity = {
|
myModules.hostIdentity = {
|
||||||
emoticon = "☀️";
|
emoticon = "☀️";
|
||||||
tmux.background = "#ea580c";
|
tmux.background = "#2563eb";
|
||||||
};
|
};
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
}: {
|
}: {
|
||||||
imports = [
|
imports = [
|
||||||
../configuration.nix
|
../configuration.nix
|
||||||
|
inputs.grub2-themes.nixosModules.default
|
||||||
inputs.nixos-hardware.nixosModules.asus-rog-strix-g834jzr
|
inputs.nixos-hardware.nixosModules.asus-rog-strix-g834jzr
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -30,7 +31,19 @@
|
|||||||
|
|
||||||
# nixpkgs.config.cudaSupport = true;
|
# nixpkgs.config.cudaSupport = true;
|
||||||
|
|
||||||
boot.loader.systemd-boot.configurationLimit = 5;
|
myModules.bootloaders.systemdBoot.enable = false;
|
||||||
|
myModules.bootloaders.grub = {
|
||||||
|
enable = true;
|
||||||
|
configurationLimit = 5;
|
||||||
|
gfxmode = "2560x1600,auto";
|
||||||
|
};
|
||||||
|
boot.loader.grub2-theme = {
|
||||||
|
enable = true;
|
||||||
|
theme = "whitesur";
|
||||||
|
icon = "whitesur";
|
||||||
|
screen = "2k";
|
||||||
|
customResolution = "2560x1600";
|
||||||
|
};
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
android-studio
|
android-studio
|
||||||
@@ -73,9 +86,6 @@
|
|||||||
# PRIME sync hybrid mode to keep the compositor and displays on NVIDIA.
|
# PRIME sync hybrid mode to keep the compositor and displays on NVIDIA.
|
||||||
hardware.nvidia.prime.offload.enable = lib.mkForce false;
|
hardware.nvidia.prime.offload.enable = lib.mkForce false;
|
||||||
hardware.nvidia.prime.sync.enable = lib.mkForce false;
|
hardware.nvidia.prime.sync.enable = lib.mkForce false;
|
||||||
boot.loader.systemd-boot.enable = true;
|
|
||||||
boot.loader.efi.canTouchEfiVariables = true;
|
|
||||||
|
|
||||||
services.asusd.enable = true;
|
services.asusd.enable = true;
|
||||||
services.supergfxd.settings = {
|
services.supergfxd.settings = {
|
||||||
mode = "AsusMuxDgpu";
|
mode = "AsusMuxDgpu";
|
||||||
@@ -104,7 +114,7 @@
|
|||||||
networking.hostName = "strixi-minaj";
|
networking.hostName = "strixi-minaj";
|
||||||
myModules.hostIdentity = {
|
myModules.hostIdentity = {
|
||||||
emoticon = "👩🏿";
|
emoticon = "👩🏿";
|
||||||
tmux.background = "#4f46e5";
|
tmux.background = "#ea580c";
|
||||||
};
|
};
|
||||||
|
|
||||||
powerManagement.cpuFreqGovernor = lib.mkDefault "performance";
|
powerManagement.cpuFreqGovernor = lib.mkDefault "performance";
|
||||||
|
|||||||
@@ -70,6 +70,7 @@
|
|||||||
"https://nix-community.cachix.org"
|
"https://nix-community.cachix.org"
|
||||||
"https://numtide.cachix.org"
|
"https://numtide.cachix.org"
|
||||||
"https://colonelpanic8-dotfiles.cachix.org"
|
"https://colonelpanic8-dotfiles.cachix.org"
|
||||||
|
"https://taffybar.cachix.org"
|
||||||
"https://codex-cli.cachix.org"
|
"https://codex-cli.cachix.org"
|
||||||
"https://claude-code.cachix.org"
|
"https://claude-code.cachix.org"
|
||||||
];
|
];
|
||||||
@@ -81,6 +82,7 @@
|
|||||||
"https://nix-community.cachix.org"
|
"https://nix-community.cachix.org"
|
||||||
"https://numtide.cachix.org"
|
"https://numtide.cachix.org"
|
||||||
"https://colonelpanic8-dotfiles.cachix.org"
|
"https://colonelpanic8-dotfiles.cachix.org"
|
||||||
|
"https://taffybar.cachix.org"
|
||||||
"https://codex-cli.cachix.org"
|
"https://codex-cli.cachix.org"
|
||||||
"https://claude-code.cachix.org"
|
"https://claude-code.cachix.org"
|
||||||
];
|
];
|
||||||
@@ -91,6 +93,7 @@
|
|||||||
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
|
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
|
||||||
"numtide.cachix.org-1:2ps1kLBUWjxIneOy1Ik6cQjb41X0iXVXeHigGmycPPE="
|
"numtide.cachix.org-1:2ps1kLBUWjxIneOy1Ik6cQjb41X0iXVXeHigGmycPPE="
|
||||||
"colonelpanic8-dotfiles.cachix.org-1:O6GF3nptpeMFapX29okzO92eSWXR36zqW6ZF2C8P0eQ="
|
"colonelpanic8-dotfiles.cachix.org-1:O6GF3nptpeMFapX29okzO92eSWXR36zqW6ZF2C8P0eQ="
|
||||||
|
"taffybar.cachix.org-1:beZotJ1nVEsAnJxa3lWn0zwzZM7oeXmGh4ADRpHeeIo="
|
||||||
"codex-cli.cachix.org-1:1Br3H1hHoRYG22n//cGKJOk3cQXgYobUel6O8DgSing="
|
"codex-cli.cachix.org-1:1Br3H1hHoRYG22n//cGKJOk3cQXgYobUel6O8DgSing="
|
||||||
"claude-code.cachix.org-1:YeXf2aNu7UTX8Vwrze0za1WEDS+4DuI2kVeWEE4fsRk="
|
"claude-code.cachix.org-1:YeXf2aNu7UTX8Vwrze0za1WEDS+4DuI2kVeWEE4fsRk="
|
||||||
];
|
];
|
||||||
@@ -113,6 +116,7 @@
|
|||||||
codex = inputs.codex-cli-nix.packages.${prev.stdenv.hostPlatform.system}.default;
|
codex = inputs.codex-cli-nix.packages.${prev.stdenv.hostPlatform.system}.default;
|
||||||
claude-code = inputs.claude-code-nix.packages.${prev.stdenv.hostPlatform.system}.default;
|
claude-code = inputs.claude-code-nix.packages.${prev.stdenv.hostPlatform.system}.default;
|
||||||
git-sync-rs = inputs.git-sync-rs.packages.${prev.stdenv.hostPlatform.system}.default;
|
git-sync-rs = inputs.git-sync-rs.packages.${prev.stdenv.hostPlatform.system}.default;
|
||||||
|
elegant-grub2-theme = final.callPackage ./packages/elegant-grub2-theme {};
|
||||||
kef = final.callPackage ./packages/kef {};
|
kef = final.callPackage ./packages/kef {};
|
||||||
pykefcontrol = final.python3Packages.callPackage ./packages/pykefcontrol {};
|
pykefcontrol = final.python3Packages.callPackage ./packages/pykefcontrol {};
|
||||||
roborock-control = final.callPackage ./packages/roborock-control {};
|
roborock-control = final.callPackage ./packages/roborock-control {};
|
||||||
|
|||||||
86
nixos/packages/elegant-grub2-theme/default.nix
Normal file
86
nixos/packages/elegant-grub2-theme/default.nix
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
{
|
||||||
|
fetchFromGitHub,
|
||||||
|
imagemagick,
|
||||||
|
lib,
|
||||||
|
stdenvNoCC,
|
||||||
|
theme ? "wave",
|
||||||
|
style ? "window",
|
||||||
|
side ? "left",
|
||||||
|
color ? "dark",
|
||||||
|
screenVariant ? "1080p",
|
||||||
|
width ? null,
|
||||||
|
height ? null,
|
||||||
|
}: let
|
||||||
|
customResolution = width != null && height != null;
|
||||||
|
fontSizes = {
|
||||||
|
"1080p" = "16";
|
||||||
|
"2k" = "24";
|
||||||
|
"4k" = "32";
|
||||||
|
};
|
||||||
|
fontSize = builtins.getAttr screenVariant fontSizes;
|
||||||
|
themeName =
|
||||||
|
"Elegant-${theme}-${style}-${side}-${color}"
|
||||||
|
+ lib.optionalString customResolution "-${width}x${height}";
|
||||||
|
in
|
||||||
|
stdenvNoCC.mkDerivation {
|
||||||
|
pname = "elegant-grub2-theme";
|
||||||
|
version = "2025-03-25";
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "vinceliuice";
|
||||||
|
repo = "Elegant-grub2-themes";
|
||||||
|
rev = "2025-03-25";
|
||||||
|
hash = "sha256-M9k6R/rUvEpBTSnZ2PMv5piV50rGTBrcmPU4gsS7Byg=";
|
||||||
|
};
|
||||||
|
|
||||||
|
nativeBuildInputs = lib.optional customResolution imagemagick;
|
||||||
|
|
||||||
|
installPhase =
|
||||||
|
''
|
||||||
|
runHook preInstall
|
||||||
|
|
||||||
|
theme_dir="$out/share/grub/themes/${themeName}"
|
||||||
|
mkdir -p "$theme_dir"
|
||||||
|
|
||||||
|
cp -a common/terminus*.pf2 "$theme_dir"/
|
||||||
|
cp -a common/unifont-${fontSize}.pf2 "$theme_dir"/
|
||||||
|
cp -a assets/assets-icons-${color}/icons-${color}-${screenVariant} "$theme_dir/icons"
|
||||||
|
cp -a config/theme-${style}-${side}-${color}-${screenVariant}.txt "$theme_dir/theme.txt"
|
||||||
|
cp -a assets/assets-other/other-${screenVariant}/select_e-${theme}-${color}.png "$theme_dir/select_e.png"
|
||||||
|
cp -a assets/assets-other/other-${screenVariant}/select_c-${theme}-${color}.png "$theme_dir/select_c.png"
|
||||||
|
cp -a assets/assets-other/other-${screenVariant}/select_w-${theme}-${color}.png "$theme_dir/select_w.png"
|
||||||
|
cp -a assets/assets-other/other-${screenVariant}/Default.png "$theme_dir/logo.png"
|
||||||
|
''
|
||||||
|
+ lib.optionalString customResolution ''
|
||||||
|
magick backgrounds/backgrounds-${theme}/background-${theme}-${style}-${side}-${color}.jpg \
|
||||||
|
-resize ${width}x${height}^ \
|
||||||
|
-gravity center \
|
||||||
|
-extent ${width}x${height} \
|
||||||
|
"$theme_dir/background.jpg"
|
||||||
|
magick assets/assets-other/other-${screenVariant}/${style}-${side}.png \
|
||||||
|
-resize x${height} \
|
||||||
|
-background none \
|
||||||
|
-gravity west \
|
||||||
|
-extent ${width}x${height} \
|
||||||
|
"$theme_dir/info.png"
|
||||||
|
''
|
||||||
|
+ lib.optionalString (!customResolution) ''
|
||||||
|
cp -a backgrounds/backgrounds-${theme}/background-${theme}-${style}-${side}-${color}.jpg "$theme_dir/background.jpg"
|
||||||
|
cp -a assets/assets-other/other-${screenVariant}/${style}-${side}.png "$theme_dir/info.png"
|
||||||
|
''
|
||||||
|
+ ''
|
||||||
|
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
|
||||||
|
passthru = {
|
||||||
|
inherit themeName;
|
||||||
|
};
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
description = "Elegant wave GRUB2 theme";
|
||||||
|
homepage = "https://github.com/vinceliuice/Elegant-grub2-themes";
|
||||||
|
license = lib.licenses.gpl3Only;
|
||||||
|
maintainers = [];
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -16,7 +16,7 @@ makeEnable config "myModules.raspberry-pi" false {
|
|||||||
hardware.raspberry-pi."4".fkms-3d.enable = true;
|
hardware.raspberry-pi."4".fkms-3d.enable = true;
|
||||||
# hardware.raspberry-pi."4".audio.enable = true;
|
# hardware.raspberry-pi."4".audio.enable = true;
|
||||||
myModules.bootloaders.systemdBoot.enable = false;
|
myModules.bootloaders.systemdBoot.enable = false;
|
||||||
myModules.bootloaders.grubWindows.enable = false;
|
myModules.bootloaders.grub.enable = false;
|
||||||
|
|
||||||
boot = {
|
boot = {
|
||||||
initrd.systemd.tpm2.enable = false;
|
initrd.systemd.tpm2.enable = false;
|
||||||
|
|||||||
0
nixos/sqlite3
Normal file
0
nixos/sqlite3
Normal file
@@ -13,7 +13,7 @@ makeEnable config "myModules.wsl" false {
|
|||||||
myModules.base.enable = false;
|
myModules.base.enable = false;
|
||||||
myModules.desktop.enable = false;
|
myModules.desktop.enable = false;
|
||||||
myModules.bootloaders.systemdBoot.enable = false;
|
myModules.bootloaders.systemdBoot.enable = false;
|
||||||
myModules.bootloaders.grubWindows.enable = false;
|
myModules.bootloaders.grub.enable = false;
|
||||||
myModules.xmonad.enable = false;
|
myModules.xmonad.enable = false;
|
||||||
myModules.plasma.enable = false;
|
myModules.plasma.enable = false;
|
||||||
# Tailscale-in-WSL is usually better handled by the Windows host Tailscale
|
# Tailscale-in-WSL is usually better handled by the Windows host Tailscale
|
||||||
|
|||||||
Reference in New Issue
Block a user