Merge branch 'main' into containers

This commit is contained in:
KoenDR06 2026-01-19 22:15:42 +01:00
commit 047940d0db
32 changed files with 1408 additions and 3212 deletions

View file

@ -0,0 +1,42 @@
{
lib,
config,
...
}: let
inherit (lib) mkIf mkEnableOption catppuccin;
cfg = config.horseman.dots.fuzzel;
username = config.horseman.username;
colors = config.horseman.catppuccin.colors;
in {
options = {
horseman.dots.fuzzel = {
enable = mkEnableOption "~/.config/fuzzel/fuzzel.ini";
};
};
config = mkIf cfg.enable {
home-manager.users.${username}.xdg.configFile."fuzzel/fuzzel.ini".text = ''
[colors]
background=${catppuccin.toHexNoHash colors.base}dd
text=${catppuccin.toHexNoHash colors.text}ff
prompt=${catppuccin.toHexNoHash colors.accent}ff
placeholder=${catppuccin.toHexNoHash colors.overlay1}ff
input=${catppuccin.toHexNoHash colors.text}ff
match=${catppuccin.toHexNoHash colors.accent}ff
selection=${catppuccin.toHexNoHash colors.surface2}ff
selection-text=${catppuccin.toHexNoHash colors.text}ff
selection-match=${catppuccin.toHexNoHash colors.accent}ff
counter=${catppuccin.toHexNoHash colors.overlay1}ff
border=${catppuccin.toHexNoHash colors.accent}ff
[main]
font=CaskaydiaCoveNerdFont:weight=semilight
terminal=kitty
[border]
width=2
selection-radius=3
'';
};
}

View file

@ -1,35 +0,0 @@
{
lib,
config,
...
}: let
inherit (lib) mkIf mkEnableOption;
inherit (builtins) concatStringsSep;
cfg = config.horseman.dots.hypr.hypridle;
username = config.horseman.username;
hypr = config.horseman.wm.hyprland.config;
in {
options = {
horseman.dots.hypr.hypridle = {
enable = mkEnableOption "~/.config/hypr/hypridle.conf";
};
};
config = mkIf cfg.enable {
home-manager.users.${username}.xdg.configFile."hypr/hypridle.conf".text = ''
general {
lock_cmd = ${hypr.sleep.lockCommand}
}
${concatStringsSep "\n\n" (map (lis: ''
listener {
timeout = ${toString lis.timeout}
on-timeout = ${lis.onTimeout}
on-resume = ${lis.onResume}
}
'')
hypr.sleep.listeners)}
'';
};
}

View file

@ -1,387 +0,0 @@
{
lib,
config,
...
}: let
inherit (lib) mkIf trivial strings mkEnableOption;
inherit (builtins) concatStringsSep elem genList elemAt length;
inherit (trivial) boolToString;
inherit (strings) floatToString;
cfg = config.horseman.dots.hypr.hyprland;
username = config.horseman.username;
hypr = config.horseman.wm.hyprland.config;
in {
options = {
horseman.dots.hypr.hyprland = {
enable = mkEnableOption "~/.config/hypr/hyprland.conf";
};
};
config = mkIf cfg.enable {
home-manager.users.${username}.xdg.configFile."hypr/hyprland.conf".text = ''
${concatStringsSep "\n" (map (kb: "bind${concatStringsSep "" kb.flags} = ${concatStringsSep " " kb.mods}, ${kb.key}, ${kb.dispatcher}${
if (elem "m" kb.flags) # Mouse binds take one argument less
then ""
else ", ${kb.params}"
}")
hypr.keybindings.binds)}
${concatStringsSep "\n" (map (gs: toString gs) hypr.gestures.gestures)}
${concatStringsSep "\n\n" (map (sm: ''
bind${concatStringsSep "" sm.enterBind.flags} = ${concatStringsSep " " sm.enterBind.mods}, ${sm.enterBind.key}, submap, ${sm.name}
submap = ${sm.name}
${concatStringsSep "\n" (map (kb: "bind${concatStringsSep "" kb.flags} = ${concatStringsSep " " kb.mods}, ${kb.key}, ${kb.dispatcher}${
if (elem "m" kb.flags) # Mouse binds take one argument less
then ""
else ", ${kb.params}"
}")
sm.binds)}
bind${concatStringsSep "" sm.exitBind.flags} = ${concatStringsSep " " sm.exitBind.mods}, ${sm.exitBind.key}, submap, reset
submap = reset
'')
hypr.keybindings.submaps)}
${concatStringsSep "\n" (map (x: "exec-once = " + x) hypr.execOnce)}
${concatStringsSep "\n" (map (x: "env = " + x) hypr.env)}
general {
border_size = ${toString hypr.general.borderSize}
gaps_in = ${toString hypr.general.gapsIn}
gaps_out = ${toString hypr.general.gapsOut}
gaps_workspaces = ${toString hypr.general.gapsWorkspaces}
col.inactive_border = ${hypr.general.col.inactiveBorder}
col.active_border = ${hypr.general.col.activeBorder}
col.nogroup_border = ${hypr.general.col.nogroupBorder}
col.nogroup_border_active = ${hypr.general.col.nogroupBorderActive}
layout = ${hypr.general.layout}
no_focus_fallback = ${boolToString hypr.general.noFocusFallback}
resize_on_border = ${boolToString hypr.general.resizeOnBorder}
extend_border_grab_area = ${toString hypr.general.extendBorderGrabArea}
hover_icon_on_border = ${boolToString hypr.general.hoverIconOnBorder}
allow_tearing = ${boolToString hypr.general.allowTearing}
resize_corner = ${toString hypr.general.resizeCorner}
snap {
enabled = ${boolToString hypr.general.snap.enabled}
window_gap = ${toString hypr.general.snap.windowGap}
monitor_gap = ${toString hypr.general.snap.monitorGap}
border_overlap = ${boolToString hypr.general.snap.borderOverlap}
}
}
decoration {
rounding = ${toString hypr.decoration.rounding}
rounding_power = ${toString hypr.decoration.roundingPower}
active_opacity = ${toString hypr.decoration.activeOpacity}
inactive_opacity = ${toString hypr.decoration.inactiveOpacity}
fullscreen_opacity = ${toString hypr.decoration.fullscreenOpacity}
dim_inactive = ${boolToString hypr.decoration.dimInactive}
dim_strength = ${toString hypr.decoration.dimStrength}
dim_special = ${toString hypr.decoration.dimSpecial}
dim_around = ${toString hypr.decoration.dimAround}
screen_shader = ${toString hypr.decoration.screenShader}
border_part_of_window = ${boolToString hypr.decoration.borderPartOfWindow}
blur {
enabled = ${boolToString hypr.decoration.blur.enabled}
size = ${toString hypr.decoration.blur.size}
passes = ${toString hypr.decoration.blur.passes}
ignore_opacity = ${boolToString hypr.decoration.blur.ignoreOpacity}
new_optimizations = ${boolToString hypr.decoration.blur.newOptimizations}
xray = ${boolToString hypr.decoration.blur.xray}
noise = ${toString hypr.decoration.blur.noise}
contrast = ${toString hypr.decoration.blur.contrast}
brightness = ${toString hypr.decoration.blur.brightness}
vibrancy = ${toString hypr.decoration.blur.vibrancy}
vibrancy_darkness = ${toString hypr.decoration.blur.vibrancyDarkness}
special = ${boolToString hypr.decoration.blur.special}
popups = ${boolToString hypr.decoration.blur.popups}
popups_ignorealpha = ${toString hypr.decoration.blur.popupsIgnorealpha}
input_methods = ${boolToString hypr.decoration.blur.inputMethods}
input_methods_ignorealpha = ${toString hypr.decoration.blur.inputMethodsIgnorealpha}
}
shadow {
enabled = ${boolToString hypr.decoration.shadow.enabled}
range = ${toString hypr.decoration.shadow.range}
render_power = ${toString hypr.decoration.shadow.renderPower}
sharp = ${boolToString hypr.decoration.shadow.sharp}
ignore_window = ${boolToString hypr.decoration.shadow.ignoreWindow}
color = ${toString hypr.decoration.shadow.color}
${
if (hypr.decoration.shadow.colorInactive == null)
then ""
else "color_inactive = ${toString hypr.decoration.shadow.colorInactive}"
}
offset = ${toString hypr.decoration.shadow.offset.x} ${toString hypr.decoration.shadow.offset.y}
scale = ${toString hypr.decoration.shadow.scale}
}
}
animations {
enabled = ${boolToString hypr.animations.enabled}
workspace_wraparound = ${boolToString hypr.animations.workspaceWraparound}
${concatStringsSep "\n " (map (bez: "bezier = ${bez.name}, ${floatToString bez.startX}, ${floatToString bez.startY}, ${floatToString bez.endX}, ${floatToString bez.endY}") hypr.animations.beziers)}
${concatStringsSep "\n " (map (anim: "animation = ${anim.name}, ${toString anim.on}, ${floatToString anim.speed}, ${anim.curve}, ${anim.style}") hypr.animations.animations)}
}
input {
kb_model = ${toString hypr.input.kbModel}
kb_layout = ${toString hypr.input.kbLayout}
kb_variant = ${toString hypr.input.kbVariant}
kb_options = ${toString hypr.input.kbOptions}
kb_rules = ${toString hypr.input.kbRules}
kb_file = ${toString hypr.input.kbFile}
numlock_by_default = ${boolToString hypr.input.numlockByDefault}
resolve_binds_by_sym = ${boolToString hypr.input.resolveBindsBySym}
repeat_rate = ${toString hypr.input.repeatRate}
repeat_delay = ${toString hypr.input.repeatDelay}
sensitivity = ${toString hypr.input.sensitivity}
accel_profile = ${toString hypr.input.accelProfile}
force_no_accel = ${boolToString hypr.input.forceNoAccel}
left_handed = ${boolToString hypr.input.leftHanded}
scroll_points = ${toString hypr.input.scrollPoints}
scroll_method = ${toString hypr.input.scrollMethod}
scroll_button = ${toString hypr.input.scrollButton}
scroll_button_lock = ${boolToString hypr.input.scrollButtonLock}
scroll_factor = ${toString hypr.input.scrollFactor}
natural_scroll = ${boolToString hypr.input.naturalScroll}
follow_mouse = ${toString hypr.input.followMouse}
follow_mouse_threshold = ${toString hypr.input.followMouseThreshold}
focus_on_close = ${toString hypr.input.focusOnClose}
mouse_refocus = ${boolToString hypr.input.mouseRefocus}
float_switch_override_focus = ${toString hypr.input.floatSwitchOverrideFocus}
special_fallthrough = ${boolToString hypr.input.specialFallthrough}
off_window_axis_events = ${toString hypr.input.offWindowAxisEvents}
emulate_discrete_scroll = ${toString hypr.input.emulateDiscreteScroll}
touchpad {
disable_while_typing = ${boolToString hypr.input.touchpad.disableWhileTyping}
natural_scroll = ${boolToString hypr.input.touchpad.naturalScroll}
scroll_factor = ${toString hypr.input.touchpad.scrollFactor}
middle_button_emulation = ${boolToString hypr.input.touchpad.middleButtonEmulation}
tap_button_map = ${toString hypr.input.touchpad.tapButtonMap}
clickfinger_behavior = ${boolToString hypr.input.touchpad.clickfingerBehavior}
tap-to-click = ${boolToString hypr.input.touchpad.tapToClick}
drag_lock = ${toString hypr.input.touchpad.dragLock}
tap-and-drag = ${toString hypr.input.touchpad.tapAndDrag}
flip_x = ${boolToString hypr.input.touchpad.flipX}
flip_y = ${boolToString hypr.input.touchpad.flipY}
}
touchdevice {
transform = ${toString hypr.input.touchdevice.transform}
output = ${toString hypr.input.touchdevice.output}
enabled = ${boolToString hypr.input.touchdevice.enabled}
}
tablet {
transform = ${toString hypr.input.tablet.transform}
output = ${toString hypr.input.tablet.output}
region_position = ${toString hypr.input.tablet.regionPosition.x} ${toString hypr.input.tablet.regionPosition.y}
absolute_region_position = ${boolToString hypr.input.tablet.absoluteRegionPosition}
region_size = ${toString hypr.input.tablet.regionSize.x} ${toString hypr.input.tablet.regionSize.y}
relative_input = ${boolToString hypr.input.tablet.relativeInput}
left_handed = ${boolToString hypr.input.tablet.leftHanded}
active_area_size = ${toString hypr.input.tablet.activeAreaSize.x} ${toString hypr.input.tablet.activeAreaSize.y}
active_area_position = ${toString hypr.input.tablet.activeAreaPosition.x} ${toString hypr.input.tablet.activeAreaPosition.y}
}
}
gestures {
workspace_swipe_distance = ${toString hypr.gestures.workspaceSwipeDistance}
workspace_swipe_touch = ${boolToString hypr.gestures.workspaceSwipeTouch}
workspace_swipe_invert = ${boolToString hypr.gestures.workspaceSwipeInvert}
workspace_swipe_touch_invert = ${boolToString hypr.gestures.workspaceSwipeTouchInvert}
workspace_swipe_min_speed_to_force = ${toString hypr.gestures.workspaceSwipeMinSpeedToForce}
workspace_swipe_cancel_ratio = ${floatToString hypr.gestures.workspaceSwipeCancelRatio}
workspace_swipe_create_new = ${boolToString hypr.gestures.workspaceSwipeCreateNew}
workspace_swipe_direction_lock = ${boolToString hypr.gestures.workspaceSwipeDirectionLock}
workspace_swipe_direction_lock_threshold = ${toString hypr.gestures.workspaceSwipeDirectionLockThreshold}
workspace_swipe_forever = ${boolToString hypr.gestures.workspaceSwipeForever}
workspace_swipe_use_r = ${boolToString hypr.gestures.workspaceSwipeUseR}
}
group {
auto_group = ${boolToString hypr.group.autoGroup}
insert_after_current = ${boolToString hypr.group.insertAfterCurrent}
focus_removed_window = ${boolToString hypr.group.focusRemovedWindow}
drag_into_group = ${toString hypr.group.dragIntoGroup}
merge_groups_on_drag = ${boolToString hypr.group.mergeGroupsOnDrag}
merge_groups_on_groupbar = ${boolToString hypr.group.mergeGroupsOnGroupbar}
merge_floated_into_tiled_on_groupbar = ${boolToString hypr.group.mergeFloatedIntoTiledOnGroupbar}
group_on_movetoworkspace = ${boolToString hypr.group.groupOnMovetoworkspace}
col.border_active = ${toString hypr.group.col.borderActive}
col.border_inactive = ${toString hypr.group.col.borderInactive}
col.border_locked_active = ${toString hypr.group.col.borderLockedActive}
col.border_locked_inactive = ${toString hypr.group.col.borderLockedInactive}
groupbar {
enabled = ${boolToString hypr.group.groupbar.enabled}
font_family = ${toString hypr.group.groupbar.fontFamily}
font_size = ${toString hypr.group.groupbar.fontSize}
font_weight_active = ${toString hypr.group.groupbar.fontWeightActive}
font_weight_inactive = ${toString hypr.group.groupbar.fontWeightInactive}
gradients = ${boolToString hypr.group.groupbar.gradients}
height = ${toString hypr.group.groupbar.height}
indicator_gap = ${toString hypr.group.groupbar.indicatorGap}
indicator_height = ${toString hypr.group.groupbar.indicatorHeight}
stacked = ${boolToString hypr.group.groupbar.stacked}
priority = ${toString hypr.group.groupbar.priority}
render_titles = ${boolToString hypr.group.groupbar.renderTitles}
text_offset = ${toString hypr.group.groupbar.textOffset}
scrolling = ${boolToString hypr.group.groupbar.scrolling}
rounding = ${toString hypr.group.groupbar.rounding}
gradient_rounding = ${toString hypr.group.groupbar.gradientRounding}
round_only_edges = ${boolToString hypr.group.groupbar.roundOnlyEdges}
gradient_round_only_edges = ${boolToString hypr.group.groupbar.gradientRoundOnlyEdges}
text_color = ${toString hypr.group.groupbar.textColor}
col.active = ${toString hypr.group.groupbar.col.active}
col.inactive = ${toString hypr.group.groupbar.col.inactive}
col.locked_active = ${toString hypr.group.groupbar.col.lockedActive}
col.locked_inactive = ${toString hypr.group.groupbar.col.lockedInactive}
gaps_in = ${toString hypr.group.groupbar.gapsIn}
gaps_out = ${toString hypr.group.groupbar.gapsOut}
keep_upper_gap = ${boolToString hypr.group.groupbar.keepUpperGap}
}
}
misc {
disable_hyprland_logo = ${boolToString hypr.misc.disableHyprlandLogo}
disable_splash_rendering = ${boolToString hypr.misc.disableSplashRendering}
col.splash = ${toString hypr.misc.col.splash}
font_family = ${toString hypr.misc.fontFamily}
splash_font_family = ${toString hypr.misc.splashFontFamily}
force_default_wallpaper = ${toString hypr.misc.forceDefaultWallpaper}
vfr = ${toString hypr.misc.vfr}
vrr = ${toString hypr.misc.vrr}
mouse_move_enables_dpms = ${boolToString hypr.misc.mouseMoveEnablesDPMS}
key_press_enables_dpms = ${boolToString hypr.misc.keyPressEnablesDPMS}
always_follow_on_dnd = ${boolToString hypr.misc.alwaysFollowOnDnd}
layers_hog_keyboard_focus = ${boolToString hypr.misc.layersHogKeyboardFocus}
animate_manual_resizes = ${boolToString hypr.misc.animateManualResizes}
animate_mouse_windowdragging = ${boolToString hypr.misc.animateMouseWindowdragging}
disable_autoreload = ${boolToString hypr.misc.disableAutoreload}
enable_swallow = ${boolToString hypr.misc.enableSwallow}
swallow_regex = ${toString hypr.misc.swallowRegex}
swallow_exception_regex = ${toString hypr.misc.swallowExceptionRegex}
focus_on_activate = ${boolToString hypr.misc.focusOnActivate}
mouse_move_focuses_monitor = ${boolToString hypr.misc.mouseMoveFocusesMonitor}
allow_session_lock_restore = ${boolToString hypr.misc.allowSessionLockRestore}
background_color = ${toString hypr.misc.backgroundColor}
close_special_on_empty = ${boolToString hypr.misc.closeSpecialOnEmpty}
new_window_takes_over_fullscreen = ${toString hypr.misc.newWindowTakesOverFullscreen}
exit_window_retains_fullscreen = ${boolToString hypr.misc.exitWindowRetainsFullscreen}
initial_workspace_tracking = ${toString hypr.misc.initialWorkspaceTracking}
middle_click_paste = ${boolToString hypr.misc.middleClickPaste}
render_unfocused_fps = ${toString hypr.misc.renderUnfocusedFps}
disable_xdg_env_checks = ${boolToString hypr.misc.disableXdgEnvChecks}
disable_hyprland_guiutils_check = ${boolToString hypr.misc.disableHyprlandGuiUtilsCheck}
lockdead_screen_delay = ${toString hypr.misc.lockdeadScreenDelay}
enable_anr_dialog = ${boolToString hypr.misc.enableAnrDialog}
anr_missed_pings = ${toString hypr.misc.anrMissedPings}
}
binds {
pass_mouse_when_bound = ${boolToString hypr.binds.passMouseWhenBound}
scroll_event_delay = ${toString hypr.binds.scrollEventDelay}
workspace_back_and_forth = ${boolToString hypr.binds.workspaceBackAndForth}
hide_special_on_workspace_change = ${boolToString hypr.binds.hideSpecialOnWorkspaceChange}
allow_workspace_cycles = ${boolToString hypr.binds.allowWorkspaceCycles}
workspace_center_on = ${toString hypr.binds.workspaceCenterOn}
focus_preferred_method = ${toString hypr.binds.focusPreferredMethod}
ignore_group_lock = ${boolToString hypr.binds.ignoreGroupLock}
movefocus_cycles_fullscreen = ${boolToString hypr.binds.movefocusCyclesFullscreen}
movefocus_cycles_groupfirst = ${boolToString hypr.binds.movefocusCyclesGroupfirst}
disable_keybind_grabbing = ${boolToString hypr.binds.disableKeybindGrabbing}
window_direction_monitor_fallback = ${boolToString hypr.binds.windowDirectionMonitorFallback}
allow_pin_fullscreen = ${boolToString hypr.binds.allowPinFullscreen}
drag_threshold = ${toString hypr.binds.dragThreshold}
}
xwayland {
enabled = ${boolToString hypr.xwayland.enabled}
use_nearest_neighbor = ${boolToString hypr.xwayland.useNearestNeighbor}
force_zero_scaling = ${boolToString hypr.xwayland.forceZeroScaling}
create_abstract_socket = ${boolToString hypr.xwayland.createAbstractSocket}
}
opengl {
nvidia_anti_flicker = ${boolToString hypr.opengl.nvidiaAntiFlicker}
}
render {
direct_scanout = ${toString hypr.render.directScanout}
expand_undersized_textures = ${boolToString hypr.render.expandUndersizedTextures}
xp_mode = ${boolToString hypr.render.xpMode}
ctm_animation = ${toString hypr.render.ctmAnimation}
cm_fs_passthrough = ${toString hypr.render.cmFsPassthrough}
cm_enabled = ${boolToString hypr.render.cmEnabled}
send_content_type = ${boolToString hypr.render.sendContentType}
}
cursor {
sync_gsettings_theme = ${boolToString hypr.cursor.syncGsettingsTheme}
no_hardware_cursors = ${toString hypr.cursor.noHardwareCursors}
no_break_fs_vrr = ${toString hypr.cursor.noBreakFsVrr}
min_refresh_rate = ${toString hypr.cursor.minRefreshRate}
hotspot_padding = ${toString hypr.cursor.hotspotPadding}
inactive_timeout = ${toString hypr.cursor.inactiveTimeout}
no_warps = ${boolToString hypr.cursor.noWarps}
persistent_warps = ${boolToString hypr.cursor.persistentWarps}
warp_on_change_workspace = ${toString hypr.cursor.warpOnChangeWorkspace}
warp_on_toggle_special = ${toString hypr.cursor.warpOnToggleSpecial}
default_monitor = ${toString hypr.cursor.defaultMonitor}
zoom_factor = ${toString hypr.cursor.zoomFactor}
zoom_rigid = ${boolToString hypr.cursor.zoomRigid}
enable_hyprcursor = ${boolToString hypr.cursor.enableHyprcursor}
hide_on_key_press = ${boolToString hypr.cursor.hideOnKeyPress}
hide_on_touch = ${boolToString hypr.cursor.hideOnTouch}
use_cpu_buffer = ${toString hypr.cursor.useCpuBuffer}
warp_back_after_non_mouse_input = ${boolToString hypr.cursor.warpBackAfterNonMouseInput}
}
ecosystem {
no_update_news = ${boolToString hypr.ecosystem.noUpdateNews}
no_donation_nag = ${boolToString hypr.ecosystem.noDonationNag}
enforce_permissions = ${boolToString hypr.ecosystem.enforcePermissions}
}
dwindle {
pseudotile = ${boolToString hypr.dwindle.pseudotile}
preserve_split = ${boolToString hypr.dwindle.preserveSplit}
}
master {
new_status = ${toString hypr.master.newStatus}
}
${concatStringsSep "\n" (map (mon: "monitor = ${mon.output}, ${mon.resolution}@${mon.refreshRate}, ${toString mon.x}x${toString mon.y}, ${floatToString mon.scale}, transform, ${toString mon.transform}") hypr.monitors.displays)}
${
if hypr.monitors.defaultMonitor
then "monitor = ,preferred, auto, auto"
else ""
}
${concatStringsSep "\n" (map (wr: "windowrule = " + wr) hypr.windowrules)}
${concatStringsSep "\n" (map (ws: "workspace = " + ws) hypr.workspaces)}
${
concatStringsSep "\n" (
if hypr.monitors.bindWorkspaces == "interlaced"
then (map (x: "workspace = ${toString (x + 1)}, persistent:true, monitor:${(elemAt hypr.monitors.displays (x - ((length hypr.monitors.displays) * (x / (length hypr.monitors.displays))))).output}") (genList (x: x) 10))
else []
)
}
'';
};
}

View file

@ -1,76 +0,0 @@
{
lib,
config,
...
}: let
inherit (lib) mkIf mkEnableOption;
cfg = config.horseman.dots.hypr.hyprlock;
username = config.horseman.username;
in {
options = {
horseman.dots.hypr.hyprlock = {
enable = mkEnableOption "~/.config/hypr/hyprlock.conf";
};
};
config = mkIf cfg.enable {
home-manager.users.${username}.xdg.configFile."hypr/hyprlock.conf".text = ''
$font = Monospace
general {
hide_cursor = false
}
animations {
enabled = true
bezier = linear, 1, 1, 0, 0
animation = fadeIn, 1, 5, linear
animation = fadeOut, 1, 5, linear
animation = inputFieldDots, 1, 2, linear
}
background {
monitor =
path = screenshot
blur_passes = 3
}
input-field {
monitor =
size = 20%, 5%
outline_thickness = 3
inner_color = rgba(0, 0, 0, 0.0) # no fill
outer_color = rgba(33ccffee) rgba(00ff99ee) 45deg
check_color = rgba(00ff99ee) rgba(ff6633ee) 120deg
fail_color = rgba(ff6633ee) rgba(ff0066ee) 40deg
font_color = rgb(143, 143, 143)
fade_on_empty = false
rounding = 15
font_family = $font
placeholder_text = Input password...
fail_text = $PAMFAIL
dots_spacing = 0.3
position = 0, -20
halign = center
valign = center
}
label {
monitor =
text = $TIME
font_size = 90
font_family = $font
position = 0, -50
halign = center
valign = top
}
'';
};
}

View file

@ -1,34 +0,0 @@
{
lib,
config,
...
}: let
inherit (lib) mkIf mkEnableOption;
inherit (builtins) concatStringsSep;
cfg = config.horseman.dots.hypr.hyprpaper;
username = config.horseman.username;
hypr = config.horseman.wm.hyprland.config;
in {
options = {
horseman.dots.hypr.hyprpaper = {
enable = mkEnableOption "~/.config/hypr/hyprpaper.conf";
};
};
config = mkIf cfg.enable {
home-manager.users.${username}.xdg.configFile."hypr/hyprpaper.conf".text = ''
${concatStringsSep "\n" (map (dis:
if dis.wallpaper != null
then ''
preload = ${dis.wallpaper}
wallpaper = ${dis.output}, ${dis.wallpaper}
''
else "")
hypr.monitors.displays)}
preload = /home/${username}/nix-config/misc/wallpaper.jpg
wallpaper = , /home/${username}/nix-config/misc/wallpaper.jpg
'';
};
}

View file

@ -3,7 +3,7 @@
config, config,
... ...
}: let }: let
inherit (lib) mkIf mkEnableOption mkOption types; inherit (lib) mkIf mkEnableOption mkOption types catppuccin;
cfg = config.horseman.dots.kitty; cfg = config.horseman.dots.kitty;
username = config.horseman.username; username = config.horseman.username;
colors = config.horseman.catppuccin.colors; colors = config.horseman.catppuccin.colors;
@ -33,75 +33,75 @@ in {
font_size ${toString cfg.fontSize} font_size ${toString cfg.fontSize}
# The basic colors # The basic colors
foreground ${colors.text} foreground ${catppuccin.toHex colors.text}
background ${colors.base} background ${catppuccin.toHex colors.base}
selection_foreground ${colors.base} selection_foreground ${catppuccin.toHex colors.base}
selection_background ${colors.rosewater} selection_background ${catppuccin.toHex colors.rosewater}
# Cursor colors # Cursor colors
cursor ${colors.rosewater} cursor ${catppuccin.toHex colors.rosewater}
cursor_text_color ${colors.base} cursor_text_color ${catppuccin.toHex colors.base}
# URL underline color when hovering with mouse # URL underline color when hovering with mouse
url_color ${colors.rosewater} url_color ${catppuccin.toHex colors.rosewater}
# Kitty window border colors # Kitty window border colors
active_border_color ${colors.lavender} active_border_color ${catppuccin.toHex colors.lavender}
inactive_border_color ${colors.overlay0} inactive_border_color ${catppuccin.toHex colors.overlay0}
bell_border_color ${colors.yellow} bell_border_color ${catppuccin.toHex colors.yellow}
# OS Window titlebar colors # OS Window titlebar colors
wayland_titlebar_color system wayland_titlebar_color system
macos_titlebar_color system macos_titlebar_color system
# Tab bar colors # Tab bar colors
active_tab_foreground ${colors.crust} active_tab_foreground ${catppuccin.toHex colors.crust}
active_tab_background ${colors.mauve} active_tab_background ${catppuccin.toHex colors.mauve}
inactive_tab_foreground ${colors.text} inactive_tab_foreground ${catppuccin.toHex colors.text}
inactive_tab_background ${colors.mantle} inactive_tab_background ${catppuccin.toHex colors.mantle}
tab_bar_background ${colors.crust} tab_bar_background ${catppuccin.toHex colors.crust}
# Colors for marks (marked text in the terminal) # Colors for marks (marked text in the terminal)
mark1_foreground ${colors.base} mark1_foreground ${catppuccin.toHex colors.base}
mark1_background ${colors.lavender} mark1_background ${catppuccin.toHex colors.lavender}
mark2_foreground ${colors.base} mark2_foreground ${catppuccin.toHex colors.base}
mark2_background ${colors.mauve} mark2_background ${catppuccin.toHex colors.mauve}
mark3_foreground ${colors.base} mark3_foreground ${catppuccin.toHex colors.base}
mark3_background ${colors.sapphire} mark3_background ${catppuccin.toHex colors.sapphire}
# The 16 terminal colors # The 16 terminal colors
# black # black
color0 ${colors.surface1} color0 ${catppuccin.toHex colors.surface1}
color8 ${colors.surface2} color8 ${catppuccin.toHex colors.surface2}
# red # red
color1 ${colors.red} color1 ${catppuccin.toHex colors.red}
color9 ${colors.red} color9 ${catppuccin.toHex colors.red}
# green # green
color2 ${colors.green} color2 ${catppuccin.toHex colors.green}
color10 ${colors.green} color10 ${catppuccin.toHex colors.green}
# yellow # yellow
color3 ${colors.yellow} color3 ${catppuccin.toHex colors.yellow}
color11 ${colors.yellow} color11 ${catppuccin.toHex colors.yellow}
# blue # blue
color4 ${colors.blue} color4 ${catppuccin.toHex colors.blue}
color12 ${colors.blue} color12 ${catppuccin.toHex colors.blue}
# magenta # magenta
color5 ${colors.mauve} color5 ${catppuccin.toHex colors.mauve}
color13 ${colors.mauve} color13 ${catppuccin.toHex colors.mauve}
# cyan # cyan
color6 ${colors.teal} color6 ${catppuccin.toHex colors.teal}
color14 ${colors.teal} color14 ${catppuccin.toHex colors.teal}
# white # white
color7 ${colors.subtext1} color7 ${catppuccin.toHex colors.subtext1}
color15 ${colors.subtext0} color15 ${catppuccin.toHex colors.subtext0}
''; '';
}; };
} }

View file

@ -3,11 +3,10 @@
config, config,
... ...
}: let }: let
inherit (lib) mkIf mkEnableOption; inherit (lib) mkIf mkEnableOption catppuccin;
cfg = config.horseman.dots.waybar; cfg = config.horseman.dots.waybar;
username = config.horseman.username; username = config.horseman.username;
colors = config.horseman.catppuccin.colors; colors = config.horseman.catppuccin.colors;
accent = config.horseman.catppuccin.accent;
in { in {
options = { options = {
horseman.dots.waybar = { horseman.dots.waybar = {
@ -26,33 +25,33 @@ in {
} }
.modules-left, .modules-center, .modules-right { .modules-left, .modules-center, .modules-right {
border: 2px solid ${colors.${accent}}; border: 2px solid ${catppuccin.toHex colors.accent};
border-radius: 10px; border-radius: 10px;
margin: 5px; margin: 5px;
background: ${colors.base}; background: ${catppuccin.toHex colors.base};
color: ${colors.text}; color: ${catppuccin.toHex colors.text};
} }
#power { #power {
padding-left: 10px; padding-left: 10px;
} }
#idle_inhibitor.activated { #idle_inhibitor.activated {
color: ${colors.red}; color: ${catppuccin.toHex colors.red};
} }
#power * { #power * {
color: ${colors.${accent}}; color: ${catppuccin.toHex colors.accent};
transition: 0.2s color ease; transition: 0.2s color ease;
font-size: 26px; font-size: 26px;
} }
#power *:hover { #power *:hover {
color: ${colors.red}; color: ${catppuccin.toHex colors.red};
} }
#workspaces .empty { #workspaces .empty {
color: ${colors.surface0}; color: ${catppuccin.toHex colors.surface0};
} }
#workspaces .active { #workspaces .active {
color: ${colors.red}; color: ${catppuccin.toHex colors.red};
font-size: 18px; font-size: 18px;
} }
#workspaces * { #workspaces * {
@ -62,27 +61,27 @@ in {
} }
#workspaces > * { #workspaces > * {
color: ${colors.${accent}}; color: ${catppuccin.toHex colors.accent};
} }
#clock { #clock {
color: ${colors.peach}; color: ${catppuccin.toHex colors.peach};
} }
#battery { #battery {
color: ${colors.maroon}; color: ${catppuccin.toHex colors.maroon};
} }
#cpu { #cpu {
color: ${colors.red}; color: ${catppuccin.toHex colors.red};
} }
#memory { #memory {
color: ${colors.mauve}; color: ${catppuccin.toHex colors.mauve};
} }
#pulseaudio { #pulseaudio {
color: ${colors.blue}; color: ${catppuccin.toHex colors.blue};
} }
#network { #network {
color: ${colors.teal}; color: ${catppuccin.toHex colors.teal};
} }
.horizontal .modules-right { .horizontal .modules-right {
font-size: 16px; font-size: 16px;

View file

@ -3,11 +3,10 @@
config, config,
... ...
}: let }: let
inherit (lib) mkIf mkEnableOption; inherit (lib) mkIf mkEnableOption catppuccin;
cfg = config.horseman.dots.wofi; cfg = config.horseman.dots.wofi;
username = config.horseman.username; username = config.horseman.username;
colors = config.horseman.catppuccin.colors; colors = config.horseman.catppuccin.colors;
accent = config.horseman.catppuccin.accent;
in { in {
options = { options = {
horseman.dots.wofi = { horseman.dots.wofi = {
@ -26,9 +25,9 @@ in {
window { window {
margin: 0px; margin: 0px;
padding: 10px; padding: 10px;
border: 3px solid ${colors.${accent}}; border: 3px solid ${catppuccin.toHex colors.accent};
border-radius: 10px; border-radius: 10px;
background-color: ${builtins.replaceStrings ["rgb" ")"] ["rgba" ", 0.99)"] colors.base-rgb}; background-color: ${catppuccin.toRGBA colors.base 0.99};
/* animation: slideIn 0.5s ease-in-out both; */ /* animation: slideIn 0.5s ease-in-out both; */
} }
@ -48,7 +47,7 @@ in {
margin: 5px; margin: 5px;
padding: 10px; padding: 10px;
border: none; border: none;
background-color: ${colors.base}; background-color: ${catppuccin.toHex colors.base};
/* animation: fadeIn 0.5s ease-in-out both; */ /* animation: fadeIn 0.5s ease-in-out both; */
} }
@ -68,7 +67,7 @@ in {
margin: 5px; margin: 5px;
padding: 10px; padding: 10px;
border: none; border: none;
background-color: ${colors.base}; background-color: ${catppuccin.toHex colors.base};
} }
/* Scroll */ /* Scroll */
@ -76,63 +75,63 @@ in {
margin: 0px; margin: 0px;
padding: 10px; padding: 10px;
border: none; border: none;
background-color: ${colors.base}; background-color: ${catppuccin.toHex colors.base};
} }
/* Input */ /* Input */
#input { #input {
margin: 5px 20px; margin: 5px 20px;
padding: 10px; padding: 10px;
border: 2px solid ${colors.${accent}}; border: 2px solid ${catppuccin.toHex colors.accent};
border-radius: 10px; border-radius: 10px;
color: ${colors.text}; color: ${catppuccin.toHex colors.text};
background-color: ${colors.base}; background-color: ${catppuccin.toHex colors.base};
/* animation: fadeIn 0.5s ease-in-out both; */ /* animation: fadeIn 0.5s ease-in-out both; */
} }
#input image { #input image {
border: none; border: none;
color: ${colors.red}; color: ${catppuccin.toHex colors.red};
} }
#input * { #input * {
outline: 4px solid ${colors.red}!important; outline: 4px solid ${catppuccin.toHex colors.red}!important;
} }
/* Text */ /* Text */
#text { #text {
margin: 5px; margin: 5px;
border: none; border: none;
color: ${colors.text}; color: ${catppuccin.toHex colors.text};
/* animation: fadeIn 0.5s ease-in-out both; */ /* animation: fadeIn 0.5s ease-in-out both; */
} }
#entry { #entry {
background-color: ${colors.base}; background-color: ${catppuccin.toHex colors.base};
} }
#entry arrow { #entry arrow {
border: none; border: none;
color: ${colors.${accent}}; color: ${catppuccin.toHex colors.accent};
} }
/* Selected Entry */ /* Selected Entry */
#entry:selected arrow { #entry:selected arrow {
overflow: hidden; overflow: hidden;
color: ${colors.mauve}; color: ${catppuccin.toHex colors.mauve};
} }
#entry:selected { #entry:selected {
border: 1px solid ${colors.${accent}}; border: 1px solid ${catppuccin.toHex colors.accent};
border-radius: 10px; border-radius: 10px;
} }
#entry:selected #text { #entry:selected #text {
color: ${colors.mauve}; color: ${catppuccin.toHex colors.mauve};
} }
#entry:drop(active) { #entry:drop(active) {
background-color: ${colors.${accent}}!important; background-color: ${catppuccin.toHex colors.accent}!important;
} }
''; '';
}; };

View file

@ -2,10 +2,7 @@
imports = [ imports = [
./.warprc.nix ./.warprc.nix
./.config/eza/theme.yml.nix ./.config/eza/theme.yml.nix
./.config/hypr/hypridle.conf.nix ./.config/fuzzel/fuzzel.ini.nix
./.config/hypr/hyprlock.conf.nix
./.config/hypr/hyprland.conf.nix
./.config/hypr/hyprpaper.conf.nix
./.config/kitty/kitty.conf.nix ./.config/kitty/kitty.conf.nix
./.config/wofi/style.css.nix ./.config/wofi/style.css.nix
./.config/waybar/style.css.nix ./.config/waybar/style.css.nix

42
flake.lock generated
View file

@ -73,11 +73,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1766292113, "lastModified": 1767780135,
"narHash": "sha256-sWTtmkQujRpjWYCnZc8LWdDiCzrRlSBPrGovkZpLkBI=", "narHash": "sha256-5SbmsLMgxzPd9YMbFR4IHfOXv6bjWs+dfl6IbSq3r7s=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "fdec8815a86db36f42fc9c8cb2931cd8485f5aed", "rev": "c08430923ed417abc653884328a39e98496cfd0f",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -87,13 +87,36 @@
"type": "github" "type": "github"
} }
}, },
"nix-hyprland": {
"inputs": {
"home-manager": [
"home-manager"
],
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1767801421,
"narHash": "sha256-z6+cVdgkJSz+MLUOChLDUZsiBP/h6tuAZSjVG+66jpo=",
"owner": "KoenDR06",
"repo": "nix-hyprland",
"rev": "4efff468c6435080b0716fd289ab7c06c4bb215f",
"type": "github"
},
"original": {
"owner": "KoenDR06",
"repo": "nix-hyprland",
"type": "github"
}
},
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1766201043, "lastModified": 1767634882,
"narHash": "sha256-eplAP+rorKKd0gNjV3rA6+0WMzb1X1i16F5m5pASnjA=", "narHash": "sha256-2GffSfQxe3sedHzK+sTKlYo/NTIAGzbFCIsNMUPAAnk=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "b3aad468604d3e488d627c0b43984eb60e75e782", "rev": "3c9db02515ef1d9b6b709fc60ba9a540957f661c",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -113,11 +136,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1763909441, "lastModified": 1767662275,
"narHash": "sha256-56LwV51TX/FhgX+5LCG6akQ5KrOWuKgcJa+eUsRMxsc=", "narHash": "sha256-d5Q1GmQ+sW1Bt8cgDE0vOihzLaswsm8cSdg8124EqXE=",
"owner": "pjones", "owner": "pjones",
"repo": "plasma-manager", "repo": "plasma-manager",
"rev": "b24ed4b272256dfc1cc2291f89a9821d5f9e14b4", "rev": "51816be33a1ff0d4b22427de83222d5bfa96d30e",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -130,6 +153,7 @@
"inputs": { "inputs": {
"agenix": "agenix", "agenix": "agenix",
"home-manager": "home-manager_2", "home-manager": "home-manager_2",
"nix-hyprland": "nix-hyprland",
"nixpkgs": "nixpkgs", "nixpkgs": "nixpkgs",
"plasma-manager": "plasma-manager" "plasma-manager": "plasma-manager"
} }

View file

@ -19,6 +19,12 @@
url = "github:ryantm/agenix"; url = "github:ryantm/agenix";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
nix-hyprland = {
url = "github:KoenDR06/nix-hyprland";
inputs.nixpkgs.follows = "nixpkgs";
inputs.home-manager.follows = "home-manager";
};
}; };
outputs = { outputs = {
@ -27,6 +33,7 @@
home-manager, home-manager,
plasma-manager, plasma-manager,
agenix, agenix,
nix-hyprland,
... ...
} @ inputs: let } @ inputs: let
inherit (self) outputs; inherit (self) outputs;
@ -46,21 +53,23 @@
"x86_64-darwin" "x86_64-darwin"
]; ];
forAllSystems = nixpkgs.lib.genAttrs systems; forAllSystems = nixpkgs.lib.genAttrs systems;
lib = import ./lib {inherit inputs;};
in { in {
formatter = forAllSystems (system: nixpkgs.legacyPackages.${system}.alejandra); formatter = forAllSystems (system: nixpkgs.legacyPackages.${system}.alejandra);
nixosConfigurations = nixpkgs.lib.genAttrs hosts (host: nixosConfigurations = nixpkgs.lib.genAttrs hosts (host:
nixpkgs.lib.nixosSystem { nixpkgs.lib.nixosSystem {
specialArgs = { specialArgs = {
inherit inputs outputs; inherit inputs outputs lib;
}; };
modules = [ modules = [
./lib
./modules ./modules
./dots ./dots
./machines/${host}/configuration.nix ./machines/${host}/configuration.nix
home-manager.nixosModules.home-manager home-manager.nixosModules.home-manager
agenix.nixosModules.default agenix.nixosModules.default
nix-hyprland.nixosModules.default
{ {
home-manager.sharedModules = [plasma-manager.homeModules.plasma-manager]; home-manager.sharedModules = [plasma-manager.homeModules.plasma-manager];
} }

11
lib/catppuccin.nix Normal file
View file

@ -0,0 +1,11 @@
{inputs, ...}: let
inherit (inputs.nixpkgs.lib) toHexString concatStrings strings;
inherit (strings) fixedWidthString;
padHex = n: fixedWidthString 2 "0" (toHexString n);
in {
toHex = color: concatStrings ["#" (padHex color.red) (padHex color.green) (padHex color.blue)];
toHexNoHash = color: concatStrings [(padHex color.red) (padHex color.green) (padHex color.blue)];
toRGB = color: concatStrings ["rgb(" (toString color.red) "," (toString color.green) "," (toString color.blue) ")"];
toRGBA = color: a: concatStrings ["rgba(" (toString color.red) "," (toString color.green) "," (toString color.blue) "," (toString a) ")"];
}

View file

@ -1,5 +1,6 @@
{...}: { {inputs, ...}:
imports = [ inputs.nixpkgs.lib.extend (
./hyprland final: prev: {
]; catppuccin = import ./catppuccin.nix {inherit inputs;};
} }
)

View file

@ -1,6 +0,0 @@
{...}: {
imports = [
./standard-options.nix
./gestures.nix
];
}

View file

@ -1,61 +0,0 @@
{lib, ...}: let
inherit (lib) mkOption types;
inherit (builtins) concatStringsSep;
# v0.52.1
# gesture = fingers, direction, action, options
gesture =
types.submodule {
options = {
fingers = mkOption {
type = types.ints.positive;
};
direction = mkOption {
type = types.enum ["swipe" "horizontal" "vertical" "left" "right" "up" "down" "pinch" "pinchin" "pinchout"];
};
mods = mkOption {
type = types.listOf types.str;
default = [];
};
scale = mkOption {
type = types.numbers.positive;
default = 1;
};
action = mkOption {
type = types.enum ["dispatcher" "workspace" "move" "resize" "special" "close" "fullscreen" "float"];
};
options = mkOption {
type = types.listOf types.str;
default = [];
};
};
}
// {
};
in {
options.horseman.wm.hyprland.config = {
gestures.gestures = mkOption {
type = types.listOf gesture;
default = [];
apply = gs:
map (it:
it
// {
__toString = gs: "gesture = ${concatStringsSep ", " (
[
(toString gs.fingers)
(gs.direction)
]
++ map (it: "mod: ${it}") gs.mods
++ [
"scale: ${toString gs.scale}"
(gs.action)
]
++ gs.options
)}";
})
gs;
};
};
}

File diff suppressed because it is too large Load diff

View file

@ -3,10 +3,28 @@
../../modules ../../modules
]; ];
config.nix-hyprland = {
monitors = {
bindWorkspaces = "interlaced";
displays = [
{
output = "eDP-1";
x = 0;
y = 0;
bar = "top";
scale = 1.175; # Idk why hyprland doesn't think 1.25 is invalid but whatever.
}
];
};
};
config.horseman = { config.horseman = {
dots.kitty.fontSize = 13; dots.kitty.fontSize = 13;
catppuccin.flavor = "mocha"; catppuccin = {
flavor = "mocha";
accent = "blue";
};
users.default.enable = true; users.default.enable = true;
@ -28,22 +46,7 @@
greeter.greetd.session = "Hyprland"; greeter.greetd.session = "Hyprland";
}; };
wm.hyprland = { wm.hyprland.enable = true;
enable = true;
config = {
monitors.displays = [
{
output = "eDP-1";
x = 0;
y = 0;
bar = "top";
scale = 1.175; # Idk why hyprland doesn't think 1.25 is invalid but whatever.
}
];
monitors.bindWorkspaces = "interlaced";
};
};
hardware = { hardware = {
audio.enable = true; audio.enable = true;
@ -56,6 +59,7 @@
ssh.enable = true; ssh.enable = true;
syncthing.enable = true; syncthing.enable = true;
tailscale.enable = true; tailscale.enable = true;
printing.enable = true;
}; };
apps = { apps = {

View file

@ -8,4 +8,6 @@
horseman.stateVersion = "24.11"; horseman.stateVersion = "24.11";
networking.hostName = "terra"; networking.hostName = "terra";
programs.niri.enable = true;
} }

View file

@ -3,34 +3,7 @@
../../modules ../../modules
]; ];
config.horseman = { config.nix-hyprland = {
catppuccin.flavor = "mocha";
users.default.enable = true;
containers = {
nginx.enable = true;
forgejo.enable = true;
vaultwarden.enable = true;
};
base = {
nix.enable = true;
locale.enable = true;
secrets.enable = true;
};
boot = {
loader.systemd.enable = true;
greeter.greetd.enable = true;
greeter.greetd.session = "Hyprland";
refind.enable = true;
};
wm.hyprland = {
enable = true;
config = {
monitors = { monitors = {
displays = [ displays = [
{ {
@ -51,17 +24,50 @@
bindWorkspaces = "interlaced"; bindWorkspaces = "interlaced";
}; };
}; };
config.horseman = {
catppuccin = {
flavor = "mocha";
accent = "blue";
};
users.default.enable = true;
containers = {
nginx.enable = true;
forgejo.enable = true;
vaultwarden.enable = true;
};
base = {
nix.enable = true;
locale.enable = true;
secrets.enable = true;
};
boot = {
loader.systemd.enable = true;
greeter.greetd.enable = true;
greeter.greetd.session = "Hyprland";
greeter.greetd.autoLogin = true;
refind.enable = true;
};
wm.hyprland = {
enable = true;
}; };
hardware = { hardware = {
gpu.nvidia.enable = true; gpu.nvidia.enable = true;
audio.enable = true; audio.enable = true;
wifi.enable = true;
}; };
network = { network = {
ssh.enable = true; ssh.enable = true;
syncthing.enable = true; syncthing.enable = true;
tailscale.enable = true; tailscale.enable = true;
printing.enable = true;
}; };
apps = { apps = {

12
misc/power-menu.sh Executable file
View file

@ -0,0 +1,12 @@
cmds=('shutdown now' 'reboot' 'hyprlock' 'hyprctl dispatch exit')
count=${#cmds[@]}
default=15
lines=$((count > default ? default : count))
a=$(printf ' Shut down\n Reboot\n Lock\n Log out' | fuzzel --cache /dev/null --dmenu --index --lines $lines --placeholder "Power action: " -I)
if [ -n "$a" ]; then
${cmds[a]}
fi

14
misc/sound-menu.sh Executable file
View file

@ -0,0 +1,14 @@
mapfile -t ids < <(wpctl status | sed -n '/Audio/,/Video/p' | sed -n '/├─ Sinks:/,/├─ Sources:/p' | tail -n +2 | head -n -2 | sed -r 's/^........//' | sed -r 's/\. .*//')
mapfile -t sinks < <(wpctl status | sed -n '/Audio/,/Video/p' | sed -n '/├─ Sinks:/,/├─ Sources:/p' | tail -n +2 | head -n -2 | sed -r 's/^........//' | sed -r 's/[0-9]+\. //')
count=${#ids[@]}
default=15
lines=$((count > default ? default : count))
a=$(printf '%s\n' "${sinks[@]}" | fuzzel --cache /dev/null --dmenu --index --lines $lines --placeholder "Switch audio source: " -I)
if [ -n "$a" ]; then
wpctl set-default ${ids[a]}
fi

View file

@ -64,6 +64,7 @@ in {
"uBlock0@raymondhill.net" = { "uBlock0@raymondhill.net" = {
install_url = "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi"; install_url = "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi";
installation_mode = "force_installed"; installation_mode = "force_installed";
private_browsing = true;
}; };
# Dark Reader # Dark Reader
"addon@darkreader.org" = { "addon@darkreader.org" = {
@ -89,6 +90,7 @@ in {
"idcac-pub@guus.ninja" = { "idcac-pub@guus.ninja" = {
install_url = "https://addons.mozilla.org/firefox/downloads/latest/istilldontcareaboutcookies/latest.xpi"; install_url = "https://addons.mozilla.org/firefox/downloads/latest/istilldontcareaboutcookies/latest.xpi";
installation_mode = "force_installed"; installation_mode = "force_installed";
private_browsing = true;
}; };
}; };

View file

@ -12,6 +12,10 @@ in {
horseman.boot.greeter.greetd = { horseman.boot.greeter.greetd = {
enable = mkEnableOption "Greetd Greeter"; enable = mkEnableOption "Greetd Greeter";
session = mkOption {type = types.str;}; session = mkOption {type = types.str;};
autoLogin = mkOption {
type = types.bool;
default = false;
};
}; };
}; };
@ -22,12 +26,23 @@ in {
services.greetd = { services.greetd = {
enable = true; enable = true;
settings = { settings =
{
default_session = { default_session = {
user = homeCfg.username; user = homeCfg.username;
command = "${pkgs.tuigreet}/bin/tuigreet --time --remember --remember-session --greeting 'Please authenticate to continue' --asterisks --asterisks-char '*' --theme 'border=74;text=cyan;prompt=green;time=cyan;action=cyan;button=cyan;container=black;input=238' --cmd ${cfg.session}"; command = "${pkgs.tuigreet}/bin/tuigreet --time --remember --remember-session --greeting 'Please authenticate to continue' --asterisks --asterisks-char '*' --theme 'border=74;text=cyan;prompt=green;time=cyan;action=cyan;button=cyan;container=black;input=238' --cmd ${cfg.session}";
}; };
}
// (
if cfg.autoLogin
then {
initial_session = {
user = homeCfg.username;
command = cfg.session;
}; };
}
else {}
);
}; };
systemd.services.greetd.serviceConfig = { systemd.services.greetd.serviceConfig = {

View file

@ -9,324 +9,532 @@
flavors = { flavors = {
mocha = { mocha = {
rosewater = "#f5e0dc"; rosewater = {
rosewater-rgb = "rgb(245, 224, 220)"; red = 245;
rosewater-hsl = "hsl(10, 56%, 91%)"; green = 224;
flamingo = "#f2cdcd"; blue = 220;
flamingo-rgb = "rgb(242, 205, 205)"; };
flamingo-hsl = "hsl(0, 59%, 88%)"; flamingo = {
pink = "#f5c2e7"; red = 242;
pink-rgb = "rgb(245, 194, 231)"; green = 205;
pink-hsl = "hsl(316, 72%, 86%)"; blue = 205;
mauve = "#cba6f7"; };
mauve-rgb = "rgb(203, 166, 247)"; pink = {
mauve-hsl = "hsl(267, 84%, 81%)"; red = 245;
red = "#f38ba8"; green = 194;
red-rgb = "rgb(243, 139, 168)"; blue = 231;
red-hsl = "hsl(343, 81%, 75%)"; };
maroon = "#eba0ac"; mauve = {
maroon-rgb = "rgb(235, 160, 172)"; red = 203;
maroon-hsl = "hsl(350, 65%, 77%)"; green = 166;
peach = "#fab387"; blue = 247;
peach-rgb = "rgb(250, 179, 135)"; };
peach-hsl = "hsl(23, 92%, 75%)"; red = {
yellow = "#f9e2af"; red = 243;
yellow-rgb = "rgb(249, 226, 175)"; green = 139;
yellow-hsl = "hsl(41, 86%, 83%)"; blue = 168;
green = "#a6e3a1"; };
green-rgb = "rgb(166, 227, 161)"; maroon = {
green-hsl = "hsl(115, 54%, 76%)"; red = 235;
teal = "#94e2d5"; green = 160;
teal-rgb = "rgb(148, 226, 213)"; blue = 172;
teal-hsl = "hsl(170, 57%, 73%)"; };
sky = "#89dceb"; peach = {
sky-rgb = "rgb(137, 220, 235)"; red = 250;
sky-hsl = "hsl(189, 71%, 73%)"; green = 179;
sapphire = "#74c7ec"; blue = 135;
sapphire-rgb = "rgb(116, 199, 236)"; };
sapphire-hsl = "hsl(199, 76%, 69%)"; yellow = {
blue = "#89b4fa"; red = 249;
blue-rgb = "rgb(137, 180, 250)"; green = 226;
blue-hsl = "hsl(217, 92%, 76%)"; blue = 175;
lavender = "#b4befe"; };
lavender-rgb = "rgb(180, 190, 254)"; green = {
lavender-hsl = "hsl(232, 97%, 85%)"; red = 166;
text = "#cdd6f4"; green = 227;
text-rgb = "rgb(205, 214, 244)"; blue = 161;
text-hsl = "hsl(226, 64%, 88%)"; };
subtext1 = "#bac2de"; teal = {
subtext1-rgb = "rgb(186, 194, 222)"; red = 148;
subtext1-hsl = "hsl(227, 35%, 80%)"; green = 226;
subtext0 = "#a6adc8"; blue = 213;
subtext0-rgb = "rgb(166, 173, 200)"; };
subtext0-hsl = "hsl(228, 24%, 72%)"; sky = {
overlay2 = "#9399b2"; red = 137;
overlay2-rgb = "rgb(147, 153, 178)"; green = 220;
overlay2-hsl = "hsl(228, 17%, 64%)"; blue = 235;
overlay1 = "#7f849c"; };
overlay1-rgb = "rgb(127, 132, 156)"; sapphire = {
overlay1-hsl = "hsl(230, 13%, 55%)"; red = 116;
overlay0 = "#6c7086"; green = 199;
overlay0-rgb = "rgb(108, 112, 134)"; blue = 236;
overlay0-hsl = "hsl(231, 11%, 47%)"; };
surface2 = "#585b70"; blue = {
surface2-rgb = "rgb(88, 91, 112)"; red = 137;
surface2-hsl = "hsl(233, 12%, 39%)"; green = 180;
surface1 = "#45475a"; blue = 250;
surface1-rgb = "rgb(69, 71, 90)"; };
surface1-hsl = "hsl(234, 13%, 31%)"; lavender = {
surface0 = "#313244"; red = 180;
surface0-rgb = "rgb(49, 50, 68)"; green = 190;
surface0-hsl = "hsl(237, 16%, 23%)"; blue = 254;
base = "#1e1e2e"; };
base-rgb = "rgb(30, 30, 46)"; text = {
base-hsl = "hsl(240, 21%, 15%)"; red = 205;
mantle = "#181825"; green = 214;
mantle-rgb = "rgb(24, 24, 37)"; blue = 244;
mantle-hsl = "hsl(240, 21%, 12%)"; };
crust = "#11111b"; subtext1 = {
crust-rgb = "rgb(17, 17, 27)"; red = 186;
crust-hsl = "hsl(240, 23%, 9%)"; green = 194;
blue = 222;
};
subtext0 = {
red = 166;
green = 173;
blue = 200;
};
overlay2 = {
red = 147;
green = 153;
blue = 178;
};
overlay1 = {
red = 127;
green = 132;
blue = 156;
};
overlay0 = {
red = 108;
green = 112;
blue = 134;
};
surface2 = {
red = 88;
green = 91;
blue = 112;
};
surface1 = {
red = 69;
green = 71;
blue = 90;
};
surface0 = {
red = 49;
green = 50;
blue = 68;
};
base = {
red = 30;
green = 30;
blue = 46;
};
mantle = {
red = 24;
green = 24;
blue = 37;
};
crust = {
red = 17;
green = 17;
blue = 27;
};
}; };
macchiato = { macchiato = {
rosewater = "#f4dbd6"; rosewater = {
rosewater-rgb = "rgb(244, 219, 214)"; red = 244;
rosewater-hsl = "hsl(10, 58%, 90%)"; green = 219;
flamingo = "#f0c6c6"; blue = 214;
flamingo-rgb = "rgb(240, 198, 198)"; };
flamingo-hsl = "hsl(0, 58%, 86%)"; flamingo = {
pink = "#f5bde6"; red = 240;
pink-rgb = "rgb(245, 189, 230)"; green = 198;
pink-hsl = "hsl(316, 74%, 85%)"; blue = 198;
mauve = "#c6a0f6"; };
mauve-rgb = "rgb(198, 160, 246)"; pink = {
mauve-hsl = "hsl(267, 83%, 80%)"; red = 245;
red = "#ed8796"; green = 189;
red-rgb = "rgb(237, 135, 150)"; blue = 230;
red-hsl = "hsl(351, 74%, 73%)"; };
maroon = "#ee99a0"; mauve = {
maroon-rgb = "rgb(238, 153, 160)"; red = 198;
maroon-hsl = "hsl(355, 71%, 77%)"; green = 160;
peach = "#f5a97f"; blue = 246;
peach-rgb = "rgb(245, 169, 127)"; };
peach-hsl = "hsl(21, 86%, 73%)"; red = {
yellow = "#eed49f"; red = 237;
yellow-rgb = "rgb(238, 212, 159)"; green = 135;
yellow-hsl = "hsl(40, 70%, 78%)"; blue = 150;
green = "#a6da95"; };
green-rgb = "rgb(166, 218, 149)"; maroon = {
green-hsl = "hsl(105, 48%, 72%)"; red = 238;
teal = "#8bd5ca"; green = 153;
teal-rgb = "rgb(139, 213, 202)"; blue = 160;
teal-hsl = "hsl(171, 47%, 69%)"; };
sky = "#91d7e3"; peach = {
sky-rgb = "rgb(145, 215, 227)"; red = 245;
sky-hsl = "hsl(189, 59%, 73%)"; green = 169;
sapphire = "#7dc4e4"; blue = 127;
sapphire-rgb = "rgb(125, 196, 228)"; };
sapphire-hsl = "hsl(199, 66%, 69%)"; yellow = {
blue = "#8aadf4"; red = 238;
blue-rgb = "rgb(138, 173, 244)"; green = 212;
blue-hsl = "hsl(220, 83%, 75%)"; blue = 159;
lavender = "#b7bdf8"; };
lavender-rgb = "rgb(183, 189, 248)"; green = {
lavender-hsl = "hsl(234, 82%, 85%)"; red = 166;
text = "#cad3f5"; green = 218;
text-rgb = "rgb(202, 211, 245)"; blue = 149;
text-hsl = "hsl(227, 68%, 88%)"; };
subtext1 = "#b8c0e0"; teal = {
subtext1-rgb = "rgb(184, 192, 224)"; red = 139;
subtext1-hsl = "hsl(228, 39%, 80%)"; green = 213;
subtext0 = "#a5adcb"; blue = 202;
subtext0-rgb = "rgb(165, 173, 203)"; };
subtext0-hsl = "hsl(227, 27%, 72%)"; sky = {
overlay2 = "#939ab7"; red = 145;
overlay2-rgb = "rgb(147, 154, 183)"; green = 215;
overlay2-hsl = "hsl(228, 20%, 65%)"; blue = 227;
overlay1 = "#8087a2"; };
overlay1-rgb = "rgb(128, 135, 162)"; sapphire = {
overlay1-hsl = "hsl(228, 15%, 57%)"; red = 125;
overlay0 = "#6e738d"; green = 196;
overlay0-rgb = "rgb(110, 115, 141)"; blue = 228;
overlay0-hsl = "hsl(230, 12%, 49%)"; };
surface2 = "#5b6078"; blue = {
surface2-rgb = "rgb(91, 96, 120)"; red = 138;
surface2-hsl = "hsl(230, 14%, 41%)"; green = 173;
surface1 = "#494d64"; blue = 244;
surface1-rgb = "rgb(73, 77, 100)"; };
surface1-hsl = "hsl(231, 16%, 34%)"; lavender = {
surface0 = "#363a4f"; red = 183;
surface0-rgb = "rgb(54, 58, 79)"; green = 189;
surface0-hsl = "hsl(230, 19%, 26%)"; blue = 248;
base = "#24273a"; };
base-rgb = "rgb(36, 39, 58)"; text = {
base-hsl = "hsl(232, 23%, 18%)"; red = 202;
mantle = "#1e2030"; green = 211;
mantle-rgb = "rgb(30, 32, 48)"; blue = 245;
mantle-hsl = "hsl(233, 23%, 15%)"; };
crust = "#181926"; subtext1 = {
crust-rgb = "rgb(24, 25, 38)"; red = 184;
crust-hsl = "hsl(236, 23%, 12%)"; green = 192;
blue = 224;
};
subtext0 = {
red = 165;
green = 173;
blue = 203;
};
overlay2 = {
red = 147;
green = 154;
blue = 183;
};
overlay1 = {
red = 128;
green = 135;
blue = 162;
};
overlay0 = {
red = 110;
green = 115;
blue = 141;
};
surface2 = {
red = 91;
green = 96;
blue = 120;
};
surface1 = {
red = 73;
green = 77;
blue = 100;
};
surface0 = {
red = 54;
green = 58;
blue = 79;
};
base = {
red = 36;
green = 39;
blue = 58;
};
mantle = {
red = 30;
green = 32;
blue = 48;
};
crust = {
red = 24;
green = 25;
blue = 38;
};
}; };
frappe = { frappe = {
rosewater = "#f2d5cf"; rosewater = {
rosewater-rgb = "rgb(242, 213, 207)"; red = 242;
rosewater-hsl = "hsl(10, 57%, 88%)"; green = 213;
flamingo = "#eebebe"; blue = 207;
flamingo-rgb = "rgb(238, 190, 190)"; };
flamingo-hsl = "hsl(0, 59%, 84%)"; flamingo = {
pink = "#f4b8e4"; red = 238;
pink-rgb = "rgb(244, 184, 228)"; green = 190;
pink-hsl = "hsl(316, 73%, 84%)"; blue = 190;
mauve = "#ca9ee6"; };
mauve-rgb = "rgb(202, 158, 230)"; pink = {
mauve-hsl = "hsl(277, 59%, 76%)"; red = 244;
red = "#e78284"; green = 184;
red-rgb = "rgb(231, 130, 132)"; blue = 228;
red-hsl = "hsl(359, 68%, 71%)"; };
maroon = "#ea999c"; mauve = {
maroon-rgb = "rgb(234, 153, 156)"; red = 202;
maroon-hsl = "hsl(358, 66%, 76%)"; green = 158;
peach = "#ef9f76"; blue = 230;
peach-rgb = "rgb(239, 159, 118)"; };
peach-hsl = "hsl(20, 79%, 70%)"; red = {
yellow = "#e5c890"; red = 231;
yellow-rgb = "rgb(229, 200, 144)"; green = 130;
yellow-hsl = "hsl(40, 62%, 73%)"; blue = 132;
green = "#a6d189"; };
green-rgb = "rgb(166, 209, 137)"; maroon = {
green-hsl = "hsl(96, 44%, 68%)"; red = 234;
teal = "#81c8be"; green = 153;
teal-rgb = "rgb(129, 200, 190)"; blue = 156;
teal-hsl = "hsl(172, 39%, 65%)"; };
sky = "#99d1db"; peach = {
sky-rgb = "rgb(153, 209, 219)"; red = 239;
sky-hsl = "hsl(189, 48%, 73%)"; green = 159;
sapphire = "#85c1dc"; blue = 118;
sapphire-rgb = "rgb(133, 193, 220)"; };
sapphire-hsl = "hsl(199, 55%, 69%)"; yellow = {
blue = "#8caaee"; red = 229;
blue-rgb = "rgb(140, 170, 238)"; green = 200;
blue-hsl = "hsl(222, 74%, 74%)"; blue = 144;
lavender = "#babbf1"; };
lavender-rgb = "rgb(186, 187, 241)"; green = {
lavender-hsl = "hsl(239, 66%, 84%)"; red = 166;
text = "#c6d0f5"; green = 209;
text-rgb = "rgb(198, 208, 245)"; blue = 137;
text-hsl = "hsl(227, 70%, 87%)"; };
subtext1 = "#b5bfe2"; teal = {
subtext1-rgb = "rgb(181, 191, 226)"; red = 129;
subtext1-hsl = "hsl(227, 44%, 80%)"; green = 200;
subtext0 = "#a5adce"; blue = 190;
subtext0-rgb = "rgb(165, 173, 206)"; };
subtext0-hsl = "hsl(228, 29%, 73%)"; sky = {
overlay2 = "#949cbb"; red = 153;
overlay2-rgb = "rgb(148, 156, 187)"; green = 209;
overlay2-hsl = "hsl(228, 22%, 66%)"; blue = 219;
overlay1 = "#838ba7"; };
overlay1-rgb = "rgb(131, 139, 167)"; sapphire = {
overlay1-hsl = "hsl(227, 17%, 58%)"; red = 133;
overlay0 = "#737994"; green = 193;
overlay0-rgb = "rgb(115, 121, 148)"; blue = 220;
overlay0-hsl = "hsl(229, 13%, 52%)"; };
surface2 = "#626880"; blue = {
surface2-rgb = "rgb(98, 104, 128)"; red = 140;
surface2-hsl = "hsl(228, 13%, 44%)"; green = 170;
surface1 = "#51576d"; blue = 238;
surface1-rgb = "rgb(81, 87, 109)"; };
surface1-hsl = "hsl(227, 15%, 37%)"; lavender = {
surface0 = "#414559"; red = 186;
surface0-rgb = "rgb(65, 69, 89)"; green = 187;
surface0-hsl = "hsl(230, 16%, 30%)"; blue = 241;
base = "#303446"; };
base-rgb = "rgb(48, 52, 70)"; text = {
base-hsl = "hsl(229, 19%, 23%)"; red = 198;
mantle = "#292c3c"; green = 208;
mantle-rgb = "rgb(41, 44, 60)"; blue = 245;
mantle-hsl = "hsl(231, 19%, 20%)"; };
crust = "#232634"; subtext1 = {
crust-rgb = "rgb(35, 38, 52)"; red = 181;
crust-hsl = "hsl(229, 20%, 17%)"; green = 191;
blue = 226;
};
subtext0 = {
red = 165;
green = 173;
blue = 206;
};
overlay2 = {
red = 148;
green = 156;
blue = 187;
};
overlay1 = {
red = 131;
green = 139;
blue = 167;
};
overlay0 = {
red = 115;
green = 121;
blue = 148;
};
surface2 = {
red = 98;
green = 104;
blue = 128;
};
surface1 = {
red = 81;
green = 87;
blue = 109;
};
surface0 = {
red = 65;
green = 69;
blue = 89;
};
base = {
red = 48;
green = 52;
blue = 70;
};
mantle = {
red = 41;
green = 44;
blue = 60;
};
crust = {
red = 35;
green = 38;
blue = 52;
};
}; };
latte = { latte = {
rosewater = "#dc8a78"; rosewater = {
rosewater-rgb = "rgb(220, 138, 120)"; red = 220;
rosewater-hsl = "hsl(11, 59%, 67%)"; green = 138;
flamingo = "#dd7878"; blue = 120;
flamingo-rgb = "rgb(221, 120, 120)"; };
flamingo-hsl = "hsl(0, 60%, 67%)"; flamingo = {
pink = "#ea76cb"; red = 221;
pink-rgb = "rgb(234, 118, 203)"; green = 120;
pink-hsl = "hsl(316, 73%, 69%)"; blue = 120;
mauve = "#8839ef"; };
mauve-rgb = "rgb(136, 57, 239)"; pink = {
mauve-hsl = "hsl(266, 85%, 58%)"; red = 234;
red = "#d20f39"; green = 118;
red-rgb = "rgb(210, 15, 57)"; blue = 203;
red-hsl = "hsl(347, 87%, 44%)"; };
maroon = "#e64553"; mauve = {
maroon-rgb = "rgb(230, 69, 83)"; red = 136;
maroon-hsl = "hsl(355, 76%, 59%)"; green = 57;
peach = "#fe640b"; blue = 239;
peach-rgb = "rgb(254, 100, 11)"; };
peach-hsl = "hsl(22, 99%, 52%)"; red = {
yellow = "#df8e1d"; red = 210;
yellow-rgb = "rgb(223, 142, 29)"; green = 15;
yellow-hsl = "hsl(35, 77%, 49%)"; blue = 57;
green = "#40a02b"; };
green-rgb = "rgb(64, 160, 43)"; maroon = {
green-hsl = "hsl(109, 58%, 40%)"; red = 230;
teal = "#179299"; green = 69;
teal-rgb = "rgb(23, 146, 153)"; blue = 83;
teal-hsl = "hsl(183, 74%, 35%)"; };
sky = "#04a5e5"; peach = {
sky-rgb = "rgb(4, 165, 229)"; red = 254;
sky-hsl = "hsl(197, 97%, 46%)"; green = 100;
sapphire = "#209fb5"; blue = 11;
sapphire-rgb = "rgb(32, 159, 181)"; };
sapphire-hsl = "hsl(189, 70%, 42%)"; yellow = {
blue = "#1e66f5"; red = 223;
blue-rgb = "rgb(30, 102, 245)"; green = 142;
blue-hsl = "hsl(220, 91%, 54%)"; blue = 29;
lavender = "#7287fd"; };
lavender-rgb = "rgb(114, 135, 253)"; green = {
lavender-hsl = "hsl(231, 97%, 72%)"; red = 64;
text = "#4c4f69"; green = 160;
text-rgb = "rgb(76, 79, 105)"; blue = 43;
text-hsl = "hsl(234, 16%, 35%)"; };
subtext1 = "#5c5f77"; teal = {
subtext1-rgb = "rgb(92, 95, 119)"; red = 23;
subtext1-hsl = "hsl(233, 13%, 41%)"; green = 146;
subtext0 = "#6c6f85"; blue = 153;
subtext0-rgb = "rgb(108, 111, 133)"; };
subtext0-hsl = "hsl(233, 10%, 47%)"; sky = {
overlay2 = "#7c7f93"; red = 4;
overlay2-rgb = "rgb(124, 127, 147)"; green = 165;
overlay2-hsl = "hsl(232, 10%, 53%)"; blue = 229;
overlay1 = "#8c8fa1"; };
overlay1-rgb = "rgb(140, 143, 161)"; sapphire = {
overlay1-hsl = "hsl(231, 10%, 59%)"; red = 32;
overlay0 = "#9ca0b0"; green = 159;
overlay0-rgb = "rgb(156, 160, 176)"; blue = 181;
overlay0-hsl = "hsl(228, 11%, 65%)"; };
surface2 = "#acb0be"; blue = {
surface2-rgb = "rgb(172, 176, 190)"; red = 30;
surface2-hsl = "hsl(227, 12%, 71%)"; green = 102;
surface1 = "#bcc0cc"; blue = 245;
surface1-rgb = "rgb(188, 192, 204)"; };
surface1-hsl = "hsl(225, 14%, 77%)"; lavender = {
surface0 = "#ccd0da"; red = 114;
surface0-rgb = "rgb(204, 208, 218)"; green = 135;
surface0-hsl = "hsl(223, 16%, 83%)"; blue = 253;
base = "#eff1f5"; };
base-rgb = "rgb(239, 241, 245)"; text = {
base-hsl = "hsl(220, 23%, 95%)"; red = 76;
mantle = "#e6e9ef"; green = 79;
mantle-rgb = "rgb(230, 233, 239)"; blue = 105;
mantle-hsl = "hsl(220, 22%, 92%)"; };
crust = "#dce0e8"; subtext1 = {
crust-rgb = "rgb(220, 224, 232)"; red = 92;
crust-hsl = "hsl(220, 21%, 89%)"; green = 95;
blue = 119;
};
subtext0 = {
red = 108;
green = 111;
blue = 133;
};
overlay2 = {
red = 124;
green = 127;
blue = 147;
};
overlay1 = {
red = 140;
green = 143;
blue = 161;
};
overlay0 = {
red = 156;
green = 160;
blue = 176;
};
surface2 = {
red = 172;
green = 176;
blue = 190;
};
surface1 = {
red = 188;
green = 192;
blue = 204;
};
surface0 = {
red = 204;
green = 208;
blue = 218;
};
base = {
red = 239;
green = 241;
blue = 245;
};
mantle = {
red = 230;
green = 233;
blue = 239;
};
crust = {
red = 220;
green = 224;
blue = 232;
};
}; };
}; };
in { in {
@ -371,11 +579,23 @@ in {
}; };
colors = mkOption { colors = mkOption {
type = types.attrsOf types.anything; type = types.attrsOf (types.submodule {
options = {
red = mkOption {
type = types.int;
};
green = mkOption {
type = types.int;
};
blue = mkOption {
type = types.int;
};
};
});
readOnly = true; readOnly = true;
}; };
}; };
}; };
config.horseman.catppuccin.colors = lib.mkDefault flavors.${cfg.flavor}; config.horseman.catppuccin.colors = lib.mkDefault (flavors.${cfg.flavor} // {accent = cfg.flavor.${cfg.accent};});
} }

View file

@ -30,6 +30,10 @@ in {
pskRaw = "ext:psk_ruiter"; pskRaw = "ext:psk_ruiter";
}; };
"TMNL-6DA8C1" = {
pskRaw = "ext:psk_tmnl6da8c1";
};
"kargadoor" = { "kargadoor" = {
pskRaw = "ext:psk_kargadoor"; pskRaw = "ext:psk_kargadoor";
}; };

View file

@ -4,5 +4,6 @@
./ssh.nix ./ssh.nix
./syncthing.nix ./syncthing.nix
./tailscale.nix ./tailscale.nix
./printing.nix
]; ];
} }

View file

@ -0,0 +1,24 @@
{
lib,
config,
...
}: let
inherit (lib) mkEnableOption mkIf;
cfg = config.horseman.network.printing;
in {
options = {
horseman.network.printing = {
enable = mkEnableOption "Turns on standard printing config";
};
};
config = mkIf cfg.enable {
services.printing.enable = true;
services.avahi = {
enable = true;
nssmdns4 = true;
openFirewall = true;
};
};
}

View file

@ -7,7 +7,7 @@
cfg = config.horseman.wm.hyprland; cfg = config.horseman.wm.hyprland;
in { in {
config = mkIf cfg.enable { config = mkIf cfg.enable {
horseman.wm.hyprland.config = { nix-hyprland = {
animations = { animations = {
enabled = true; enabled = true;
beziers = [ beziers = [
@ -51,103 +51,87 @@ in {
animations = [ animations = [
{ {
name = "global"; name = "global";
on = true;
speed = 10.0; speed = 10.0;
curve = "default"; curve = "default";
} }
{ {
name = "border"; name = "border";
on = true;
speed = 5.39; speed = 5.39;
curve = "easeOutQuint"; curve = "easeOutQuint";
} }
{ {
name = "windows"; name = "windows";
on = true;
speed = 4.79; speed = 4.79;
curve = "easeOutQuint"; curve = "easeOutQuint";
} }
{ {
name = "windowsIn"; name = "windowsIn";
on = true;
speed = 4.1; speed = 4.1;
curve = "easeOutQuint"; curve = "easeOutQuint";
style = "popin 87%"; style = "popin 87%";
} }
{ {
name = "windowsOut"; name = "windowsOut";
on = true;
speed = 1.49; speed = 1.49;
curve = "linear"; curve = "linear";
style = "popin 87%"; style = "popin 87%";
} }
{ {
name = "fadeIn"; name = "fadeIn";
on = true;
speed = 1.73; speed = 1.73;
curve = "almostLinear"; curve = "almostLinear";
} }
{ {
name = "fadeOut"; name = "fadeOut";
on = true;
speed = 1.46; speed = 1.46;
curve = "almostLinear"; curve = "almostLinear";
} }
{ {
name = "fade"; name = "fade";
on = true;
speed = 3.03; speed = 3.03;
curve = "quick"; curve = "quick";
} }
{ {
name = "layers"; name = "layers";
on = true;
speed = 3.81; speed = 3.81;
curve = "easeOutQuint"; curve = "easeOutQuint";
} }
{ {
name = "layersIn"; name = "layersIn";
on = true;
speed = 4.0; speed = 4.0;
curve = "easeOutQuint"; curve = "easeOutQuint";
style = "fade"; style = "fade";
} }
{ {
name = "layersOut"; name = "layersOut";
on = true;
speed = 1.5; speed = 1.5;
curve = "linear"; curve = "linear";
style = "fade"; style = "fade";
} }
{ {
name = "fadeLayersIn"; name = "fadeLayersIn";
on = true;
speed = 1.79; speed = 1.79;
curve = "almostLinear"; curve = "almostLinear";
} }
{ {
name = "fadeLayersOut"; name = "fadeLayersOut";
on = true;
speed = 1.39; speed = 1.39;
curve = "almostLinear"; curve = "almostLinear";
} }
{ {
name = "workspaces"; name = "workspaces";
on = true;
speed = 1.94; speed = 1.94;
curve = "almostLinear"; curve = "almostLinear";
style = "fade"; style = "fade";
} }
{ {
name = "workspacesIn"; name = "workspacesIn";
on = true;
speed = 1.21; speed = 1.21;
curve = "almostLinear"; curve = "almostLinear";
style = "fade"; style = "fade";
} }
{ {
name = "workspacesOut"; name = "workspacesOut";
on = true;
speed = 1.94; speed = 1.94;
curve = "almostLinear"; curve = "almostLinear";
style = "fade"; style = "fade";

View file

@ -4,12 +4,10 @@
pkgs, pkgs,
... ...
}: let }: let
inherit (lib) mkIf mkEnableOption; inherit (lib) mkIf mkEnableOption catppuccin;
inherit (builtins) replaceStrings;
cfg = config.horseman.wm.hyprland; cfg = config.horseman.wm.hyprland;
colors = config.horseman.catppuccin.colors; colors = config.horseman.catppuccin.colors;
accent = config.horseman.catppuccin.accent;
in { in {
imports = [ imports = [
./options.nix ./options.nix
@ -40,13 +38,16 @@ in {
playerctl # Media control playerctl # Media control
pulsemixer # Audio frontend pulsemixer # Audio frontend
wl-clipboard # Clipboard wl-clipboard # Clipboard
wofi # Launcher fuzzel # Launcher
xdg-desktop-portal-hyprland # XDG Portal (needed but idk why) xdg-desktop-portal-hyprland # XDG Portal (needed but idk why)
]; ];
horseman.hardware.keyd.enable = true; horseman.hardware.keyd.enable = true;
horseman.wm.hyprland.config = { nix-hyprland = {
enable = true;
username = config.horseman.username;
execOnce = [ execOnce = [
"hypridle" "hypridle"
"hyprpaper" "hyprpaper"
@ -55,8 +56,14 @@ in {
]; ];
env = [ env = [
"XCURSOR_SIZE,24" {
"HYPRCURSOR_SIZE,24" name = "XCURSOR_SIZE";
value = "24";
}
{
name = "HYPRCURSOR_SIZE";
value = "24";
}
]; ];
windowrules = [ windowrules = [
@ -82,16 +89,16 @@ in {
resizeOnBorder = true; resizeOnBorder = true;
allowTearing = false; allowTearing = false;
col.activeBorder = replaceStrings [" "] [""] colors."${accent}-rgb"; col.activeBorder = catppuccin.toRGB colors.accent;
col.inactiveBorder = replaceStrings [" " ")" "rgb"] ["" ",0.25)" "rgba"] colors."${accent}-rgb"; # Make transparent col.inactiveBorder = catppuccin.toRGBA colors.accent 0.25;
layout = "dwindle"; layout = "dwindle";
}; };
decoration = { decoration = {
rounding = 10; rounding = 10;
activeOpacity = 0.9; activeOpacity = 1.0;
inactiveOpacity = 0.7; inactiveOpacity = 0.9;
dimSpecial = 0.4; dimSpecial = 0.4;
@ -134,8 +141,6 @@ in {
sensitivity = 0.0; sensitivity = 0.0;
touchpad.naturalScroll = true; touchpad.naturalScroll = true;
numlockByDefault = true; numlockByDefault = true;
touchpad.dragLock = 1;
}; };
group = { group = {
@ -143,10 +148,10 @@ in {
dragIntoGroup = 1; dragIntoGroup = 1;
col = { col = {
borderActive = config.horseman.wm.hyprland.config.general.col.activeBorder; # I don't wanna believe this can't be done better :( borderActive = config.nix-hyprland.general.col.activeBorder; # I don't wanna believe this can't be done better :(
borderInactive = config.horseman.wm.hyprland.config.general.col.inactiveBorder; borderInactive = config.nix-hyprland.general.col.inactiveBorder;
borderLockedActive = config.horseman.wm.hyprland.config.general.col.activeBorder; borderLockedActive = config.nix-hyprland.general.col.activeBorder;
borderLockedInactive = config.horseman.wm.hyprland.config.general.col.inactiveBorder; borderLockedInactive = config.nix-hyprland.general.col.inactiveBorder;
}; };
groupbar = { groupbar = {
@ -167,7 +172,7 @@ in {
}; };
monitors = { monitors = {
defaultMonitor = true; addDefault = true;
}; };
sleep = { sleep = {

View file

@ -1,14 +1,14 @@
{ {
lib, lib,
config, config,
pkgs,
... ...
}: let }: let
inherit (lib) mkIf; inherit (lib) mkIf;
cfg = config.horseman.wm.hyprland; cfg = config.horseman.wm.hyprland;
in { in {
config = mkIf cfg.enable { config = mkIf cfg.enable {
horseman.wm.hyprland.config = { nix-hyprland.keybindings = {
keybindings = {
submaps = [ submaps = [
{ {
name = "disable-all"; name = "disable-all";
@ -33,7 +33,7 @@ in {
mods = ["SUPER"]; mods = ["SUPER"];
key = "SPACE"; key = "SPACE";
dispatcher = "exec"; dispatcher = "exec";
params = "pkill wofi || wofi -i -S drun -M multi-contains"; params = "pkill fuzzel || fuzzel";
} }
{ {
@ -44,6 +44,26 @@ in {
params = "pkill waybar || waybar"; params = "pkill waybar || waybar";
} }
{
flags = [];
mods = ["SUPER"];
key = "P";
dispatcher = "exec";
params = let
a = pkgs.writeShellScriptBin "power-menu" (builtins.readFile ../../../misc/power-menu.sh);
in "pkill fuzzel || ${a}/bin/power-menu";
}
{
flags = [];
mods = ["SUPER"];
key = "S";
dispatcher = "exec";
params = let
a = pkgs.writeShellScriptBin "sound-menu" (builtins.readFile ../../../misc/sound-menu.sh);
in "pkill fuzzel || ${a}/bin/sound-menu";
}
{ {
flags = []; flags = [];
mods = ["SUPER"]; mods = ["SUPER"];
@ -508,5 +528,4 @@ in {
]; ];
}; };
}; };
};
} }

View file

@ -11,194 +11,8 @@
cfg = config.horseman.wm.hyprland; cfg = config.horseman.wm.hyprland;
homeCfg = config.horseman; homeCfg = config.horseman;
keybinding = types.submodule {
options = {
flags = mkOption {
type = types.listOf (types.enum ["l" "r" "c" "g" "o" "e" "m" "t" "i" "s" "d" "p"]);
};
mods = mkOption {
type = types.listOf types.str;
};
key = mkOption {
type = types.str;
};
dispatcher = mkOption {
type = types.str;
};
params = mkOption {
type = types.str;
};
};
};
submapKeybinding = types.submodule {
options = {
flags = mkOption {
type = types.listOf (types.enum ["l" "r" "c" "g" "o" "e" "m" "t" "i" "s" "d" "p"]);
};
mods = mkOption {
type = types.listOf types.str;
};
key = mkOption {
type = types.str;
};
};
};
vec2 = types.submodule {
options = {
x = mkOption {type = types.int;};
y = mkOption {type = types.int;};
};
};
fontWeight = types.enum ["thin" "ultralight" "light" "semilight" "book" "normal" "medium" "semibold" "bold" "ultrabold" "heavy" "ultraheavy"];
in { in {
options.horseman.wm.hyprland.config = { options.horseman.wm.hyprland.config.waybar = {
execOnce = mkOption {
type = types.listOf types.str;
default = [];
};
env = mkOption {
type = types.listOf types.str;
default = [];
};
windowrules = mkOption {
type = types.listOf types.str;
default = [];
};
workspaces = mkOption {
type = types.listOf types.str;
default = [];
};
animations = {
beziers = mkOption {
type = types.listOf (types.submodule {
options = {
name = mkOption {type = types.str;};
startX = mkOption {type = types.number;};
startY = mkOption {type = types.number;};
endX = mkOption {type = types.number;};
endY = mkOption {type = types.number;};
};
});
};
animations = mkOption {
type = types.listOf (types.submodule {
options = {
name = mkOption {type = types.str;};
on = mkOption {type = types.bool;};
speed = mkOption {
type = types.number;
default = 0;
};
curve = mkOption {
type = types.str;
default = "";
};
style = mkOption {
type = types.str;
default = "";
};
};
});
};
};
dwindle = {
pseudotile = mkOption {type = types.bool;};
preserveSplit = mkOption {type = types.bool;};
};
master = {
newStatus = mkOption {type = types.enum ["master" "slave" "inherit"];};
};
monitors = {
defaultMonitor = mkOption {type = types.bool;};
bindWorkspaces = mkOption {
type = types.enum ["no" "interlaced"];
default = "no";
};
displays = mkOption {
type = types.listOf (types.submodule {
options = {
output = mkOption {type = types.str;};
resolution = mkOption {
type = types.str;
default = "highres";
};
refreshRate = mkOption {
type = types.str;
default = "highrr";
};
x = mkOption {type = types.int;};
y = mkOption {type = types.int;};
scale = mkOption {
type = types.number;
default = 1;
};
transform = mkOption {
type = types.enum [0 1 2 3 4 5 6 7];
default = 0;
};
wallpaper = mkOption {
type = types.nullOr types.path;
default = null;
};
bar = mkOption {
type = types.enum ["" "left" "right" "top" "bottom"];
default = "";
};
};
});
};
};
keybindings = {
binds = mkOption {type = types.listOf keybinding;};
submaps = mkOption {
type = types.listOf (types.submodule {
options = {
name = mkOption {type = types.str;};
enterBind = mkOption {type = submapKeybinding;};
exitBind = mkOption {type = submapKeybinding;};
binds = mkOption {type = types.listOf keybinding;};
};
});
};
};
sleep = {
lockCommand = mkOption {type = types.str;};
listeners = mkOption {
type = types.listOf (types.submodule {
options = {
timeout = mkOption {type = types.ints.positive;};
onTimeout = mkOption {type = types.str;};
onResume = mkOption {
type = types.str;
default = "";
};
ignoreInhibit = mkOption {
type = types.bool;
default = false;
};
};
});
};
};
waybar = {
layout = { layout = {
horizontal = { horizontal = {
left = mkOption {type = types.listOf types.str;}; left = mkOption {type = types.listOf types.str;};
@ -223,18 +37,11 @@ in {
type = types.attrs; type = types.attrs;
}; };
}; };
};
config = mkIf cfg.enable { config = mkIf cfg.enable {
horseman.dots = { horseman.dots = {
wofi.enable = true; fuzzel.enable = true;
waybar.enable = true; waybar.enable = true;
hypr = {
hyprland.enable = true;
hypridle.enable = true;
hyprpaper.enable = true;
hyprlock.enable = true;
};
}; };
home-manager.users.${homeCfg.username} = { home-manager.users.${homeCfg.username} = {
@ -248,7 +55,7 @@ in {
if (disp.bar == location) if (disp.bar == location)
then disp.output then disp.output
else null) else null)
cfg.config.monitors.displays config.nix-hyprland.monitors.displays
) )
); );
in { in {

View file

@ -1,20 +1,21 @@
-----BEGIN AGE ENCRYPTED FILE----- -----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IC9tczZkdyBaZjlp YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IC9tczZkdyAybnc2
Qi80a2lrUFBUT05KUVk2RVI3ZW5kZzVURldwRWJLenBVdkFobmhZCkcrRmlEWWRq YTBRMUpRT0E3alBWZXlieDlWK3crVkg1aGFLcEJKWXdQeHVwYlFNClN0VEYwQ216
akEwaVhxVlVWWG1qaUdkY04wK05IWDJodHFxSEJYOFFheGcKLT4gc3NoLWVkMjU1 UFB2dzEwTlY1K1NTSHJXMEZTNlRZWGRRQ0tuejBZTUs1Z1kKLT4gc3NoLWVkMjU1
MTkgZ1BJZFpBIDdkT1NjVitRQWJWOFV2WHVEcDdOL253MHRNcWhsYTkrUG5kQVFK MTkgZ1BJZFpBIGdhQmk1ZmpCR2xKSmE4RklWb0dZd2d6OHh0ZVVTR2xRV25GdmFH
cFZXbFUKOXlQa1RENzQxYkRaUXZPdGdoeVp2bEhMeWJ2dWpON1JuazV1cmdLRk9O aFRRbkEKcHViTHQvMm4ydm1MeVo2aEpJQ0VWZlJCamhVZkJoZ1I1L1o3bFdhdEdp
QQotPiBzc2gtZWQyNTUxOSBXeUlGekEgZHZSQXZhdVJldU43aGUvRE92RDlJQ2ha YwotPiBzc2gtZWQyNTUxOSBXeUlGekEgK2VMd25EOUp5S0pDSlNMTFZkenlXd09W
U3JCOXRjZkhCZnduNURWTjF3MAprZWczQXhWTjY0dldTMXd0RmlXSUhVOHhhTElH eG5CS2FCWUE2azBicGZ3MHIxYwpNKy9ySUcrUWlLM0hhQXIrTy9QQkhleUhSTUN0
YVRNZkZaN1VFeDhOcDFRCi0+IHNzaC1lZDI1NTE5IGRiT2VoQSBBWWlzQUV2RWxv bmRIR2d2ZjFOR2lCV3M4Ci0+IHNzaC1lZDI1NTE5IGRiT2VoQSBhdzdGZHNOemZt
ZXFQOFJaR0FYSS9sRjZhdUZhOWE1OTBxTTNPTkZSUmx3CkdSTHRrSjJQOXBiWXBO dFFxWnhpeFZ5aFRydWhPMXMrWHl0Ny9FNFhlTmtLQzJ3CmtHWWdldlVMdkg2aFgv
eUtvMjZlM25KNXU4dDYwaVB2cEkzMHJnVVBFbG8KLT4gc3NoLWVkMjU1MTkgdHYv MDJHWEFySzI0VEhGaHd2VnVEcVUzU1JJbFF4dzAKLT4gc3NoLWVkMjU1MTkgdHYv
Q3pnIFVOMTVjSGFncHZxMkhyMzZ6V2FwaXZGNFBKODMrcnA3d3hlRERVRUduRVEK Q3pnIHlWRDUwcTlKRnd0N0VpUWJPd2UwYzBYc1JvbFVnRXlicVROSGZTZytvbTAK
TzdKc291QTBMSzYrcURMUEFQd3dEUk9vYVJPMWdhWnFWaFIxK3ZCZFMzZwotPiB+ SWVBRmVPbDUyVVV0N1daNmpLQjVESm1ZL0xZcTZGT0RGbEJmRW02alcvZwotPiAu
VCR2TTMvLWdyZWFzZQp5NEx4SHNOMlBXZ0xrc1lUZWc4WWV2RERJUQotLS0gZ01P Pi1ncmVhc2UgaXlfYyFzCk83RXV4clFtZ29ZdUw0OFVEZE5LR2ZEb2lCWjZqcGsK
V2Z5WGFKclFhTm8wekVmZllQSnhwaW9MbzJPSVIyWkJta3Z6SStHNAo9+mXqaBH3 LS0tIEtBUnpnL2sxR3VZWCswTEJ4cGg2RXhDZndxaVdXVUFhQWc3d1hYL284OHcK
yQaKE5s6TPR6AMf4ZqZ3/TtMmruR9O0Lv6uWtvE3nf1b+QobKhFmUX/J+bX9eHI3 s1JLJWVTPMOkTdwQ9KjP8X/J+J9dpRM9TC7/9KzupLTni5iuaDuHu4yqcEreBZR6
JxSKc6Xg8uCdfaD+vqtqbbbW9uXv2LAIOuFCVqDcEHFlt5dBIhUB5jvWd0igdI+F 9bDLNACBMDucZNy2XGSg2zE16fFQM584rcvHZ8Hvn0Ju+heMjvjKwkAJ6hSapZa+
C++o85pzminNN79bFGwqhJ6yUHhE+vsOaPGCE9pLooXRm4uFbecX2gXU28ftUErC LrQaHx8JeFgaH+aXMbi7Ysz3lbKwhecyG8tSG/KocoSXWOehp+BGPeLIX02G2a2r
dX9U3G2kdJj5+6RE+oeyyDapjQWyaPCzT5i08HyGx+p2gtUW6BWM705y g0KtTNNGWEaar10PNTkYQlxyQG5y9gugLWsfiwB1LjSc+ZZJVIpMRmyFo1ekfus2
Db3jUp+de9+lxetURzUVWO7biPRha3WnS/1I
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----