Compare commits

8 Commits
Author SHA1 Message Date
doloro 47fb263bb4 commit 2026-09-19 20:57:04 +01:00
doloro 84bd80f82a SHIT 2026-09-19 20:56:43 +01:00
doloro 19e49e90f5 barbar 2026-09-15 12:12:02 +01:00
doloro a292aa4fcc bwa 2026-09-15 11:52:31 +01:00
doloro cf606b7650 things 2026-09-15 11:49:20 +01:00
doloro f491665a54 added bar bar 2026-09-14 17:51:18 +01:00
doloro bc9794ff00 hyprland settings rework 2026-09-12 22:52:47 +01:00
doloro d41aac2a41 meow 2026-08-31 17:41:26 +01:00
19 changed files with 1090 additions and 506 deletions
+4 -3
View File
@@ -35,14 +35,15 @@
})
# modules.niri # Testing
modules.stylix
modules.quickshell
# modules.quickshell
modules.barbar
modules.nix-ld
modules.spotify
# modules.easyeffects
# modules.lavd
<modules/ai/secrets>
modules.ai
# modules.pi-coding # inactive: swapped to opencode
# modules.ai
modules.pi-coding # inactive: swapped to opencode
# modules.omp
modules.podman
modules.wivrn
+3 -1
View File
@@ -14,12 +14,14 @@
<modules/hyprland/doloro-settings>
modules.sops
modules.fish
modules.surface-touchpad
(<modules/helium> {
default = true;
})
modules.kitty
modules.stylix
modules.quickshell
# modules.quickshell
modules.barbar
# modules.lavd
# modules.omp
# modules.podman
+14 -4
View File
@@ -21,7 +21,7 @@
enable = true;
extraPackages = with pkgs; [
rust-analyzer
# rust-analyzer
typescript-language-server
];
context = ''
@@ -32,17 +32,19 @@
- Follow references recursively when needed
- NO EMOJIS
- If you've been looking a lot for something you cant seem to find and you havent been explicitly told to keep going, you're allowed to say 'i cant find it'
'';
settings = {
"lsp" = true;
plugin = [
"@tarquinen/opencode-dcp@latest"
"@xberg-io/opencode-xberg"
"@xberg-io/opencode-crawlberg"
"@xberg-io/opencode-html-to-markdown"
# "@xberg-io/opencode-crawlberg"
# "@xberg-io/opencode-html-to-markdown"
"@xberg-io/opencode-liter-llm"
"opencode-plugin-litellm@latest"
"@dietrichgebert/ponytail"
"opencode-autodiscover"
"@xberg-io/opencode-tree-sitter-language-pack"
# Token slimming: filters shell command output via snip CLI
# (https://github.com/VincentHardouin/opencode-snip)
@@ -50,7 +52,7 @@
# Replace/extend the per-model system prompt via
# ~/.config/opencode/system-prompts.json
# (https://github.com/kmcquade/opencode-sysprompt-override-plugin)
"opencode-sysprompt-override@latest"
# "opencode-sysprompt-override@latest"
];
provider.litellm = {
npm = "@ai-sdk/openai-compatible";
@@ -67,6 +69,14 @@
apiKey = "{env:OPENCODE_GO_API_KEY}";
};
};
# provider.commandcode = {
# npm = "@ai-sdk/openai-compatible";
# name = "Command Code";
# options = {
# baseURL = "https://api.commandcode.ai/provider/v1";
# apiKey = "{env:COMMANDCODE_API_KEY}";
# };
# };
};
# TUI plugin: token-tracker (https://github.com/eserete/opencode-token-tracker)
tui = {
+61 -13
View File
@@ -16,23 +16,20 @@
# pkgs.lean-lsp-mcp
];
settings = {
"defaultProvider" = "opencode-go";
"defaultModel" = "mimo-v2.5";
"defaultThinkingLevel" = "medium";
"litellm" = {
"providers" = {
"litellm" = {
"displayName" = "scuggo";
"baseUrl" = "https://ai-proxy.fwds.scug.io";
"apiKey" = "$SCUG_IO_API_KEY";
"compat" = {
"sendSessionAffinityHeaders" = true;
};
};
};
"skills" = {
"enabled" = true;
};
"compat" = {
"sendSessionAffinityHeaders" = true;
};
};
"mcp" = {
"enabled" = true;
@@ -48,24 +45,26 @@
# "npm:@odinlayer/pi-provider-litellm"
"npm:pi-provider-litellm"
# Web search / content extraction (opencode-crawlberg + opencode-html-to-markdown equivalent)
"npm:pi-web-access"
# "npm:pi-web-access"
# Local document parsing / OCR (opencode-xberg equivalent)
"npm:pi-docparser"
# "npm:@gotgenes/pi-permission-system"
"npm:@vanillagreen/pi-extension-manager"
# "npm:@vanillagreen/pi-extension-manager"
# "npm:@vanillagreen/pi-qol"
"npm:pi-vitals"
"npm:pi-spark"
# "npm:pi-spark"
# "npm:pi-caveman"
"npm:@tmustier/pi-usage-extension"
"npm:@heyhuynhgiabuu/pi-pretty"
"npm:pi-lens"
# "npm:pi-lens"
# "npm:pi-lean-ctx"
# "npm:@rohaquinlop/pi-deepseek-cache"
"npm:pi-cache-optimizer"
"npm:pi-opencode-go-cache"
"npm:@pi-vault/pi-dcp"
"git:github.com/DietrichGebert/ponytail"
"npm:pi-open-tui"
# "npm:pi-commandcode-provider"
];
};
context = ''
@@ -172,16 +171,26 @@
"type" = "api_key";
"key" = "$OPENCODE_GO_API_KEY";
};
# "command-code" = {
# "type" = "api_key";
# "key" = "$COMMANDCODE_API_KEY";
# };
};
};
# Cache/routing compat overrides (provider-level minimal)
home.file.".pi/agent/models.json" = {
text = builtins.toJSON {
providers = {
"providers" = {
"opencode" = {
"compat" = {
"sendSessionAffinityHeaders" = true;
};
};
"opencode-go" = {
compat = {
supportsLongCacheRetention = true;
"compat" = {
"supportsLongCacheRetention" = true;
"sendSessionAffinityHeaders" = true;
};
};
};
@@ -218,6 +227,45 @@
};
};
# open-tui.json config
home.file.".pi/agent/open-tui.json" = {
text = builtins.toJSON {
enabled = true;
settingsLanguage = "en";
cursorStyle = "block";
fullscreen = {
wheelScrollLines = 4;
};
icons = {
mode = "auto";
};
footerSegments = {
cwd = true;
sessionName = false;
gitBranch = true;
gitStatus = true;
gitCommit = false;
runtime = true;
context = true;
tokens = true;
cost = true;
extensionStatuses = false;
};
telemetry = {
enabled = true;
tps = false;
ttft = false;
duration = true;
tokens = true;
stalls = true;
cost = true;
};
thinkingPeek = {
lines = 1;
};
};
};
# pi-spark config
home.file.".pi/agent/spark.json" = {
text = builtins.toJSON {
+8
View File
@@ -17,6 +17,11 @@
path = config.home.homeDirectory + "/.secrets/opencode-go-zen-key";
sopsFile = ../secrets/content/secrets.yaml;
};
secrets.commandcode-key = {
# Decrypted file path (available at runtime, not eval time)
path = config.home.homeDirectory + "/.secrets/commandcode-key";
sopsFile = ../secrets/content/secrets.yaml;
};
};
programs.fish = {
shellInit = ''
@@ -26,6 +31,9 @@
if test -f "$HOME/.secrets/opencode-go-zen-key"
set -x OPENCODE_GO_API_KEY (cat "$HOME/.secrets/opencode-go-zen-key")
end
if test -f "$HOME/.secrets/commandcode-key"
set -x COMMANDCODE_API_KEY (cat "$HOME/.secrets/commandcode-key")
end
'';
};
};
+64
View File
@@ -0,0 +1,64 @@
{ modules, inputs, ... }: {
flake-file.inputs = {
barbar.url = "git+https://git.scug.io/doloro/barbar?ref=master";
};
modules.barbar = {
homeManager = { pkgs, ... }: {
imports = [ inputs.barbar.homeManagerModules.default ];
programs.barbar = {
enable = true;
settings = {
display = {
monitor = "DP-2";
height = 20;
antialiasing = true;
default_text_size = 14.0;
padding = 4.0;
spacing = 8.0;
# Absolute store path: barbar resolves `[display].theme` against
# its cwd, which is not the home dir under systemd.
theme = "${pkgs.writeText "barbar-base16.yaml" ''
scheme: "Gruvbox dark, medium"
author: "https://github.com/morhetz/gruvbox"
base00: "282828" # bg
base01: "3c3836" # bg1
base02: "504945" # bg2
base03: "665c54" # bg3
base04: "bdae93" # fg4
base05: "d5c4a1" # fg
base06: "ebdbb2" # fg2
base07: "fbf1c7" # fg0
base08: "fb4934" # red
base09: "fe8019" # orange
base0A: "fabd2f" # yellow
base0B: "b8bb26" # green
base0C: "8ec07c" # aqua
base0D: "83a598" # blue
base0E: "d3869b" # purple
base0F: "d65d0e" # brown
''}";
};
order = {
left = [ "workspaces" ];
middle = [ ];
right = [
"audio"
"clock"
];
};
modules.clock.show_seconds = false;
modules.workspaces = {
count = 10;
gap = 3.0;
slot_w = 10.0;
slot_h = 17.0;
radius = 2.5;
scale_active = 1.0;
scale_exists = 0.85;
scale_absent = 0.65;
};
};
};
};
};
}
+3 -3
View File
@@ -14,9 +14,9 @@
email = "doloroo@proton.me";
signingKey = "089B373588540877";
};
commit = {
gpgSign = true;
};
# commit = {
# gpgSign = true;
# };
pull = {
rebase = true;
};
+4 -10
View File
@@ -15,7 +15,7 @@
};
modules.helium = settings: {
homeManager =
{ pkgs, ... }:
{ pkgs, lib, ... }:
let
heliumPkg = inputs.heliumFlake.packages.${pkgs.stdenv.hostPlatform.system}.helium;
# The upstream `helium` launcher is a plain Nix wrapper that ignores any
@@ -53,15 +53,9 @@
xdg.configFile."net.imput.helium/WidevineCdm/latest-component-updated-widevine-cdm" = {
text = ''{"Path":"${pkgs.widevine-cdm}/share/google/chrome/WidevineCdm"}'';
};
wayland.windowManager.hyprland.extraLuaFiles = lib.mkIf settings.default {
"helium-bind.lua" = {
autoLoad = true;
content = ''
-- Helium launcher bind (lua config: settings.bind cannot express dispatchers)
hl.bind("SUPER + E", hl.dsp.exec_cmd("helium"))
'';
};
};
wayland.windowManager.hyprland.settings.bind = lib.mkIf settings.default [
{ _args = [ "SUPER + E" (lib.generators.mkLuaInline ''hl.dsp.exec_cmd("helium")'') ]; }
];
};
};
}
+425 -161
View File
@@ -5,11 +5,12 @@
doloro-settings = {
includes = [
modules.dunst
modules.hyprlock
];
homeManager =
{
pkgs,
home,
lib,
...
}:
let
@@ -34,175 +35,96 @@
mreowScript = pkgs.writeShellScript "mreow" ''
exec $(tofi-drun -c ${tofiCfg})
'';
mainMod = "SUPER";
hlBind = key: dispatcher: "hl.bind(\"${key}\", ${dispatcher})";
workspaceLines = pkgs.lib.concatLists (
# Each `settings.<fn>` list entry renders as `hl.<fn>(<table>)`.
# `_args` renders a multi-argument call instead of one Lua table,
# and mkLuaInline passes raw Lua through for dispatchers.
dsp = lib.generators.mkLuaInline;
bind = key: dispatcher: {
_args = [
key
dispatcher
];
};
bezier = name: points: {
_args = [
name
{
type = "bezier";
inherit points;
}
];
};
wsBinds = lib.concatLists (
builtins.genList (
i:
let
ws = toString (i + 1);
in
[
(hlBind "${mainMod} + ${ws}" "hl.dsp.focus({ workspace = ${ws} })")
(hlBind "${mainMod} + SHIFT + ${ws}" "hl.dsp.window.move({ workspace = ${ws} })")
(bind "${mainMod} + ${ws}" (dsp "hl.dsp.focus({ workspace = ${ws} })"))
(bind "${mainMod} + SHIFT + ${ws}" (dsp "hl.dsp.window.move({ workspace = ${ws} })"))
]
) 9
);
hlBindCode = pkgs.lib.concatStringsSep "\n" (
[
"-- Hyprland configuration"
""
"local mainMod = \"${mainMod}\""
""
"-- Config"
"hl.config({"
" general = {"
" gaps_in = 1,"
" gaps_out = 1,"
" border_size = 1,"
" resize_on_border = false,"
" allow_tearing = true,"
" layout = \"dwindle\","
" },"
" input = {"
" follow_mouse = 2,"
" kb_layout = \"gb\","
" },"
" decoration = {"
" rounding = 4,"
" rounding_power = 1,"
" active_opacity = 1.0,"
" inactive_opacity = 1.0,"
" shadow = {"
" enabled = false,"
" },"
" blur = {"
" enabled = true,"
" passes = 1,"
" new_optimizations = true,"
" ignore_opacity = false,"
" },"
" },"
" cursor = {"
" no_hardware_cursors = false,"
" },"
" dwindle = {"
" preserve_split = true,"
" },"
" misc = {"
" force_default_wallpaper = -1,"
" disable_hyprland_logo = false,"
" enable_anr_dialog = false,"
" },"
"})"
""
"-- Monitors"
"hl.monitor({ output = \"HDMI-A-1\", mode = \"1920x1080@60\", position = \"0x0\", scale = \"1\" })"
"hl.monitor({ output = \"DP-2\", mode = \"1920x1080@120\", position = \"1920x0\", scale = \"1\" })"
""
"-- Input"
"hl.device({ name = \"default\", kb_layout = \"gb\", sensitivity = -0.5 })"
""
"-- Curves"
"hl.curve(\"easeOutQuint\", { type = \"bezier\", points = { {0.23, 1}, {0.32, 1} } })"
"hl.curve(\"easeInOutCubic\", { type = \"bezier\", points = { {0.65, 0.05}, {0.36, 1} } })"
"hl.curve(\"linear\", { type = \"bezier\", points = { {0, 0}, {1, 1} } })"
"hl.curve(\"almostLinear\", { type = \"bezier\", points = { {0.5, 0.5}, {0.75, 1} } })"
"hl.curve(\"quick\", { type = \"bezier\", points = { {0.15, 0}, {0.1, 1} } })"
""
"-- Animations"
"hl.animation({ leaf = \"global\", enabled = true, speed = 10, bezier = \"default\" })"
"hl.animation({ leaf = \"border\", enabled = true, speed = 5.39, bezier = \"easeOutQuint\" })"
"hl.animation({ leaf = \"windows\", enabled = true, speed = 2.79, bezier = \"easeOutQuint\" })"
"hl.animation({ leaf = \"windowsIn\", enabled = true, speed = 1, bezier = \"easeOutQuint\", style = \"popin 87%\" })"
"hl.animation({ leaf = \"windowsOut\", enabled = true, speed = 1, bezier = \"linear\", style = \"popin 87%\" })"
"hl.animation({ leaf = \"windowsMove\", enabled = true, speed = 1, bezier = \"easeInOutCubic\" })"
"hl.animation({ leaf = \"fadeIn\", enabled = true, speed = 0.5, bezier = \"almostLinear\" })"
"hl.animation({ leaf = \"fadeOut\", enabled = true, speed = 0.5, bezier = \"almostLinear\" })"
"hl.animation({ leaf = \"fade\", enabled = true, speed = 1, bezier = \"quick\" })"
"hl.animation({ leaf = \"layers\", enabled = true, speed = 3.81, bezier = \"easeOutQuint\" })"
"hl.animation({ leaf = \"layersIn\", enabled = true, speed = 4, bezier = \"easeOutQuint\", style = \"fade\" })"
"hl.animation({ leaf = \"layersOut\", enabled = true, speed = 1.5, bezier = \"linear\", style = \"fade\" })"
"hl.animation({ leaf = \"fadeLayersIn\", enabled = true, speed = 1.79, bezier = \"almostLinear\" })"
"hl.animation({ leaf = \"fadeLayersOut\", enabled = true, speed = 1.39, bezier = \"almostLinear\" })"
"hl.animation({ leaf = \"workspaces\", enabled = true, speed = 1, bezier = \"almostLinear\", style = \"slide\" })"
"hl.animation({ leaf = \"workspacesIn\", enabled = true, speed = 1, bezier = \"easeInOutCubic\", style = \"slide\" })"
"hl.animation({ leaf = \"workspacesOut\", enabled = true, speed = 1, bezier = \"easeInOutCubic\", style = \"slide\" })"
"hl.animation({ leaf = \"zoomFactor\", enabled = true, speed = 7, bezier = \"quick\" })"
""
"-- Binds"
(hlBind "${mainMod} + R" "hl.dsp.exec_cmd(\"${mreowScript}\")")
(hlBind "${mainMod} + C" "hl.dsp.window.close()")
(hlBind "${mainMod} + M" "hl.dsp.exec_cmd(\"uwsm stop\")")
(hlBind "${mainMod} + Q" "hl.dsp.exec_cmd(\"kitty\")")
(hlBind "${mainMod} + V" "hl.dsp.window.float({ action = \"toggle\" })")
(hlBind "${mainMod} + left" "hl.dsp.focus({ direction = \"left\" })")
(hlBind "${mainMod} + right" "hl.dsp.focus({ direction = \"right\" })")
(hlBind "${mainMod} + up" "hl.dsp.focus({ direction = \"up\" })")
(hlBind "${mainMod} + down" "hl.dsp.focus({ direction = \"down\" })")
(hlBind "${mainMod} + L" "hl.dsp.exec_cmd(\"wlogout\")")
(hlBind "${mainMod} + S" "hl.dsp.exec_cmd(\"wayfreeze --after-freeze-cmd '${meowScript}'\")")
(hlBind "${mainMod} + F" "hl.dsp.window.fullscreen({ action = \"toggle\" })")
(hlBind "${mainMod} + SHIFT + Q" "hl.dsp.window.close()")
(hlBind "${mainMod} + mouse_down" "hl.dsp.focus({ workspace = \"e+1\" })")
(hlBind "${mainMod} + mouse_up" "hl.dsp.focus({ workspace = \"e-1\" })")
""
"-- Mouse binds"
(hlBind "${mainMod} + mouse:272" "hl.dsp.window.drag()")
(hlBind "${mainMod} + mouse:273" "hl.dsp.window.resize()")
""
"-- Media keys"
(hlBind "XF86AudioLowerVolume" "hl.dsp.exec_cmd(\"wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-\")")
(hlBind "XF86AudioRaiseVolume" "hl.dsp.exec_cmd(\"wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+\")")
(hlBind "XF86AudioMute" "hl.dsp.exec_cmd(\"wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle\")")
(hlBind "XF86AudioPlay" "hl.dsp.exec_cmd(\"playerctl play-pause\")")
(hlBind "XF86AudioNext" "hl.dsp.exec_cmd(\"playerctl next\")")
(hlBind "XF86AudioPrev" "hl.dsp.exec_cmd(\"playerctl previous\")")
(hlBind "XF86AudioMicMute" "hl.dsp.exec_cmd(\"wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle\")")
(hlBind "home" "hl.dsp.exec_cmd(\"wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle\")")
(hlBind "end" "hl.dsp.exec_cmd(\"wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle\")")
(hlBind "F8" "hl.dsp.pass({ window = [[match:class:^(com.obsproject.Studio)$]] })")
""
"-- Workspaces"
(hlBind "${mainMod} + 0" "hl.dsp.focus({ workspace = 10 })")
(hlBind "${mainMod} + SHIFT + 0" "hl.dsp.window.move({ workspace = 10 })")
]
++ workspaceLines
++ [
""
"-- Window rules"
"hl.window_rule({ suppress_event = \"maximize\" })"
"hl.window_rule({ match = { class = \"gamescope\" }, workspace = \"5\", immediate = true, confine_pointer = true })"
"hl.window_rule({ match = { initial_title = \"OBS Studio Crash Detected\" }, pin = true })"
"hl.window_rule({ match = { initial_title = \"Discord Popout\" }, workspace = \"1 silent\" })"
""
"-- Layer rules"
"hl.layer_rule({ match = { namespace = \"notifications\" }, no_screen_share = true })"
""
"-- Host-specific overrides: load ~/.config/hypr/hyprland-local.lua if present (must be valid Lua)"
"local home = os.getenv(\"HOME\")"
"if home then"
" local localPath = home .. '/.config/hypr/hyprland-local.lua'"
" local f = io.open(localPath, 'r')"
" if f then"
" f:close()"
" local chunk, err = loadfile(localPath)"
" if chunk then chunk() else io.stderr:write('hyprland-local.lua error: ' .. err .. '\\n') end"
" end"
"end"
]
);
in
{
home.packages = [
pkgs.hyprcursor
pkgs.wlogout
pkgs.hyprshutdown
pkgs.tofi
pkgs.killall
pkgs.grim
pkgs.slurp
pkgs.wayclip
];
# wlogout menu. Default layout, except Shutdown hands off to
# hyprshutdown so apps close gracefully before poweroff.
# programs.wlogout only accepts one command per button, so
# --post-cmd carries the actual poweroff.
programs.wlogout = {
enable = true;
layout = [
{
label = "lock";
action = "hyprlock";
text = "Lock";
keybind = "l";
}
{
label = "hibernate";
action = "systemctl hibernate";
text = "Hibernate";
keybind = "h";
}
{
label = "logout";
action = "loginctl terminate-user $USER";
text = "Logout";
keybind = "e";
}
{
label = "shutdown";
action = "hyprshutdown --post-cmd 'systemctl poweroff'";
text = "Shutdown";
keybind = "s";
}
{
label = "suspend";
action = "systemctl suspend";
text = "Suspend";
keybind = "u";
}
{
label = "reboot";
action = "hyprshutdown --post-cmd 'systemctl reboot'";
text = "Reboot";
keybind = "r";
}
];
};
home.pointerCursor = {
enable = true;
name = "rose-pine-hyprcursor";
@@ -225,17 +147,359 @@
];
};
};
# systemd.user.services.hyprpaper = {
# partOf = [ "hyprland-session.target" ];
# after = [ "hyprland-session.target" ];
# };
# Hand-written config as extraLuaFile so Home Manager still
# generates hypr/hyprland.lua itself, including the systemd
# session activation hooks (hyprland-session.target start/stop
# + dbus-update-activation-environment --systemd --all).
wayland.windowManager.hyprland.extraLuaFiles."hl-main.lua" = {
autoLoad = true;
content = hlBindCode;
# The systemd session activation hooks (hyprland-session.target
# start/stop + dbus-update-activation-environment --systemd --all)
# are still generated by Home Manager; only the imperative tail of
# the config needs raw Lua.
wayland.windowManager.hyprland = {
settings = {
config = {
general = {
gaps_in = 1;
gaps_out = 1;
border_size = 1;
resize_on_border = false;
allow_tearing = true;
layout = "dwindle";
};
input = {
follow_mouse = 2;
kb_layout = "gb";
};
decoration = {
rounding = 4;
rounding_power = 1;
active_opacity = 1.0;
inactive_opacity = 1.0;
shadow.enabled = false;
blur = {
enabled = true;
passes = 1;
new_optimizations = true;
ignore_opacity = false;
};
};
cursor.default_monitor = "DP-2";
cursor.no_hardware_cursors = false;
dwindle.preserve_split = true;
misc = {
force_default_wallpaper = -1;
disable_hyprland_logo = false;
enable_anr_dialog = false;
};
};
monitor = [
{
output = "HDMI-A-1";
mode = "1920x1080@60";
position = "0x0";
scale = "1";
}
{
output = "DP-2";
mode = "1920x1080@120";
position = "1920x0";
scale = "1";
}
];
workspace_rule = [
{
workspace = "2";
monitor = "DP-2";
default = true;
}
]
++ builtins.genList (i: {
workspace = toString (i + 2);
monitor = "DP-2";
}) 9;
device = {
name = "default";
kb_layout = "gb";
sensitivity = -0.5;
};
# Curves are sorted ahead of animations by the module's
# `importantPrefixes` default, so the beziers exist by name.
curve = [
(bezier "easeOutQuint" [
[
0.23
1
]
[
0.32
1
]
])
(bezier "easeInOutCubic" [
[
0.65
0.05
]
[
0.36
1
]
])
(bezier "linear" [
[
0
0
]
[
1
1
]
])
(bezier "almostLinear" [
[
0.5
0.5
]
[
0.75
1
]
])
(bezier "quick" [
[
0.15
0
]
[
0.1
1
]
])
];
animation = [
{
leaf = "global";
enabled = true;
speed = 10;
bezier = "default";
}
{
leaf = "border";
enabled = true;
speed = 5.39;
bezier = "easeOutQuint";
}
{
leaf = "windows";
enabled = true;
speed = 2.79;
bezier = "easeOutQuint";
}
{
leaf = "windowsIn";
enabled = true;
speed = 1;
bezier = "easeOutQuint";
style = "popin 87%";
}
{
leaf = "windowsOut";
enabled = true;
speed = 1;
bezier = "linear";
style = "popin 87%";
}
{
leaf = "windowsMove";
enabled = true;
speed = 1;
bezier = "easeInOutCubic";
}
{
leaf = "fadeIn";
enabled = true;
speed = 0.5;
bezier = "almostLinear";
}
{
leaf = "fadeOut";
enabled = true;
speed = 0.5;
bezier = "almostLinear";
}
{
leaf = "fade";
enabled = true;
speed = 1;
bezier = "quick";
}
{
leaf = "layers";
enabled = true;
speed = 3.81;
bezier = "easeOutQuint";
}
{
leaf = "layersIn";
enabled = true;
speed = 4;
bezier = "easeOutQuint";
style = "fade";
}
{
leaf = "layersOut";
enabled = true;
speed = 1.5;
bezier = "linear";
style = "fade";
}
{
leaf = "fadeLayersIn";
enabled = true;
speed = 1.79;
bezier = "almostLinear";
}
{
leaf = "fadeLayersOut";
enabled = true;
speed = 1.39;
bezier = "almostLinear";
}
{
leaf = "workspaces";
enabled = true;
speed = 1;
bezier = "almostLinear";
style = "slide";
}
{
leaf = "workspacesIn";
enabled = true;
speed = 1;
bezier = "easeInOutCubic";
style = "slide";
}
{
leaf = "workspacesOut";
enabled = true;
speed = 1;
bezier = "easeInOutCubic";
style = "slide";
}
{
leaf = "zoomFactor";
enabled = true;
speed = 7;
bezier = "quick";
}
];
bind = [
(bind "${mainMod} + R" (dsp ''hl.dsp.exec_cmd("${mreowScript}")''))
(bind "${mainMod} + C" (dsp "hl.dsp.window.close()"))
(bind "${mainMod} + M" (dsp ''hl.dsp.exec_cmd("uwsm stop")''))
(bind "${mainMod} + Q" (dsp ''hl.dsp.exec_cmd("kitty")''))
(bind "${mainMod} + V" (dsp ''hl.dsp.window.float({ action = "toggle" })''))
(bind "${mainMod} + left" (dsp ''hl.dsp.focus({ direction = "left" })''))
(bind "${mainMod} + right" (dsp ''hl.dsp.focus({ direction = "right" })''))
(bind "${mainMod} + up" (dsp ''hl.dsp.focus({ direction = "up" })''))
(bind "${mainMod} + down" (dsp ''hl.dsp.focus({ direction = "down" })''))
(bind "${mainMod} + L" (dsp ''hl.dsp.exec_cmd("wlogout")''))
(bind "${mainMod} + S" (dsp ''hl.dsp.exec_cmd("wayfreeze --after-freeze-cmd '${meowScript}'")''))
(bind "${mainMod} + F" (dsp ''hl.dsp.window.fullscreen({ action = "toggle" })''))
(bind "${mainMod} + SHIFT + Q" (dsp "hl.dsp.window.close()"))
(bind "${mainMod} + mouse_down" (dsp ''hl.dsp.focus({ workspace = "e+1" })''))
(bind "${mainMod} + mouse_up" (dsp ''hl.dsp.focus({ workspace = "e-1" })''))
# Mouse binds
(bind "${mainMod} + mouse:272" (dsp "hl.dsp.window.drag()"))
(bind "${mainMod} + mouse:273" (dsp "hl.dsp.window.resize()"))
# Media keys
(bind "XF86AudioLowerVolume" (dsp ''hl.dsp.exec_cmd("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-")''))
(bind "XF86AudioRaiseVolume" (dsp ''hl.dsp.exec_cmd("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+")''))
(bind "XF86AudioMute" (dsp ''hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle")''))
(bind "XF86AudioPlay" (dsp ''hl.dsp.exec_cmd("playerctl play-pause")''))
(bind "XF86AudioNext" (dsp ''hl.dsp.exec_cmd("playerctl next")''))
(bind "XF86AudioPrev" (dsp ''hl.dsp.exec_cmd("playerctl previous")''))
(bind "XF86AudioMicMute" (dsp ''hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle")''))
(bind "home" (dsp ''hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle")''))
(bind "end" (dsp ''hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle")''))
(bind "F8" (dsp "hl.dsp.pass({ window = [[match:class:^(com.obsproject.Studio)$]] })"))
# Workspaces
(bind "${mainMod} + 0" (dsp "hl.dsp.focus({ workspace = 10 })"))
(bind "${mainMod} + SHIFT + 0" (dsp "hl.dsp.window.move({ workspace = 10 })"))
]
++ wsBinds;
window_rule = [
{ suppress_event = "maximize"; }
{
match.class = "gamescope";
workspace = "5";
immediate = true;
confine_pointer = true;
}
{
match.initial_title = "OBS Studio Crash Detected";
pin = true;
}
# Steam, Discord (equibop), Telegram, Spotify and OBS
# always open on their own workspace regardless of how
# they were launched. These sit before the "Discord
# Popout" rule: window rules apply in declaration order
# and the last match wins, so popouts still land on
# workspace 1.
{
match.class = "steam";
workspace = "6 silent";
}
{
match.class = "equibop";
workspace = "8 silent";
}
{
match.class = "org.telegram.desktop";
workspace = "8 silent";
}
{
match.class = "spotify";
workspace = "9 silent";
}
{
match.class = "com.obsproject.Studio";
workspace = "10 silent";
}
{
match.initial_title = "Discord Popout";
workspace = "1 silent";
}
];
layer_rule = [
{
match.namespace = "notifications";
no_screen_share = true;
}
];
};
# Host-specific overrides: load ~/.config/hypr/hyprland-local.lua
# if present (must be valid Lua). Runs last so a host can override
# anything set above.
extraConfig = ''
local home = os.getenv("HOME")
if home then
local localPath = home .. '/.config/hypr/hyprland-local.lua'
local f = io.open(localPath, 'r')
if f then
f:close()
local chunk, err = loadfile(localPath)
if chunk then chunk() else io.stderr:write('hyprland-local.lua error: ' .. err .. '\n') end
end
end
'';
};
};
};
+62
View File
@@ -0,0 +1,62 @@
{ modules, ... }:
{
modules.hyprlock = {
homeManager =
_:
let
# Palette extracted from the hyprpaper wallpaper so the input field
# matches the background. Regenerate and update when Wallpaper.jpg
# changes:
# nix run nixpkgs#matugen -- image ~/Wallpaper.jpg -m dark \
# --source-color-index 0 --dry-run --show-colors
#
# name (matugen token) hex rgb()
primary = "rgb(135, 209, 235)"; # #87D1EB accent / success
tertiary = "rgb(194, 195, 235)"; # #C2C3EB capslock
error = "rgb(255, 180, 171)"; # #FFB4AB failure
outline = "rgb(137, 146, 150)"; # #899296 neutral border
on_surface = "rgb(222, 227, 230)"; # #DEE3E6 text/dots
inner_color = "rgba(27, 32, 35, 0.6)"; # #1B2023 @ 60%
in
{
programs.hyprlock = {
enable = true;
settings = {
# Reuse the hyprpaper wallpaper (see doloro-settings hyprpaper
# config) as the lock screen background. monitor = "" covers every
# output.
background = [
{
monitor = "";
path = "/home/doloro/Wallpaper.jpg";
}
];
# hyprlock has no input-field by default, so one must be declared
# explicitly or there is no password prompt to unlock with.
input-field = [
{
monitor = "DP-2";
size = "200, 50";
position = "0, -80";
rounding = 4;
dots_center = true;
dots_size = 0.33;
hide_input = false;
fade_on_empty = false;
font_family = "CaskaydiaCove Nerd Font Mono";
placeholder_text = ''<span foreground="##899296">Password...</span>'';
fail_text = ''<i>$FAIL <b>($ATTEMPTS)</b></i>'';
inherit inner_color;
outer_color = outline;
check_color = primary;
fail_color = error;
capslock_color = tertiary;
font_color = on_surface;
}
];
};
};
};
nixos.security.pam.services.hyprlock = { };
};
}
+2 -2
View File
@@ -17,8 +17,8 @@
background_opacity = 0.6;
cursor_trail = 1;
auto_reload_config = -1;
input_delay = 1;
repaint_delay = 2;
# input_delay = 1;
# repaint_delay = 2;
wayland_enable_ime = "no";
};
};
+14 -2
View File
@@ -42,6 +42,17 @@
# nvim-cmp on rtp during the require check (cmp_lsp_rs requires cmp.types.lsp at load time)
dependencies = [ pkgs.vimPlugins.nvim-cmp ];
};
treesitter-rhai-grammar = pkgs.tree-sitter.buildGrammar {
language = "rhai";
version = "0.0.0+rev=4ac7384";
src = pkgs.fetchFromGitHub {
owner = "elkowar";
repo = "tree-sitter-rhai";
rev = "4ac7384d487ffcb54e746ef1569585a749370c5b";
hash = "sha256-XGGcEGHke/O00STKqwSk9jGj91Xm2LE2KxwwX5+bBg0=";
};
meta.homepage = "https://github.com/elkowar/tree-sitter-rhai";
};
in
{
imports = [
@@ -298,7 +309,7 @@
wakatime.enable = true;
treesitter = {
enable = true;
grammarPackages = with pkgs.vimPlugins.nvim-treesitter.builtGrammars; [
grammarPackages = (with pkgs.vimPlugins.nvim-treesitter.builtGrammars; [
bash
css
html
@@ -318,7 +329,7 @@
xml
yaml
svelte
];
]) ++ [ treesitter-rhai-grammar ];
settings = {
highlight.enable = true;
indent.enable = false;
@@ -328,6 +339,7 @@
extraPlugins = with pkgs; [
tiny-code-action
cmp-lsp-rs
treesitter-rhai-grammar
];
opts = {
number = true;
+39 -38
View File
@@ -5,72 +5,73 @@ meow: ENC[AES256_GCM,data:JVzenw==,iv:oCOo9//r5s2K4pSeH5UNEj0LL+9h2yq0G0DPOfwjmy
meoww: ENC[AES256_GCM,data:WPeszDfMWxY=,iv:JJMOror5wj7cTNKfrUj2LDXlO3WCKzb7jk4AeZ0oD+Q=,tag:qs3oyM7K1FGy5cXvS6OHpQ==,type:str]
scug-io-ai-key: ENC[AES256_GCM,data:b2AT2+A5eoGa1eZsCYKDFg449sOgffDcQA==,iv:NDIS3x1unq6/UtjtsyBTHx5v12utagDA3BbNzs5v3L0=,tag:MhbJGATIDWyOZUqXqRAeVA==,type:str]
opencode-go-zen-key: ENC[AES256_GCM,data:fwgV/QK+4tpizC6J3evbGxD57BQCWn5Eyex7iIeNYCQHk6ZD8eTukqhUbLcfXyO4RQot3B1B2xbQVVBsuOWWcQYQKA==,iv:aKwQM8d0gP+MyuqWFk2VfOWDgKPcE/HAvL0I0r6o1nU=,tag:/AeSgscy0mxUMwoP8LaCXg==,type:str]
commandcode-key: ENC[AES256_GCM,data:LJBlDoYslglFOpJnySLdPx5sEv67wR/EzJahQh6rvMyCrSCLjqH8oErynYCaGjbAh5Rh+rKxp9vmnv03rxQiL114gxBipqUmzrr9lSUfesyZ2krhljFf6WFen2Q=,iv:IAP72IShIZoJEVdppGSl3/J5BO9GemPVHbHYjZck9+w=,tag:j1GpvC7981wKxPIZaLKyzA==,type:str]
sops:
age:
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA3cWRPRFBiWTNMS2hVa2tn
UmgvRmM1M2s3RzZVYTlySjAwTE0wTVpJRkNBCjlNemFFSnppa29LR2RlaytCYzNa
ei9Hd0FocHIwUmE2WWF3ZDd3ZWhLQkUKLS0tIDVxWi9aenJOZmpqQytiWWNpdVIv
NkFTclRvamJkc0VaTnRNNlBXQzJZVWMK8qtP/I6ozD/MYADe3OpSiQxWlQY8+i0M
U+athbmQoZznqqyhaldoTA0SU+8yBYBVG5i3law10zQwq6VoNQ2DpQ==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBvaG1YSUF0UUFmV0QzbFA1
RnhlRVNWQ3h6R0xMcmIvM0EzNGJleUxSTTJzCi81QWpMdXJxQWYreE9DUnJGeHF6
SUI1d2wxY016dHhxSHdsL3NXUUt2SncKLS0tIENjMkJERFlMMEU0TVFFM1lubUtF
OTlaSlRPTUt5d3NjNVF4NFJaMkJsUUEKvjnPwfODT5D8pWp8lrksyfvpC822xZ0h
GV4pwteQG/iIRDa71ScR8yolFaI6gZb8BMu93fdd130OHw1ySMGr0A==
-----END AGE ENCRYPTED FILE-----
recipient: age1ykcy2r4kk729e7adqxu8s24ujc60z5eux7ma0ca4ruzydwgm5p6qmdp838
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBJaXgzQlFIZitsVUl1d0Q4
M05DNnVJd3Fmb1JUNXdpbVVCKzBXL2dLZlRFCldyWitrbndUSm8welNUbEtRWkww
Z0o4REd2U1dWQjUyZmVlWDVHTTVEVFkKLS0tIFhYeTY2SkIydEJHSVZFUFdvMW9Z
cU1wQlVmekh1Q0l3cWtnWU9hUWJabXMKdO3OXTh6HTaoIc95Y/aooK/JNBvwBwf5
YFu+AdB/HezRpS+Z2dMvZU/i38OadoWNlDOO8YWuQcH0R7nddd1f8g==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBkeHkyektGNEpEdzhySERs
VW1PVzgvUjZWbG5sbG8zTllvMWVzV0w4M2lrCnJHd3lqYXRDNEhBa2pRUmJCTXg3
Z3RTaXhuczV6QjV3MkV0RVFURlgxOHcKLS0tIHFKajZlMk84eGk3d05xVTR2ZzN0
ajRQeW16ZzJZb1NhSVBwZlVtRGs0KzQKJfdPbIftdtckf5m4Tom+eiVhh888Y3Am
wDG0eui4p+fueF3Eirpwlei+KxMFlaXdpIBrnKL+Ep9lQtuF/Jh7Dg==
-----END AGE ENCRYPTED FILE-----
recipient: age1e6vws55p0g23qzthm4qa93hpt6lqmck6670gkygph0sc0j7my4uq5wqjfh
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAvREhMWDFuZnlLUU1qWGtw
bklZZldhVU5ZV2tTQXRBTkM5WWN4TjB6V1NjCis0K2hIZDRJMDFKc3paTUZvaXhV
Y1R2R01mSkFEdjV6M1I4QXlVQWF1a0kKLS0tIG9oNjBPR3laTXZLMVd3UnpkaTBY
T1d5TVd4d250SnAyT2cwUlI2T2tvdVEKYV6Or6Wkw4xujh4NgyZMaWASFZCu6BAl
RW2rLdaaaQ9PW/CUWqxCQj+7gotI9YIbdWJ8Wl3eVf2YD9UeguCHvg==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBlZXJjNW54V1MwR1k3V3By
bUdIRFdBclJyVVdMVE1ucHNtcnBkTWpsNlUwCnJMUU8vd3Q5aHc4RU5NRzZpQnZQ
dTBIS2U5R09LQkFJZ1VkNHdtNnJaQ3cKLS0tIGcrKzNkS25BWGYzZUgzQTVUUzJo
a0d1Sm54enlZMEV3dXQzb1o5WlRwZlkKvLmWcazC7TYVJsozaxTnWv5xMLOuXYHf
pU2KWjd6RRzoDKW/uizeTmXQzkYRWrrWW4PCXmOpK9XZt4iTJfuTqQ==
-----END AGE ENCRYPTED FILE-----
recipient: age1x3lahhkefkap67cdmdjcqaxan9hp62er78akr79v9m73nvgugpeqk0y32a
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB3R3hTRFFYeTFERXVjYlEy
eVdmZmczczhtbmdhYjJ2UGNieXRkNVY5NGhvCkZxM1VYUEFWWmkySTYraWpxTXdD
dTVPT1ZOZDQ2WGZjQXduNGRLNlFPcGMKLS0tIGhrbWpnd3NwYTV1QlR0WHpIMlpR
bVNtU3RjbWxjdmlObjFrYjg2U3Z1R2MKYFdrjKL7wET8KPN9zn5atzyTZYBHJkES
jgUVuozEqbJ6jo1FNEn2SuXpfaSoCEyPWAajNoXFxaPVycOFVa+o3g==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBsQ2hIdGc3eWorLzByV1RO
VVlzd0ZMUWVPMU4xWThsOUFtRkp6b1ZjQndZCkJJT2ZoZWxad0xzN2R3MnlDZlUw
NzRyUVllZ092RUhLUzZ6cHY4b3c0ZXcKLS0tIC9JN211V01TWG5VcjVOQ2Nuc3Na
c1NOaTg3ZVpRc0Q2TWV0djZqRFp1aE0KHDr4n+nbkRUKKdVgOm9+KU00hvLxR9Vs
2HwTIJEftEWZotf+0cuuEM6SBOpvitUeGC+ZsAoLg8upyFi0ewxqsg==
-----END AGE ENCRYPTED FILE-----
recipient: age1exzngtk4d9vcsmcq6ap5xx3ca9qacqjkrv86ymged7msx9z6vfyqsf5sjq
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBRbytMdzZydmE4TXhEWGZT
NWl5Yk5qdE02OU9Kc0VpN2MxQ2VRaWdTQUd3CnQrSUIxaWl6MC9HcmRWcnZ1VVJo
UituaDNKZTI5NzNxZDRDaUhiQjIzNGcKLS0tIGYvQ1NsYnd0RytKc0E1aTFlOUFn
VXBoYmxFMy93a3lESExSekhQOUpzYUEKa33dhwpwnYrG+ZAtfeNtLsjgawUA55wo
2/xPrsUmHDAQmEx4R1A2LolEyYxNqGlIhBXePFRVwh2+oBSaLLdVcQ==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB5aWFUSmJQamdEOVcvRXlY
R2ZMYS9qM0Zna09ScjVCVWNHaUJTNVRuL1RrCmJyT1BzMEJkZkRLcHJGT3JmMXRx
azFWSHlBUStyV0tiNjllQm1nQVMxSTQKLS0tIFFYQlZOV3poTk9ZSThsVzBZVDdI
MWZ2TDZXR2IrQXV1a3BlQ3FoUGkwSHMKc5Br5nIbPTX9DjT/qJA14R6JfGbks0s7
lIZUvIflvKYYPRcpReijwmfPMAJFK9S0fRucDDW90APO1gYh7bJ4PA==
-----END AGE ENCRYPTED FILE-----
recipient: age1fw4xnh2q52juce94ffn54js708cr6umfwpv0mykuddkea7kr4f0q7a9h05
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBraXlndUdoV1FBYjVBbVFR
aFVQZGhnYlNuSEd0bjAzVkJQVEhzMDZ1SWpJCjA5TWYwWk8vMWJGVWN5U1NveEI2
d0l5VWcrRlpxbUxmK0l1K25QT3ZXNjQKLS0tICtybG0rQkk4cDI3cVJDSk1GWTVv
cVlTUlZpc1Z4RXJWanZaczd2dTNPVFUKoseQ2fmY7zOfmHJ0S61rkns6jcMW/M+0
K8IYr24sXi1kVTgMdADPP0rltXsHphVC/16xneS8J/JGztjTDMS++g==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBhWUprMUlDaVdCMXVIVnIx
Qk9WMWlWeDNRd0dQVWNUdjR0VC9vUXlBbVRRCldBZWtOcEdua0oyOG8vaGg2SVJK
VWdJbzl3SHZDTmhTTVRwc09Jd2t0UFkKLS0tIFlhcUhyeEcwNDV3elE2K1VWWjlJ
VHVyR1ZxUVFFNHRLU0FBQjI0WU9taU0KhBXUKdgr/gvMtIxJshXRmSyV3zua9Po4
ucj3AsLEsicoUm0qypvbbxLaOgk3VVZ5ZVQzTGVbH7beDiIbCxCoHg==
-----END AGE ENCRYPTED FILE-----
recipient: age1pa8cecxaw4y4zea6zjnt0k0mz38g4qunmp6trwy5fvdvw88ttcgsv2dgrv
recipient: age15mxdhlvk7zxtqlw06cu29zdzk9jxjfgvx9s335wxyyk5r7wr9pvqv9894t
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBiZGhhdTRwTklOYnRZRGhN
N3hMQWh6b2lydDlOSVdpL25sczFSTkRTT3lNCkEyT0NRMnU0bGdTS3JUQkQ3VVhs
Ykc1ejBKbHdWVXQ3MVlaTytFakt3NlUKLS0tICtMa0d3M3VKZDJObmxqVmwybXBY
djNudzA1eXlWek9CVGZsR0REMXIrWGcKYMWBfGUwK0PSw2HqCm3Ii8i7+iRMmzcW
5nn2kDq0d1rWnRYaMRGcHqQospsDIzJyYPxRP/+OHcqX4gGunpuDKA==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAwcnFnMWVhamFiYmlraFpp
eXcyS3ZQRjk0T3gzZHhuaUNDeE5PeW54aDE0Ci9yaFFKT0FxNUpSUXNIazNCQWZC
VStpc0NZWlZLM2drUDUrU0hvZXZURjQKLS0tIGJMKzdpSXdJaTA2RkdRbndMWVVy
bTVGSlFGczFpUHRoZ0Fnbkk5dTV1QzgKSuLf3KdRBsTPDDcqd2+rGU3y3lrCjEKO
eIMjTcvJO4GhmDIwNfvI/j2+2qPLMEkyfR6eTXXCB4YDibaUndN/9Q==
-----END AGE ENCRYPTED FILE-----
recipient: age129rxje3pr8w5ulgszgmt98kt4kr06kdwhsg9js78sjte878ngf5qealch2
lastmodified: "2026-08-01T18:33:13Z"
mac: ENC[AES256_GCM,data:sTTpvCTBPsY4OABqIvgujUT2+Yye+H44mxN3G3ybhoj05omgFajYN86sc3zL9vbiTl7SNxCWMkGCerCvS4QrtRZ0vRTNuYNkFPNHDKniSybbxKzjHqyXWGCOoNYqHW211ktB9vmiXQd+zYart87kUU6d6p2FrVDBLU03eQwJO6k=,iv:8zT8W34A8f/EXRYxFeK2PC2Ko6UrjFrPL5+lwNXpb4Q=,tag:WugeYbmrVcUZ9xVC+r3c7w==,type:str]
lastmodified: "2026-08-30T23:52:17Z"
mac: ENC[AES256_GCM,data:SJJtGZ842iStZ2RFIeEGLhHnrwOp6f6mDS5T80ldxmS2aD/o+3k6TlGKHuUM302+Gflksb7dwSdj0VUFhV6HIalYUO9exo2b37AEwACDt8HKs5QF1ruJ8/vz5vW9EpOvFH2wpGKSbczpc9RDsn8AVUo26G06SubUDWLk3fjCRl8=,iv:9DrnXEsgwC9ZSJJ6f5AZN9fjzeRGXqA5ZpBB0SQhiLo=,tag:MOpn7wbn845NwKkYTXRzYg==,type:str]
unencrypted_suffix: _unencrypted
version: 3.13.3
+36 -36
View File
@@ -4,65 +4,65 @@ sops:
age:
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBUa1EyRjBtbC94dVMzaGh5
aUFrZnYwYTA2eHBTRVlCQzdvV2hlRWVkWDFBCmZkVCtWUzN5Q0RTV0toeWp4aHNo
Q3VtZXlOaEpVMUxOK3phV1pyYU83SDgKLS0tIE9VZy9yU1JyQlgvMlNSZDNFcmpM
R2tvVHhIVE5OWTNJVXNBUEkyYzcxRzAKXsBIkZ89if0lRf0ObI7VCv0FOuZXBun6
N01ep5sRWZXu7OZEF1qtgPvbsk9MhUu3aEH1CUuERFjQpPlE83TwMA==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBUTzdydzQraXExRzJueUtn
dDZGdXJoR090cjRUZXlRMk5kaDlUOU1lWUU0Clh1aDBDYkxZMTRBakJsNFJ1K2VT
L1RLNHNaNDAxSW1xR01nTWZsRm01cFUKLS0tIEVuVUFzZmR6SmVrSytoaFl5eTBW
VE50c0dCRGVuNS9MbmptUTVYSkFLbTgKh4ZsKbDK3TcIYqoeWEB87W7sJhKGnmnJ
ffIASIUv8YpJAoonspPMl0e2yjmRb1HpxM53JTOwbM5rRzia89VRow==
-----END AGE ENCRYPTED FILE-----
recipient: age1ykcy2r4kk729e7adqxu8s24ujc60z5eux7ma0ca4ruzydwgm5p6qmdp838
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBPejY0b2JIMlY1Vlpzbkdj
YytkaWNXMnVIM0xORzNNeVB4SlNacHFpcWpNCk94YVRld3JMU25OY2FtaFlESkRS
OTFOK1ZRdTNqbmNmMW9yV25mOSs1bzgKLS0tIFptbVU2WDBvQVlmREVnbWhNWUY4
aHhiWWZDMFdqUkI3Q1VtNi9yWHJLb0UKjLBpnnc85YT/yK9M1mHP2yLeRW87vDTI
bQJnk2SoGukcWFPJO4t4bTYs0jTzttNPE8lFOBpmfZkWIJEU5HQh/A==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBWM2FPdFRvUTU2cU1Vd0pP
SXNpZkhyVUkrM1htK0dpRGxvb1FKUXBWTUVnClNPNGtYclJDNURieEpIS2pIYzBt
YVNvMmdnTXViVHNrNGNHRmpndlNBQ3cKLS0tIHJxZWp2OFEyUS9aRVhLVk5XMzlP
OS83eXdZWnBhNzhSeU5UWEMwKzJBc2MKRRq9CHKpP91fZNMDGEVmZFss5s9D3LIs
r8BgdSqg5MACnFSCTa6l6oYXq8JnMeg01K46vyauSb6jDMOJ2yGVZQ==
-----END AGE ENCRYPTED FILE-----
recipient: age1e6vws55p0g23qzthm4qa93hpt6lqmck6670gkygph0sc0j7my4uq5wqjfh
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAvcDd4RW95NnpRZ1ZkQmJM
eDNmdFhyd3RKczJsTFUyejc4SmZFNktIdndRCkpkbE1uV3hFSFk3cWlKMk1zRTl6
eDJySVI1V29reEFJeCswb1hqcXFhQ3cKLS0tICtyUGtmdDhYM3h5K3A2cHljZkM1
dXRJTmxWNjR3RUJLWFZRZVQvZzMrbmcK77pRkq+koBtAFyAVJSs9tT2PB528Vyuj
W5MZP8VDMK3BUJQ2AU2t+v4MUIlTqoPIHfAW+Ju6T4Ekf9cYaR9tTg==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBMcEF1NWNrU2pTcHlPQVhG
dnZzbUZxVG0rVXBhMCtqSElWaTBGb2txalcwCllITmlKdnhrYnFWTU4vTExOTldW
Z0Y4c25reUZNLzc0dzY3aVAwejNiajQKLS0tIFgzOXd4T3pxZ0JVZDJOQzA1ekJz
eE5zNXRwYjQ1R1NDOHA3SWhtVHVJWG8KY6XA08Ow+bhc5k+LmumzCqVWZ5G70Spj
+I5PrnlLg+9IPUm6ht8uE/+GdaOqjjgOHChTb8zTD7Cxv8Ymm68ydg==
-----END AGE ENCRYPTED FILE-----
recipient: age1x3lahhkefkap67cdmdjcqaxan9hp62er78akr79v9m73nvgugpeqk0y32a
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBIMkxYWEcrSzR6Y2ZNeDlh
MUhTRHFubCtlN3hGTDZxaVBaeWxRYTZVUUJNCm9YLzMrcEdBTmNGWGtPNG9QTzk1
YWg2SmNZNFAxeXUvZ0EyVlpTSitvcFkKLS0tICttVWVkQVNuT0w4cWFrOE44QVlX
WGlLeDRDamtGM3JWeGZTQzl0bk45NzQKrcN1+0JFY7LHUtr+CgSbYa13fyK935yp
UlwyriN/gtacsh1gZv3uyqvu6nkw2d3Oy2CxzQFRjBdWRMNbxUCIhg==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBFRkM2VExXREptVW1BQlZG
ZW92ekZRZ3lKdmEyMnc0dFA1QXp1SFdpcUVBCi9qbzNFRUFoTmxYQnFPNXdibm1n
OVAvNUhrWm83aGhWUXVtV050VHlVT2MKLS0tIEZPRDBwd05XL0hQcGE0WkMweHFh
Z3g0T1pZWW4yYXlPVVdQMDBJU1ozU0EKhV/d5gYZuBo/xmVB3Ce6CVG45GHeiJZQ
Z8HfKMcBD8DoWjodruuZzGotwotDLXzFLL+NW4BExh4PF+Enqr1dUQ==
-----END AGE ENCRYPTED FILE-----
recipient: age1exzngtk4d9vcsmcq6ap5xx3ca9qacqjkrv86ymged7msx9z6vfyqsf5sjq
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB3YnA0ZUtOS3g2OEVrMFQ4
WW0vbktZYXF6My9YUm1weHlyYnFTOUVQeW5RCi90V0R2WEZQYXN2eGhBWUJCSVlX
czZhSm14WnF2Z1k1MFpKQzhWcnJ2SzAKLS0tIFdxZXpvVnp3Ri9QOUdKRG1NWExD
MDA5MCt2dTltSzhYZEdZWnIzTzMxK2sK3z/lLLq4IZfeSSvUJDXXHEsC0rrZh4gd
+e2XNCJ2btImpTXP+MoNSt6TpZSJpyPzcf8l60XeOqMMt1iRfBlo0A==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBIS3A4QiszRmlVMzdhK0E1
dkdCVThrYlpRbG9OVUJySDcrTmFlVXRWZW5ZCk14Rlp4VW1JdlhmZk9POUc4WjhD
SXZwdlJKRjFwS2ttRis3WEFmT3dTZVkKLS0tIDZTOHd0RzNmekE2ODRMcy9sV0Zo
QzVTOTU5bGVCR0N4YXJEcVZWL2N4S0UKf/JY8ue8QiBC5BPxO5hArxgES7Us3N4O
XLO6+/KrxwemgE8Eubf3J8NUe7cV8sVoxDSrx79LbQkgIq/AdWjfVA==
-----END AGE ENCRYPTED FILE-----
recipient: age1fw4xnh2q52juce94ffn54js708cr6umfwpv0mykuddkea7kr4f0q7a9h05
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBlc09jK3VkQU1ocXErVXc3
cE9Gc01zQ0JZcUdLa1lCc1BmOGNtanN4SXhvCitoY1pjakFGODVISXN4Vm1IY1Nk
RzRmVVFrQ0MwWktJTGszVmdvdHdiN2sKLS0tIGgvR1dwOWhEOStBYTdDNkdiVlRL
MmkySnk5K2M0QzNOVzc2c1BmR3lPUXcKx4NOnE5uODG9/bbe4zI7SNexpsPJD0We
agTTJiKYmM5rilYihx9quxruh8VM9JcFgjoFdRO5JGVstwGZGxtxNw==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBNeFY0SDlxR0Y1dW5UUHI0
UlByQmlIWUlyWEpwb1ptL0svTllnTkVXbWdzCjhIZ05PMkJpWHZzWnpJMUxRVUdV
VkFKTjU4VXFCbTh1cnF3cjlwSTY1dTgKLS0tICtGbnZGSzkzc1RmdTMrd3Z2NHdG
MGUxR25naDFJSjdqNUx0QjRmdHh1K3cKGcE1BgLs0c0UtrPcxk/L8WTo6Bd4VMsh
uklBQ6vpc6RWNJ32ROXKCekLFSpbsD4qMwfvb4mOG6nXfwPWytnVHA==
-----END AGE ENCRYPTED FILE-----
recipient: age1pa8cecxaw4y4zea6zjnt0k0mz38g4qunmp6trwy5fvdvw88ttcgsv2dgrv
recipient: age15mxdhlvk7zxtqlw06cu29zdzk9jxjfgvx9s335wxyyk5r7wr9pvqv9894t
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBnRzAyNDNyenR2Y2JYcmtT
RHpuMldJaXJYK01hWG5aTTNPN3p4VXRENVFvClNSZmdlWmhaSXRWZ3k3TUlsSkVr
TjdoeFJWSEhJYk9wU0hncWlGaTFmdDAKLS0tIEYrT2RPQ1JNY2h6SllLSlpHZzJu
SnVpeDZUZFY1MWlvcFBmRnNNRmduYm8KQ3o9PSLHTji+z4iFB70cVd8MvznXF3xZ
t7884rqNdfDevT0SDmq/hzvK72bnX69pl07jmAdK40RT0aLktjGLFA==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBoYWdqK2oyTEdZTGtKV2kr
cUlNNjZWUEU3MGlkTzFISGsvR2JrOXdtOHd3ClV2WEtaYVAwbHg4MlkwRjNnei9h
NmZ1N3lhUklxd2FSdGdyM3ZRSXRnZDAKLS0tIGhweFdoK1R2N2x1bmQvWXdYek9u
L05NZ0piWkdUTUIvdld6a1Y4WVRsRE0K3m8CLO2V2l3DJ7T/EXbqCdYDK/INqmUj
Eu9wliqeIOF5Lg3IrmB3WkOafxVw8HAVB+htkwwvD8MYk9/XubbQvw==
-----END AGE ENCRYPTED FILE-----
recipient: age129rxje3pr8w5ulgszgmt98kt4kr06kdwhsg9js78sjte878ngf5qealch2
encrypted_regex: ^(data|stringData)$
+12
View File
@@ -14,6 +14,12 @@
imports = [
inputs.sops-nix.homeManagerModules.sops
];
nixpkgs.overlays = [
# Sops's go version went EOL, https://github.com/Mic92/sops-nix/issues/983
(final: prev: {
buildGo125Module = prev.buildGoModule;
})
];
sops = {
age.keyFile = "/home/doloro/.config/sops/age/keys.txt"; # must have no password!
# I HATE YOU
@@ -26,6 +32,12 @@
imports = [
inputs.sops-nix.nixosModules.sops
];
nixpkgs.overlays = [
# Sops's go version went EOL, https://github.com/Mic92/sops-nix/issues/983
(final: prev: {
buildGo125Module = prev.buildGoModule;
})
];
sops = {
# age.keyFile = "/etc/ssh/ssh_host_ed25519_key";
defaultSopsFile = ./content/secrets.yaml;
+6 -3
View File
@@ -47,10 +47,10 @@
spiHid = {
# drivers = [ "legacy" ];
legacy = {
enable = true;
enable = false;
};
v4 = {
enable = false;
enable = true;
};
};
ssamPmNotifier = {
@@ -60,7 +60,10 @@
enable = true;
};
touchscreen = {
enable = false;
enable = true;
};
systemIdleState = {
enable = true;
};
video = {
enable = true;
+3 -9
View File
@@ -42,15 +42,9 @@
];
in
{
wayland.windowManager.hyprland.extraLuaFiles = lib.mkIf settings.default {
"zen-browser-bind.lua" = {
autoLoad = true;
content = ''
-- Zen launcher bind (lua config: settings.bind cannot express dispatchers)
hl.bind("SUPER + E", hl.dsp.exec_cmd("zen"))
'';
};
};
wayland.windowManager.hyprland.settings.bind = lib.mkIf settings.default [
{ _args = [ "SUPER + E" (lib.generators.mkLuaInline ''hl.dsp.exec_cmd("zen")'') ]; }
];
home.packages = [
(pkgs.wrapFirefox
inputs.zen-browser.packages.${pkgs.stdenv.hostPlatform.system}.zen-browser-unwrapped
Generated
+322 -214
View File
File diff suppressed because it is too large Load Diff
+3 -2
View File
@@ -3,10 +3,11 @@
outputs = inputs: inputs.flake-parts.lib.mkFlake { inherit inputs; } (inputs.import-tree ./config);
inputs = {
barbar.url = "git+https://git.scug.io/doloro/barbar?ref=master";
den.url = "github:vic/den?ref=8101ec865c0bf4027d40b9fd8951e3e435a86d64";
direnv-instant.url = "github:Mic92/direnv-instant";
disko.url = "github:nix-community/disko";
flake-file.url = "github:vic/flake-file";
flake-file.url = "github:denful/flake-file";
flake-parts = {
url = "github:hercules-ci/flake-parts";
inputs.nixpkgs-lib.follows = "nixpkgs";
@@ -23,7 +24,7 @@
};
hyprland.url = "github:hyprwm/Hyprland";
hytale-launcher.url = "github:JPyke3/hytale-launcher-nix";
import-tree.url = "github:vic/import-tree";
import-tree.url = "github:denful/import-tree";
iptsd = {
url = "git+ssh://git@git.scug.io:/nikkuss/iptsd-rs.git?ref=main";
inputs.nixpkgs.follows = "nixpkgs";