Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles

This commit is contained in:
Lennart J. Kurzweg (Nx2)
2025-08-31 21:39:10 +02:00
25 changed files with 1091 additions and 933 deletions

View File

@@ -1,13 +1,13 @@
{ {
"base": { "base": {
"foreground": "#fefefe", "foreground": "#dcd5f5",
"background": "#020202" "background": "#100929"
}, },
"to_alter": { "to_alter": {
"accent": "#aaaaff", "accent": "#765ad7",
"secondary": "#aaeeff", "secondary": "#ce32ff",
"tertiary": "#aaffaa", "tertiary": "#879eaa",
"special": "#aaffaa", "special": "#bad759",
"weird": "#ffffaa" "weird": "#d75991"
} }
} }

View File

@@ -26,7 +26,7 @@ pkgs: rec {
fbcolor = (builtins.fromJSON (builtins.readFile ./colors.json)).base; fbcolor = (builtins.fromJSON (builtins.readFile ./colors.json)).base;
fcolor = facolor // fbcolor; fcolor = facolor // fbcolor;
xcolor = with ccolor; with fcolor; { xcolor = with ccolor; with fcolor; {
background = "#000000"; # background = "#000000";
# foreground = "#dddddd"; # foreground = "#dddddd";
# accent = blue; # accent = blue;
# secondary = cyan; # secondary = cyan;

92
flake.lock generated
View File

@@ -20,11 +20,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1753216019, "lastModified": 1755946532,
"narHash": "sha256-zik7WISrR1ks2l6T1MZqZHb/OqroHdJnSnAehkE0kCk=", "narHash": "sha256-POePremlUY5GyA1zfbtic6XLxDaQcqHN6l+bIxdT5gc=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "aquamarine", "repo": "aquamarine",
"rev": "be166e11d86ba4186db93e10c54a141058bdce49", "rev": "81584dae2df6ac79f6b6dae0ecb7705e95129ada",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -39,11 +39,11 @@
"nixpkgs": "nixpkgs" "nixpkgs": "nixpkgs"
}, },
"locked": { "locked": {
"lastModified": 1755732626, "lastModified": 1756320983,
"narHash": "sha256-qLAElW0E2QmcrKAbLPjFdueAOpjp3HmlxaOQf4R4jas=", "narHash": "sha256-huaJ1CvBsylibf55pjiFEpiKxYU235iAzwMhJ+iDSjw=",
"owner": "9001", "owner": "9001",
"repo": "copyparty", "repo": "copyparty",
"rev": "cd8771fa522d1cf645c3c7e0193f07b53d81559c", "rev": "f4f702c39dd2365f6ca43ed6b72a84c708fded8d",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -220,11 +220,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1755776884, "lastModified": 1756245065,
"narHash": "sha256-CPM7zm6csUx7vSfKvzMDIjepEJv1u/usmaT7zydzbuI=", "narHash": "sha256-aAZNbGcWrVRZgWgkQbkabSGcDVRDMgON4BipMy69gvI=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "4fb695d10890e9fc6a19deadf85ff79ffb78da86", "rev": "54b2879ce622d44415e727905925e21b8f833a98",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -279,11 +279,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1754305013, "lastModified": 1755678602,
"narHash": "sha256-u+M2f0Xf1lVHzIPQ7DsNCDkM1NYxykOSsRr4t3TbSM4=", "narHash": "sha256-uEC5O/NIUNs1zmc1aH1+G3GRACbODjk2iS0ET5hXtuk=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprgraphics", "repo": "hyprgraphics",
"rev": "4c1d63a0f22135db123fc789f174b89544c6ec2d", "rev": "157cc52065a104fc3b8fa542ae648b992421d1c7",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -308,11 +308,11 @@
"xdph": "xdph" "xdph": "xdph"
}, },
"locked": { "locked": {
"lastModified": 1755781160, "lastModified": 1756325904,
"narHash": "sha256-8pOPsz8kMppCZa9HdvjxH/kB6DIdlpXXBcuNGLMZfSM=", "narHash": "sha256-PRz3GE4ZBScWrHTVegpM4B2YLZplp1iPwmZ9AeYBbsg=",
"ref": "refs/heads/main", "ref": "refs/heads/main",
"rev": "50a242f16abfc49efc6f89ea9cd14a3544888a25", "rev": "378e130f1426648d8d734049800128f9882805bf",
"revCount": 6384, "revCount": 6395,
"submodules": true, "submodules": true,
"type": "git", "type": "git",
"url": "https://github.com/hyprwm/Hyprland" "url": "https://github.com/hyprwm/Hyprland"
@@ -340,11 +340,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1755183521, "lastModified": 1756325158,
"narHash": "sha256-wrP8TM2lb2x0+PyTc7Uc3yfVBeIlYW7+hFeG14N9Cr8=", "narHash": "sha256-aJ9jAYtZ64MWBpWPfH1q+t6U9b6kJWc2yK9Vrlj6fZY=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprland-plugins", "repo": "hyprland-plugins",
"rev": "c1ddebb423acc7c88653c04de5ddafee64dac89a", "rev": "bf843fc6adf90d43a5dd7742e9df61d395ba780d",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -508,11 +508,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1754481650, "lastModified": 1756117388,
"narHash": "sha256-6u6HdEFJh5gY6VfyMQbhP7zDdVcqOrCDTkbiHJmAtMI=", "narHash": "sha256-oRDel6pNl/T2tI+nc/USU9ZP9w08dxtl7hiZxa0C/Wc=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprutils", "repo": "hyprutils",
"rev": "df6b8820c4a0835d83d0c7c7be86fbc555f1f7fd", "rev": "b2ae3204845f5f2f79b4703b441252d8ad2ecfd0",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -533,11 +533,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1751897909, "lastModified": 1755184602,
"narHash": "sha256-FnhBENxihITZldThvbO7883PdXC/2dzW4eiNvtoV5Ao=", "narHash": "sha256-RCBQN8xuADB0LEgaKbfRqwm6CdyopE1xIEhNc67FAbw=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprwayland-scanner", "repo": "hyprwayland-scanner",
"rev": "fcca0c61f988a9d092cbb33e906775014c61579d", "rev": "b3b0f1f40ae09d4447c20608e5a4faf8bf3c492d",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -607,11 +607,11 @@
}, },
"nixpkgs-latest": { "nixpkgs-latest": {
"locked": { "locked": {
"lastModified": 1755792360, "lastModified": 1756326156,
"narHash": "sha256-Bp9mBVrO0c6EDGBXH4jWE+IlEf+FW+jJDSoFuf+ncg8=", "narHash": "sha256-EvRCnKAE5oL9wOIT/LrA5+pJVpTvhH71OReJDTOZDyk=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "dac37fbcd385fbb0ea1e6d153673f62b5f4e0079", "rev": "636dea4f2cd65b8c558149a957423da47c1cbc95",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -639,11 +639,11 @@
}, },
"nixpkgs-unstable": { "nixpkgs-unstable": {
"locked": { "locked": {
"lastModified": 1755615617, "lastModified": 1756266583,
"narHash": "sha256-HMwfAJBdrr8wXAkbGhtcby1zGFvs+StOp19xNsbqdOg=", "narHash": "sha256-cr748nSmpfvnhqSXPiCfUPxRz2FJnvf/RjJGvFfaCsM=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "20075955deac2583bb12f07151c2df830ef346b4", "rev": "8a6d5427d99ec71c64f0b93d45778c889005d9c2",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -654,11 +654,11 @@
}, },
"nixpkgs_2": { "nixpkgs_2": {
"locked": { "locked": {
"lastModified": 1754725699, "lastModified": 1756266583,
"narHash": "sha256-iAcj9T/Y+3DBy2J0N+yF9XQQQ8IEb5swLFzs23CdP88=", "narHash": "sha256-cr748nSmpfvnhqSXPiCfUPxRz2FJnvf/RjJGvFfaCsM=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "85dbfc7aaf52ecb755f87e577ddbe6dbbdbc1054", "rev": "8a6d5427d99ec71c64f0b93d45778c889005d9c2",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -702,11 +702,11 @@
}, },
"nixpkgs_5": { "nixpkgs_5": {
"locked": { "locked": {
"lastModified": 1755704039, "lastModified": 1756217674,
"narHash": "sha256-gKlP0LbyJ3qX0KObfIWcp5nbuHSb5EHwIvU6UcNBg2A=", "narHash": "sha256-TH1SfSP523QI7kcPiNtMAEuwZR3Jdz0MCDXPs7TS8uo=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "9cb344e96d5b6918e94e1bca2d9f3ea1e9615545", "rev": "4e7667a90c167f7a81d906e5a75cba4ad8bee620",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -741,11 +741,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1754416808, "lastModified": 1755960406,
"narHash": "sha256-c6yg0EQ9xVESx6HGDOCMcyRSjaTpNJP10ef+6fRcofA=", "narHash": "sha256-RF7j6C1TmSTK9tYWO6CdEMtg6XZaUKcvZwOCD2SICZs=",
"owner": "cachix", "owner": "cachix",
"repo": "git-hooks.nix", "repo": "git-hooks.nix",
"rev": "9c52372878df6911f9afc1e2a1391f55e4dfc864", "rev": "e891a93b193fcaf2fc8012d890dc7f0befe86ec2",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -932,11 +932,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1753633878, "lastModified": 1755354946,
"narHash": "sha256-js2sLRtsOUA/aT10OCDaTjO80yplqwOIaLUqEe0nMx0=", "narHash": "sha256-zdov5f/GcoLQc9qYIS1dUTqtJMeDqmBmo59PAxze6e4=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "xdg-desktop-portal-hyprland", "repo": "xdg-desktop-portal-hyprland",
"rev": "371b96bd11ad2006ed4f21229dbd1be69bed3e8a", "rev": "a10726d6a8d0ef1a0c645378f983b6278c42eaa0",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -952,11 +952,11 @@
"rust-overlay": "rust-overlay_2" "rust-overlay": "rust-overlay_2"
}, },
"locked": { "locked": {
"lastModified": 1755740452, "lastModified": 1756309929,
"narHash": "sha256-4C6tuLUdt2ohMPthPMT2Ma+vbn/y7Qz5qfZXVXcb+08=", "narHash": "sha256-udly1zNvxR6UKFZSkbutSEZ9EihUd+pPCDBaseppB5s=",
"owner": "sxyazi", "owner": "sxyazi",
"repo": "yazi", "repo": "yazi",
"rev": "0054cf0b878bae84d1bf0c063801dc9c42aa6978", "rev": "dd7afaa64aa54fac5bd30404eb44ccd9d68f31c5",
"type": "github" "type": "github"
}, },
"original": { "original": {

View File

@@ -1,807 +1,9 @@
{ pkgs, hyper, ... }@all: with all; let { ... }: {
sep = " "; imports = [
in { # ./bar/submap-indicator.nix
sops.secrets = { ./bar/cclock.nix
"nx2site/radicale/password" = { }; ./bar/caldav-event.nix
}; # ./bar/waybar.nix
home.packages = [ ./bar/hyprpanel.nix
(pkgs.writeShellApplication { name = "submap_indicator"; text = /*bash*/ ''
print_help() {
echo "Usage: submap_indicator {set <string>|unset}"
}
if [ $# -lt 1 ]; then
print_help; exit 1;
fi
case "$1" in
set)
# Check if there is a second argument for the 'set' operation
if [ $# -eq 2 ]; then
echo "$2" > /tmp/submap-indictor
pkill -RTMIN+8 waybar
pkill -RTMIN+8 hyprpanel
else
echo "Error: 'set' operation requires exactly one string argument."
print_help
exit 1
fi
;;
unset)
echo "" > /tmp/submap-indictor
pkill -RTMIN+8 waybar
pkill -RTMIN+8 hyprpanel
;;
*)
echo "Error: Unknown command '$1'"
print_help
exit 1
;;
esac
exit 0
'';})
(pkgs.writeShellApplication { name = "cclock"; text = /*bash*/ ''
ord=$(date +"%e" | awk '{printf("%d%s\n", $1, ($1==11||$1==12||$1==13)?"th":((($1%10)==1)?"st":((($1%10)==2)?"nd":((($1%10)==3)?"rd":"th"))))}')
if [ $# -eq 0 ]; then
echo "󰃮${sep}$(date +'%A the')" "$ord" "of" "$(date +'%B')" " ${sep}$(date +'%R')"
elif [ "$1" = "--no-icons" ]; then
echo "$(date +'%A the')" "$ord" "of" "$(date +'%B')" "$(date +'%R')"
fi
'';})
(pkgs.writers.writePython3Bin "caldav_event" {
libraries = with pkgs.python3Packages; [ caldav ics pytz ];
flakeIgnore = [ "E302" "E305" "E501" "E261" ];
} /* python */ ''
import os
import json
from caldav import DAVClient
from datetime import datetime, timezone
from ics import Calendar
from pytz import UTC
def get_password(password_file):
with open(password_file, "r") as file:
return file.read().strip()
def datetime_converter(obj):
if isinstance(obj, datetime):
return obj.isoformat()
return obj
def datetime_parser(dct):
for key, value in dct.items():
if isinstance(value, str):
try:
dct[key] = datetime.fromisoformat(value)
except ValueError:
pass
return dct
def load_cache(cache_file):
if os.path.exists(cache_file):
with open(cache_file, "r") as file:
return json.load(file, object_hook=datetime_parser)
return None
def save_cache(cache_file, data):
with open(cache_file, "w") as file:
json.dump(data, file, default=datetime_converter, indent=4)
def get_ongoing_or_next_event(url, username, password):
now = datetime.now(timezone.utc)
try:
client = DAVClient(url, username=username, password=password)
principal = client.principal()
calendars = principal.calendars()
next_event_dict = {
'event_name': "fake",
'event_begin': datetime(9000, 1, 1, tzinfo=UTC), # in the year 9000
'event_end': datetime(9000, 1, 1, 8, tzinfo=UTC),
}
for calendar in calendars:
for event in calendar.search(start=now):
calendar_parsed = Calendar(event.data)
for ics_event in calendar_parsed.events:
event_dict = {}
event_dict['event_name'] = ics_event.name or "(No Title)"
event_dict['event_begin'] = ics_event.begin.astimezone(timezone.utc)
event_dict['event_end'] = ics_event.end.astimezone(timezone.utc)
if event_dict['event_begin'] <= now and now <= event_dict['event_end']:
return event_dict
elif event_dict['event_begin'] >= now and next_event_dict['event_begin'] > event_dict['event_begin']:
next_event_dict = event_dict
return next_event_dict
except Exception as e:
print(f"Error accessing {url}: {e}")
return None
def is_expired(event_dict: dict):
now = datetime.now(timezone.utc).timestamp()
event_end = event_dict['event_end'].timestamp()
return not (now <= event_end)
if __name__ == "__main__":
password_file = "${config.sops.secrets."nx2site/radicale/password".path}" # Path to password file
cache_file = "/tmp/caldav_event_cache.json" # Path to cache file
url = "https://dav.${hyper.domain}/"
username = "nx2"
password = get_password(password_file)
now = datetime.now(timezone.utc).timestamp()
event_dict = load_cache(cache_file)
if (event_dict is None) or (is_expired(event_dict)):
event_dict = get_ongoing_or_next_event(url, username, password)
save_cache(cache_file, event_dict)
if event_dict is None: # none were found
print("* zen *")
exit(0)
event_start = event_dict['event_begin'].timestamp()
event_end = event_dict['event_end'].timestamp()
if event_start <= now <= event_end: # is currently ongoing
action_string = "ends"
t = event_end - now # time_remaining
else: # is in the future
action_string = "starts"
t = event_start - now # time_remaining
hours, rem = divmod(int(t), 3600)
minutes, _ = divmod(rem, 60)
hour_string = f"{hours} hour{'s ' if hours != 1 else ' '}" if hours > 0 else ""
minu_string = f"{minutes} minute{'s ' if minutes != 1 else ' '}" if minutes > 0 else ""
if hour_string == "" and minu_string == "":
time_string = "now"
elif hour_string == "" or minu_string == "":
time_string = "in " + hour_string + minu_string
else:
time_string = "in " + hour_string + "and " + minu_string
print(f"{event_dict['event_name']} {action_string} {time_string}")
'')
]; ];
programs = {
waybar = {
enable = false;
package = pkgs.waybar;
settings = {
bar = {
# height = 20;
layer = "top";
position = "bottom";
margin-top = 0;
# margin-left = rice.gap-size;
# margin-bottom = rice.gap-size;
# margin-right = rice.gap-size;
margin-left = 0;
margin-bottom = 0;
margin-right = 0;
spacing = 10;
fixed-center = true;
modules-left = [
# "cpu"
# "memory"
"wireplumber"
"backlight"
"battery"
"network"
"hyprland/window"
];
modules-center = [
"hyprland/workspaces"
];
modules-right = [
"custom/mode"
"custom/caldav_event"
"custom/cclock"
"tray"
];
"hyprland/workspaces" = {
on-click = "activate";
format = "{name}";
all-outputs = false;
active-only = false;
};
"hyprland/window" = {
# format = "${sep}{}";
format = "{}";
separate-outputs = true;
};
"custom/cclock" = {
exec = "cclock";
restart-interval = 60;
};
"custom/caldav_event" = {
format = "󰃰${sep}{}";
exec = "caldav_event";
restart-interval = 60;
max-width = 60;
};
"custom/mode" = {
exec = "cat /tmp/submap-indictor";
interval = "once";
signal = 8;
};
cpu = {
interval = 1;
format = "󰍛${sep}{}%";
max-length = 10;
};
memory = {
interval = 5;
format = "${sep}{avail:.0f}G free";
};
battery = {
interval = 60;
tooltip = false;
format = "{icon}${sep}{capacity}%";
states = {
warning = 15;
critical = 5;
};
format-icons = [ " " " " " " " " " " ];
format-charging = "{icon}${sep}+{capacity}%";
format-plugged = "{icon}${sep}P{capacity}%";
format-full = "{icon}${sep}F{capacity}%";
};
backlight = {
device = "eDP-1";
format = "{icon}${sep}{percent}%";
format-icons = [ "" "" "" "" "" "" "" "" "" ];
};
network = {
format-wifi = "${sep}{essid}";
format-ethernet = "󰈀${sep}Wired";
format-disconnected = "󰌙${sep}Disconnected";
};
wireplumber = {
format = "󰕾${sep}{volume}%";
format-muted = "󰝟${sep}--%";
};
};
};
style = with rice.color; let f = rice.lib.hex-to-rgb-comma-string; in /* css */ ''
* {
font-family: ${rice.font.code.name};
font-size: 1em;
min-height: 0px;
margin: 0px;
padding: 0px;
}
window#waybar {
background: rgba(${f background},${builtins.toString rice.transparency});
}
#clock,
#custom-cclock,
#custom-mode,
#custom-caldav-event,
#battery,
#cpu,
#tray,
#disk,
#backlight,
#network,
#wireplumber,
#memory,
#window,
#workspaces {
padding: 0px 3px;
margin-top: 0.3em;
border-radius: ${builtins.toString rice.rounding}px;
color: rgb(${f accent.bright});
}
#workspaces button {
color: rgb(${f accent.base});
padding-left: 15px;
padding-right: 15px;
border-radius: ${builtins.toString rice.rounding}px;
}
#workspaces button.active { color: rgb(${f background}); background-color: rgb(${f accent.base}); }
#workspaces button:hover { color: rgb(${f tertiary.bright}); }
#workspaces button.urgent { background-color: rgba(${f magenta.base},${builtins.toString rice.transparency}); }
#window, #custom-caldav_event {
font-family: ${rice.font.base.name}, ${rice.font.code.name};
color: rgb(${f tertiary.bright});
}
#wireplumber.muted { color: rgb(${f tertiary.bright}); }
#wireplumber { padding-left: 10px; }
#battery.warning:not(.charging) { color: rgb(${f green.base});; }
#battery.charging { color: rgb(${f green.base}); }
#battery.critical {
background: rgb(${f negative.base});
color: rgb(${f foreground});
}
#custom-mode { color: rgb(${f red.base}); }
'';
};
hyprpanel = {
enable = true;
package = pkgs.unstable.hyprpanel;
settings = with rice.color; let
t = builtins.toString (builtins.ceil (rice.transparency * 100));
in {
"bar.layouts" = {
"*" = {
"left" = [
"volume"
# "microphone"
# "cpu"
# "cputemp"
# "ram"
"battery"
# "bluetooth"
"network"
"windowtitle"
];
"middle" = [ "workspaces" ];
"right" = [
"submap"
"custom/caldav_event"
"media"
"custom/cclock"
"notifications"
"systray"
];
};
};
"bar.bluetooth.label" = true;
"bar.customModules.submap.enabledIcon" = "[󰧹]";
"bar.customModules.submap.showSubmapName" = false;
"bar.customModules.submap.label" = false;
"bar.customModules.submap.icon" = true;
"bar.customModules.submap.disabledIcon" = "";
"bar.workspaces.applicationIconOncePerWorkspace" = false;
"bar.workspaces.numbered_active_indicator" = "underline";
"bar.workspaces.scroll_speed" = 1;
"bar.workspaces.showAllActive" = false;
"bar.workspaces.showApplicationIcons" = true;
"bar.workspaces.show_icons" = false;
"bar.workspaces.show_numbered" = false;
"bar.workspaces.showWsIcons" = true;
"bar.workspaces.spacing" = 1;
"bar.workspaces.workspaceMask" = true;
"bar.workspaces.workspaces" = 5;
"theme.bar.background" = background;
"theme.bar.border.color" = accent.base;
"theme.bar.border_radius" = "0.2em";
"theme.bar.buttons.background" = background;
"theme.bar.buttons.background_opacity" = 0;
"theme.bar.buttons.spacing" = "0em";
"theme.bar.buttons.padding_x" = "0.5rem";
"theme.bar.buttons.battery.background" = background;
"theme.bar.buttons.battery.border" = accent.base;
"theme.bar.buttons.battery.icon_background" = background;
"theme.bar.buttons.battery.icon" = accent.base;
"theme.bar.buttons.battery.text" = accent.base;
"theme.bar.buttons.bluetooth.background" = background;
"theme.bar.buttons.bluetooth.border" = accent.base;
"theme.bar.buttons.bluetooth.icon_background" = background;
"theme.bar.buttons.bluetooth.icon" = accent.base;
"theme.bar.buttons.bluetooth.text" = accent.base;
"theme.bar.buttons.borderColor" = accent.base;
"theme.bar.buttons.clock.background" = background;
"theme.bar.buttons.clock.border" = accent.base;
"theme.bar.buttons.clock.icon_background" = background;
"theme.bar.buttons.clock.icon" = accent.base;
"theme.bar.buttons.clock.text" = accent.base;
"theme.bar.buttons.dashboard.background" = background;
"theme.bar.buttons.dashboard.border" = accent.base;
"theme.bar.buttons.dashboard.icon" = accent.base;
"theme.bar.buttons.icon_background" = background;
"theme.bar.buttons.icon" = accent.base;
"theme.bar.buttons.media.background" = background;
"theme.bar.buttons.media.border" = accent.base;
"theme.bar.buttons.media.icon_background" = background;
"theme.bar.buttons.media.icon" = accent.base;
"theme.bar.buttons.media.text" = accent.base;
"theme.bar.buttons.modules.cava.background" = background;
"theme.bar.buttons.modules.cava.border" = accent.base;
"theme.bar.buttons.modules.cava.icon_background" = background;
"theme.bar.buttons.modules.cava.icon" = accent.base;
"theme.bar.buttons.modules.cava.text" = accent.base;
"theme.bar.buttons.modules.cpu.background" = background;
"theme.bar.buttons.modules.cpu.border" = accent.base;
"theme.bar.buttons.modules.cpu.icon_background" = background;
"theme.bar.buttons.modules.cpu.icon" = accent.base;
"theme.bar.buttons.modules.cpu.text" = accent.base;
"theme.bar.buttons.modules.cpuTemp.background" = background;
"theme.bar.buttons.modules.cpuTemp.border" = accent.base;
"theme.bar.buttons.modules.cpuTemp.icon_background" = background;
"theme.bar.buttons.modules.cpuTemp.icon" = accent.base;
"theme.bar.buttons.modules.cpuTemp.text" = accent.base;
"theme.bar.buttons.modules.hypridle.background" = background;
"theme.bar.buttons.modules.hypridle.border" = accent.base;
"theme.bar.buttons.modules.hypridle.icon_background" = background;
"theme.bar.buttons.modules.hypridle.icon" = accent.base;
"theme.bar.buttons.modules.hypridle.text" = accent.base;
"theme.bar.buttons.modules.hyprsunset.background" = background;
"theme.bar.buttons.modules.hyprsunset.border" = accent.base;
"theme.bar.buttons.modules.hyprsunset.icon_background" = background;
"theme.bar.buttons.modules.hyprsunset.icon" = accent.base;
"theme.bar.buttons.modules.hyprsunset.text" = accent.base;
"theme.bar.buttons.modules.kbLayout.background" = background;
"theme.bar.buttons.modules.kbLayout.border" = accent.base;
"theme.bar.buttons.modules.kbLayout.icon_background" = background;
"theme.bar.buttons.modules.kbLayout.icon" = accent.base;
"theme.bar.buttons.modules.kbLayout.text" = accent.base;
"theme.bar.buttons.modules.microphone.background" = background;
"theme.bar.buttons.modules.microphone.border" = accent.base;
"theme.bar.buttons.modules.microphone.icon_background" = background;
"theme.bar.buttons.modules.microphone.icon" = accent.base;
"theme.bar.buttons.modules.microphone.text" = accent.base;
"theme.bar.buttons.modules.netstat.background" = background;
"theme.bar.buttons.modules.netstat.border" = accent.base;
"theme.bar.buttons.modules.netstat.icon_background" = background;
"theme.bar.buttons.modules.netstat.icon" = accent.base;
"theme.bar.buttons.modules.netstat.text" = accent.base;
"theme.bar.buttons.modules.power.background" = background;
"theme.bar.buttons.modules.power.border" = accent.base;
"theme.bar.buttons.modules.power.icon_background" = background;
"theme.bar.buttons.modules.power.icon" = accent.base;
"theme.bar.buttons.modules.ram.background" = background;
"theme.bar.buttons.modules.ram.border" = accent.base;
"theme.bar.buttons.modules.ram.icon_background" = background;
"theme.bar.buttons.modules.ram.icon" = accent.base;
"theme.bar.buttons.modules.ram.text" = accent.base;
"theme.bar.buttons.modules.storage.background" = background;
"theme.bar.buttons.modules.storage.border" = accent.base;
"theme.bar.buttons.modules.storage.icon_background" = background;
"theme.bar.buttons.modules.storage.icon" = accent.base;
"theme.bar.buttons.modules.storage.text" = accent.base;
"theme.bar.buttons.modules.submap.background" = background;
"theme.bar.buttons.modules.submap.border" = accent.base;
"theme.bar.buttons.modules.submap.icon_background" = background;
"theme.bar.buttons.modules.submap.icon" = accent.base;
"theme.bar.buttons.modules.submap.text" = special.base;
"theme.bar.buttons.modules.updates.background" = background;
"theme.bar.buttons.modules.updates.border" = accent.base;
"theme.bar.buttons.modules.updates.icon_background" = background;
"theme.bar.buttons.modules.updates.icon" = accent.base;
"theme.bar.buttons.modules.updates.text" = accent.base;
"theme.bar.buttons.modules.weather.background" = background;
"theme.bar.buttons.modules.weather.border" = accent.base;
"theme.bar.buttons.modules.weather.icon_background" = background;
"theme.bar.buttons.modules.weather.icon" = accent.base;
"theme.bar.buttons.modules.weather.text" = accent.base;
"theme.bar.buttons.modules.worldclock.background" = background;
"theme.bar.buttons.modules.worldclock.border" = accent.base;
"theme.bar.buttons.modules.worldclock.icon_background" = background;
"theme.bar.buttons.modules.worldclock.icon" = accent.base;
"theme.bar.buttons.modules.worldclock.text" = accent.base;
"theme.bar.buttons.monochrome" = false;
"theme.bar.buttons.network.background" = background;
"theme.bar.buttons.network.border" = accent.base;
"theme.bar.buttons.network.icon_background" = background;
"theme.bar.buttons.network.icon" = accent.base;
"theme.bar.buttons.network.text" = accent.base;
"theme.bar.buttons.notifications.background" = background;
"theme.bar.buttons.notifications.border" = accent.base;
"theme.bar.buttons.notifications.icon_background" = background;
"theme.bar.buttons.notifications.icon" = accent.base;
"theme.bar.buttons.notifications.total" = accent.base;
"theme.bar.buttons.opacity" = t;
"theme.bar.buttons.separator.color" = accent.base;
"theme.bar.buttons.style" = "default";
"theme.bar.buttons.systray.background" = background;
"theme.bar.buttons.systray.border" = accent.base;
"theme.bar.buttons.systray.customIcon" = accent.base;
"theme.bar.buttons.text" = accent.base;
"theme.bar.buttons.volume.background" = background;
"theme.bar.buttons.volume.border" = accent.base;
"theme.bar.buttons.volume.icon_background" = background;
"theme.bar.buttons.volume.icon" = accent.base;
"theme.bar.buttons.volume.text" = accent.base;
"theme.bar.buttons.windowtitle.background" = background;
"theme.bar.buttons.windowtitle.border" = secondary.base;
"theme.bar.buttons.windowtitle.icon_background" = background;
"theme.bar.buttons.windowtitle.icon" = secondary.base;
"theme.bar.buttons.windowtitle.text" = secondary.base;
"theme.bar.buttons.workspaces.active" = accent.bright;
"theme.bar.buttons.workspaces.available" = accent.base;
"theme.bar.buttons.workspaces.background" = background;
"theme.bar.buttons.workspaces.border" = accent.base;
"theme.bar.buttons.workspaces.hover" = foreground;
"theme.bar.buttons.workspaces.numbered_active_highlighted_text_color" = accent.base;
"theme.bar.buttons.workspaces.numbered_active_highlight_padding" = "0.2em";
"theme.bar.buttons.workspaces.numbered_active_underline_color" = accent.bright;
"theme.bar.buttons.workspaces.numbered_inactive_padding" = "0.2em";
"theme.bar.buttons.workspaces.occupied" = secondary.base;
"theme.bar.buttons.workspaces.pill.width" = "4em";
"theme.bar.buttons.workspaces.smartHighlight" = true;
"theme.bar.buttons.y_margins" = "0em";
"theme.bar.location" = "bottom";
"theme.bar.menus.menu.battery.background.color" = background;
"theme.bar.menus.menu.battery.border.color" = accent.base;
"theme.bar.menus.menu.battery.card.color" = accent.dark;
"theme.bar.menus.menu.battery.icons.active" = accent.base;
"theme.bar.menus.menu.battery.icons.passive" = accent.base;
"theme.bar.menus.menu.battery.label.color" = accent.base;
"theme.bar.menus.menu.battery.listitems.active" = accent.base;
"theme.bar.menus.menu.battery.listitems.passive" = accent.base;
"theme.bar.menus.menu.battery.slider.background" = background;
"theme.bar.menus.menu.battery.slider.backgroundhover" = background;
"theme.bar.menus.menu.battery.slider.primary" = accent.base;
"theme.bar.menus.menu.battery.slider.puck" = accent.base;
"theme.bar.menus.menu.battery.text" = foreground;
"theme.bar.menus.menu.bluetooth.background.color" = background;
"theme.bar.menus.menu.bluetooth.border.color" = accent.base;
"theme.bar.menus.menu.bluetooth.card.color" = accent.dark;
"theme.bar.menus.menu.bluetooth.iconbutton.active" = accent.base;
"theme.bar.menus.menu.bluetooth.iconbutton.passive" = accent.base;
"theme.bar.menus.menu.bluetooth.icons.active" = accent.base;
"theme.bar.menus.menu.bluetooth.icons.passive" = accent.base;
"theme.bar.menus.menu.bluetooth.label.color" = accent.base;
"theme.bar.menus.menu.bluetooth.listitems.active" = accent.base;
"theme.bar.menus.menu.bluetooth.listitems.passive" = accent.base;
"theme.bar.menus.menu.bluetooth.scroller.color" = accent.base;
"theme.bar.menus.menu.bluetooth.status" = accent.base;
"theme.bar.menus.menu.bluetooth.switch.disabled" = accent.base;
"theme.bar.menus.menu.bluetooth.switch_divider" = accent.base;
"theme.bar.menus.menu.bluetooth.switch.enabled" = accent.base;
"theme.bar.menus.menu.bluetooth.switch.puck" = accent.base;
"theme.bar.menus.menu.bluetooth.text" = foreground;
"theme.bar.menus.menu.clock.background.color" = background;
"theme.bar.menus.menu.clock.border.color" = accent.base;
"theme.bar.menus.menu.clock.calendar.contextdays" = foreground;
"theme.bar.menus.menu.clock.calendar.currentday" = accent.base;
"theme.bar.menus.menu.clock.calendar.days" = accent.base;
"theme.bar.menus.menu.clock.calendar.paginator" = accent.base;
"theme.bar.menus.menu.clock.calendar.weekdays" = accent.base;
"theme.bar.menus.menu.clock.calendar.yearmonth" = accent.base;
"theme.bar.menus.menu.clock.card.color" = accent.dark;
"theme.bar.menus.menu.clock.text" = foreground;
"theme.bar.menus.menu.clock.time.time" = accent.base;
"theme.bar.menus.menu.clock.time.timeperiod" = accent.base;
"theme.bar.menus.menu.clock.weather.hourly.icon" = accent.base;
"theme.bar.menus.menu.clock.weather.hourly.temperature" = accent.base;
"theme.bar.menus.menu.clock.weather.hourly.time" = accent.base;
"theme.bar.menus.menu.clock.weather.icon" = accent.base;
"theme.bar.menus.menu.clock.weather.stats" = accent.base;
"theme.bar.menus.menu.clock.weather.status" = accent.base;
"theme.bar.menus.menu.clock.weather.temperature" = accent.base;
"theme.bar.menus.menu.clock.weather.thermometer.cold" = accent.base;
"theme.bar.menus.menu.clock.weather.thermometer.extremelycold" = accent.base;
"theme.bar.menus.menu.clock.weather.thermometer.extremelyhot" = accent.base;
"theme.bar.menus.menu.clock.weather.thermometer.hot" = accent.base;
"theme.bar.menus.menu.clock.weather.thermometer.moderate" = accent.base;
"theme.bar.menus.menu.dashboard.background.color" = background;
"theme.bar.menus.menu.dashboard.border.color" = accent.base;
"theme.bar.menus.menu.dashboard.card.color" = accent.dark;
"theme.bar.menus.menu.dashboard.controls.bluetooth.background" = background;
"theme.bar.menus.menu.dashboard.controls.bluetooth.text" = foreground;
"theme.bar.menus.menu.dashboard.controls.disabled" = accent.base;
"theme.bar.menus.menu.dashboard.controls.input.background" = background;
"theme.bar.menus.menu.dashboard.controls.input.text" = foreground;
"theme.bar.menus.menu.dashboard.controls.notifications.background" = background;
"theme.bar.menus.menu.dashboard.controls.notifications.text" = foreground;
"theme.bar.menus.menu.dashboard.controls.volume.background" = background;
"theme.bar.menus.menu.dashboard.controls.volume.text" = foreground;
"theme.bar.menus.menu.dashboard.controls.wifi.background" = background;
"theme.bar.menus.menu.dashboard.controls.wifi.text" = foreground;
"theme.bar.menus.menu.dashboard.directories.left.bottom.color" = accent.base;
"theme.bar.menus.menu.dashboard.directories.left.middle.color" = accent.base;
"theme.bar.menus.menu.dashboard.directories.left.top.color" = accent.base;
"theme.bar.menus.menu.dashboard.directories.right.bottom.color" = accent.base;
"theme.bar.menus.menu.dashboard.directories.right.middle.color" = accent.base;
"theme.bar.menus.menu.dashboard.directories.right.top.color" = accent.base;
"theme.bar.menus.menu.dashboard.monitors.bar_background" = background;
"theme.bar.menus.menu.dashboard.monitors.cpu.bar" = accent.base;
"theme.bar.menus.menu.dashboard.monitors.cpu.icon" = accent.base;
"theme.bar.menus.menu.dashboard.monitors.cpu.label" = accent.base;
"theme.bar.menus.menu.dashboard.monitors.disk.bar" = accent.base;
"theme.bar.menus.menu.dashboard.monitors.disk.icon" = accent.base;
"theme.bar.menus.menu.dashboard.monitors.disk.label" = accent.base;
"theme.bar.menus.menu.dashboard.monitors.gpu.bar" = accent.base;
"theme.bar.menus.menu.dashboard.monitors.gpu.icon" = accent.base;
"theme.bar.menus.menu.dashboard.monitors.gpu.label" = accent.base;
"theme.bar.menus.menu.dashboard.monitors.ram.bar" = accent.base;
"theme.bar.menus.menu.dashboard.monitors.ram.icon" = accent.base;
"theme.bar.menus.menu.dashboard.monitors.ram.label" = accent.base;
"theme.bar.menus.menu.dashboard.powermenu.confirmation.background" = background;
"theme.bar.menus.menu.dashboard.powermenu.confirmation.body" = accent.base;
"theme.bar.menus.menu.dashboard.powermenu.confirmation.border" = accent.base;
"theme.bar.menus.menu.dashboard.powermenu.confirmation.button_text" = foreground;
"theme.bar.menus.menu.dashboard.powermenu.confirmation.card" = accent.dark;
"theme.bar.menus.menu.dashboard.powermenu.confirmation.confirm" = accent.base;
"theme.bar.menus.menu.dashboard.powermenu.confirmation.deny" = accent.base;
"theme.bar.menus.menu.dashboard.powermenu.confirmation.label" = accent.base;
"theme.bar.menus.menu.dashboard.powermenu.logout" = accent.base;
"theme.bar.menus.menu.dashboard.powermenu.restart" = accent.base;
"theme.bar.menus.menu.dashboard.powermenu.shutdown" = accent.base;
"theme.bar.menus.menu.dashboard.powermenu.sleep" = accent.base;
"theme.bar.menus.menu.dashboard.profile.name" = accent.base;
"theme.bar.menus.menu.dashboard.shortcuts.background" = background;
"theme.bar.menus.menu.dashboard.shortcuts.recording" = accent.base;
"theme.bar.menus.menu.dashboard.shortcuts.text" = foreground;
"theme.bar.menus.menu.media.album" = accent.base;
"theme.bar.menus.menu.media.artist" = accent.base;
"theme.bar.menus.menu.media.background.color" = "#000000";
"theme.bar.menus.menu.media.border.color" = accent.base;
"theme.bar.menus.menu.media.buttons.background" = background;
"theme.bar.menus.menu.media.buttons.enabled" = accent.base;
"theme.bar.menus.menu.media.buttons.inactive" = accent.base;
"theme.bar.menus.menu.media.buttons.text" = foreground;
"theme.bar.menus.menu.media.card.color" = accent.dark;
"theme.bar.menus.menu.media.card.tint" = accent.dark;
"theme.bar.menus.menu.media.slider.background" = accent.dark;
"theme.bar.menus.menu.media.slider.backgroundhover" = secondary.dark;
"theme.bar.menus.menu.media.slider.primary" = accent.base;
"theme.bar.menus.menu.media.slider.puck" = accent.bright;
"theme.bar.menus.menu.media.song" = accent.base;
"theme.bar.menus.menu.media.timestamp" = accent.base;
"theme.bar.menus.menu.network.background.color" = background;
"theme.bar.menus.menu.network.border.color" = accent.base;
"theme.bar.menus.menu.network.card.color" = accent.dark;
"theme.bar.menus.menu.network.iconbuttons.active" = accent.base;
"theme.bar.menus.menu.network.iconbuttons.passive" = accent.base;
"theme.bar.menus.menu.network.icons.active" = accent.base;
"theme.bar.menus.menu.network.icons.passive" = accent.base;
"theme.bar.menus.menu.network.label.color" = accent.base;
"theme.bar.menus.menu.network.listitems.active" = accent.base;
"theme.bar.menus.menu.network.listitems.passive" = accent.base;
"theme.bar.menus.menu.network.scroller.color" = accent.base;
"theme.bar.menus.menu.network.status.color" = accent.base;
"theme.bar.menus.menu.network.switch.disabled" = accent.base;
"theme.bar.menus.menu.network.switch.enabled" = accent.base;
"theme.bar.menus.menu.network.switch.puck" = accent.base;
"theme.bar.menus.menu.network.text" = foreground;
"theme.bar.menus.menu.notifications.background" = background;
"theme.bar.menus.menu.notifications.border" = accent.base;
"theme.bar.menus.menu.notifications.card" = accent.dark;
"theme.bar.menus.menu.notifications.clear" = accent.base;
"theme.bar.menus.menu.notifications.label" = accent.base;
"theme.bar.menus.menu.notifications.no_notifications_label" = accent.base;
"theme.bar.menus.menu.notifications.pager.background" = background;
"theme.bar.menus.menu.notifications.pager.button" = accent.dark;
"theme.bar.menus.menu.notifications.pager.label" = accent.base;
"theme.bar.menus.menu.notifications.scrollbar.color" = accent.base;
"theme.bar.menus.menu.notifications.switch.disabled" = accent.base;
"theme.bar.menus.menu.notifications.switch_divider" = accent.base;
"theme.bar.menus.menu.notifications.switch.enabled" = accent.base;
"theme.bar.menus.menu.notifications.switch.puck" = accent.base;
"theme.bar.menus.menu.power.background.color" = background;
"theme.bar.menus.menu.power.border.color" = accent.base;
"theme.bar.menus.menu.power.buttons.logout.background" = background;
"theme.bar.menus.menu.power.buttons.logout.icon_background" = background;
"theme.bar.menus.menu.power.buttons.logout.icon" = accent.base;
"theme.bar.menus.menu.power.buttons.logout.text" = foreground;
"theme.bar.menus.menu.power.buttons.restart.background" = background;
"theme.bar.menus.menu.power.buttons.restart.icon_background" = background;
"theme.bar.menus.menu.power.buttons.restart.icon" = accent.base;
"theme.bar.menus.menu.power.buttons.restart.text" = foreground;
"theme.bar.menus.menu.power.buttons.shutdown.background" = background;
"theme.bar.menus.menu.power.buttons.shutdown.icon_background" = background;
"theme.bar.menus.menu.power.buttons.shutdown.icon" = accent.base;
"theme.bar.menus.menu.power.buttons.shutdown.text" = foreground;
"theme.bar.menus.menu.power.buttons.sleep.background" = background;
"theme.bar.menus.menu.power.buttons.sleep.icon_background" = background;
"theme.bar.menus.menu.power.buttons.sleep.icon" = accent.base;
"theme.bar.menus.menu.power.buttons.sleep.text" = foreground;
"theme.bar.menus.menu.systray.dropdownmenu.background" = background;
"theme.bar.menus.menu.systray.dropdownmenu.divider" = accent.base;
"theme.bar.menus.menu.systray.dropdownmenu.text" = foreground;
"theme.bar.menus.menu.volume.audio_slider.background" = background;
"theme.bar.menus.menu.volume.audio_slider.backgroundhover" = background;
"theme.bar.menus.menu.volume.audio_slider.primary" = accent.base;
"theme.bar.menus.menu.volume.audio_slider.puck" = accent.base;
"theme.bar.menus.menu.volume.background.color" = background;
"theme.bar.menus.menu.volume.border.color" = accent.base;
"theme.bar.menus.menu.volume.card.color" = accent.dark;
"theme.bar.menus.menu.volume.iconbutton.active" = accent.base;
"theme.bar.menus.menu.volume.iconbutton.passive" = accent.base;
"theme.bar.menus.menu.volume.input_slider.background" = background;
"theme.bar.menus.menu.volume.input_slider.backgroundhover" = background;
"theme.bar.menus.menu.volume.input_slider.primary" = accent.base;
"theme.bar.menus.menu.volume.input_slider.puck" = accent.base;
"theme.bar.menus.menu.volume.label.color" = accent.base;
"theme.bar.menus.menu.volume.listitems.active" = accent.base;
"theme.bar.menus.menu.volume.listitems.passive" = accent.base;
"theme.bar.menus.menu.volume.text" = foreground;
"theme.bar.menus.monochrome" = false;
"theme.bar.opacity" = t;
"theme.bar.outer_spacing" = "0em";
"theme.bar.transparent" = false;
"theme.font.name" = rice.font.code.name;
"theme.font.size" = "12px";
"theme.notification.actions.background" = background;
"theme.notification.actions.text" = foreground;
"theme.notification.background" = background;
"theme.notification.border" = accent.base;
"theme.notification.close_button.background" = accent.dark;
"theme.notification.close_button.label" = accent.base;
"theme.notification.label" = accent.base;
"theme.notification.labelicon" = accent.base;
"theme.notification.opacity" = 1.0;
"theme.notification.text" = foreground;
"theme.notification.time" = accent.base;
"theme.osd.bar_color" = accent.base;
"theme.osd.bar_container" = accent.dark;
"theme.osd.bar_empty_color" = accent.dark;
"theme.osd.bar_overflow_color" = accent.base;
"theme.osd.border.color" = border;
"theme.osd.icon_container" = secondary.dark;
"theme.osd.icon" = secondary.bright;
"theme.osd.label" = accent.bright;
"theme.osd.opacity" = t;
};
};
};
} }

View File

@@ -0,0 +1,126 @@
{ pkgs, ... }@all: with all; {
sops.secrets = {
"nx2site/radicale/password" = { };
};
home.packages = [
(pkgs.writers.writePython3Bin "caldav_event" {
libraries = with pkgs.python3Packages; [ caldav ics pytz ];
flakeIgnore = [ "E302" "E305" "E501" "E261" ];
} /* python */ ''
import os
import json
from caldav import DAVClient
from datetime import datetime, timezone
from ics import Calendar
from pytz import UTC
def get_password(password_file):
with open(password_file, "r") as file:
return file.read().strip()
def datetime_converter(obj):
if isinstance(obj, datetime):
return obj.isoformat()
return obj
def datetime_parser(dct):
for key, value in dct.items():
if isinstance(value, str):
try:
dct[key] = datetime.fromisoformat(value)
except ValueError:
pass
return dct
def load_cache(cache_file):
if os.path.exists(cache_file):
with open(cache_file, "r") as file:
return json.load(file, object_hook=datetime_parser)
return None
def save_cache(cache_file, data):
with open(cache_file, "w") as file:
json.dump(data, file, default=datetime_converter, indent=4)
def get_ongoing_or_next_event(url, username, password):
now = datetime.now(timezone.utc)
try:
client = DAVClient(url, username=username, password=password)
principal = client.principal()
calendars = principal.calendars()
next_event_dict = {
'event_name': "fake",
'event_begin': datetime(9000, 1, 1, tzinfo=UTC), # in the year 9000
'event_end': datetime(9000, 1, 1, 8, tzinfo=UTC),
}
for calendar in calendars:
for event in calendar.search(start=now):
calendar_parsed = Calendar(event.data)
for ics_event in calendar_parsed.events:
event_dict = {}
event_dict['event_name'] = ics_event.name or "(No Title)"
event_dict['event_begin'] = ics_event.begin.astimezone(timezone.utc)
event_dict['event_end'] = ics_event.end.astimezone(timezone.utc)
if event_dict['event_begin'] <= now and now <= event_dict['event_end']:
return event_dict
elif event_dict['event_begin'] >= now and next_event_dict['event_begin'] > event_dict['event_begin']:
next_event_dict = event_dict
return next_event_dict
except Exception as e:
print(f"Error accessing {url}: {e}")
return None
def is_expired(event_dict: dict):
now = datetime.now(timezone.utc).timestamp()
event_end = event_dict['event_end'].timestamp()
return not (now <= event_end)
if __name__ == "__main__":
password_file = "${config.sops.secrets."nx2site/radicale/password".path}" # Path to password file
cache_file = "/tmp/caldav_event_cache.json" # Path to cache file
url = "https://dav.${hyper.domain}/"
username = "nx2"
password = get_password(password_file)
now = datetime.now(timezone.utc).timestamp()
event_dict = load_cache(cache_file)
if (event_dict is None) or (is_expired(event_dict)):
event_dict = get_ongoing_or_next_event(url, username, password)
save_cache(cache_file, event_dict)
if event_dict is None: # none were found
print("* zen *")
exit(0)
event_start = event_dict['event_begin'].timestamp()
event_end = event_dict['event_end'].timestamp()
if event_start <= now <= event_end: # is currently ongoing
action_string = "ends"
t = event_end - now # time_remaining
else: # is in the future
action_string = "starts"
t = event_start - now # time_remaining
hours, rem = divmod(int(t), 3600)
minutes, _ = divmod(rem, 60)
hour_string = f"{hours} hour{'s ' if hours != 1 else ' '}" if hours > 0 else ""
minu_string = f"{minutes} minute{'s ' if minutes != 1 else ' '}" if minutes > 0 else ""
if hour_string == "" and minu_string == "":
time_string = "now"
elif hour_string == "" or minu_string == "":
time_string = "in " + hour_string + minu_string
else:
time_string = "in " + hour_string + "and " + minu_string
print(f"{event_dict['event_name']} {action_string} {time_string}")
'')
];
}

View File

@@ -0,0 +1,14 @@
{ pkgs, ... }: let
sep = " ";
in {
home.packages = [
(pkgs.writeShellApplication { name = "cclock"; text = /* bash */ ''
ord=$(date +"%e" | awk '{printf("%d%s\n", $1, ($1==11||$1==12||$1==13)?"th":((($1%10)==1)?"st":((($1%10)==2)?"nd":((($1%10)==3)?"rd":"th"))))}')
if [ $# -eq 0 ]; then
echo "󰃮${sep}$(date +'%A the')" "$ord" "of" "$(date +'%B')" " ${sep}$(date +'%R')"
elif [ "$1" = "--no-icons" ]; then
echo "$(date +'%A the')" "$ord" "of" "$(date +'%B')" "$(date +'%R')"
fi
'';})
];
}

View File

@@ -0,0 +1,513 @@
{ pkgs, ... }@all: with all; {
xdg.configFile = {
"hyprpanel/modules.scss".text = with rice.color; /* scss */ ''
@include styleModule('cmodule-cclock', (
'text-color': ${accent.base},
/* 'icon-color': , */
/* 'icon-background': , */
/* 'label-background': #242438, */
/* 'inner-spacing': 0.5em, */
/* 'border-enabled': false, */
/* 'border-color': #cba6f7, */
/* 'icon-size': 1.2em */
));
@include styleModule('cmodule-caldav_event', (
'text-color': ${accent.base},
));
'';
"hyprpanel/modules.json".text = builtins.toJSON {
"custom/cclock" = {
execute = "cclock";
executeOnAction = "";
label = "{}";
interval = 60000;
hideOnEmpty = true;
actions.onLeftClick = "menu:calendar";
};
"custom/caldav_evnet" = {
execute = "caldav_event";
executeOnAction = "";
label = "{}";
interval = 60000;
hideOnEmpty = true;
actions = {};
};
};
};
programs.hyprpanel = {
enable = true;
package = pkgs.unstable.hyprpanel;
settings = with rice.color; let
t = builtins.toString (builtins.ceil (rice.transparency * 100));
in {
"bar.layouts" = {
"*" = {
"left" = [
"volume"
# "microphone"
# "cpu"
# "cputemp"
# "ram"
(pkgs.lib.mkIf (hyper.host == "NxXPS") "battery")
# "bluetooth"
"network"
"windowtitle"
];
"middle" = [ "workspaces" ];
"right" = [
"submap"
"custom/caldav_event"
"media"
"custom/cclock"
"notifications"
"systray"
];
};
};
"bar.bluetooth.label" = true;
"bar.customModules.submap.enabledIcon" = "[󰧹]";
"bar.customModules.submap.showSubmapName" = false;
"bar.customModules.submap.label" = false;
"bar.customModules.submap.icon" = true;
"bar.customModules.submap.disabledIcon" = "";
"bar.workspaces.applicationIconEmptyWorkspace" = "";
"bar.workspaces.applicationIconOncePerWorkspace" = false;
"bar.workspaces.numbered_active_indicator" = "color";
"bar.workspaces.scroll_speed" = 1;
"bar.workspaces.showAllActive" = false;
"bar.workspaces.showApplicationIcons" = true;
"bar.workspaces.show_icons" = false;
"bar.workspaces.show_numbered" = false;
"bar.workspaces.showWsIcons" = true;
"bar.workspaces.spacing" = 1;
"bar.workspaces.workspaceMask" = true;
"bar.workspaces.workspaces" = 5;
"theme.bar.background" = background;
"theme.bar.border.color" = accent.base;
"theme.bar.border_radius" = "0.2em";
"theme.bar.buttons.background" = background;
"theme.bar.buttons.background_opacity" = 0;
"theme.bar.buttons.spacing" = "0em";
"theme.bar.buttons.padding_x" = "0.5rem";
"theme.bar.buttons.battery.background" = background;
"theme.bar.buttons.battery.border" = accent.base;
"theme.bar.buttons.battery.icon_background" = background;
"theme.bar.buttons.battery.icon" = accent.base;
"theme.bar.buttons.battery.text" = accent.base;
"theme.bar.buttons.bluetooth.background" = background;
"theme.bar.buttons.bluetooth.border" = accent.base;
"theme.bar.buttons.bluetooth.icon_background" = background;
"theme.bar.buttons.bluetooth.icon" = accent.base;
"theme.bar.buttons.bluetooth.text" = accent.base;
"theme.bar.buttons.borderColor" = accent.base;
"theme.bar.buttons.clock.background" = background;
"theme.bar.buttons.clock.border" = accent.base;
"theme.bar.buttons.clock.icon_background" = background;
"theme.bar.buttons.clock.icon" = accent.base;
"theme.bar.buttons.clock.text" = accent.base;
"theme.bar.buttons.dashboard.background" = background;
"theme.bar.buttons.dashboard.border" = accent.base;
"theme.bar.buttons.dashboard.icon" = accent.base;
"theme.bar.buttons.icon_background" = background;
"theme.bar.buttons.icon" = accent.base;
"theme.bar.buttons.media.background" = background;
"theme.bar.buttons.media.border" = accent.base;
"theme.bar.buttons.media.icon_background" = background;
"theme.bar.buttons.media.icon" = accent.base;
"theme.bar.buttons.media.text" = accent.base;
"theme.bar.buttons.modules.cava.background" = background;
"theme.bar.buttons.modules.cava.border" = accent.base;
"theme.bar.buttons.modules.cava.icon_background" = background;
"theme.bar.buttons.modules.cava.icon" = accent.base;
"theme.bar.buttons.modules.cava.text" = accent.base;
"theme.bar.buttons.modules.cpu.background" = background;
"theme.bar.buttons.modules.cpu.border" = accent.base;
"theme.bar.buttons.modules.cpu.icon_background" = background;
"theme.bar.buttons.modules.cpu.icon" = accent.base;
"theme.bar.buttons.modules.cpu.text" = accent.base;
"theme.bar.buttons.modules.cpuTemp.background" = background;
"theme.bar.buttons.modules.cpuTemp.border" = accent.base;
"theme.bar.buttons.modules.cpuTemp.icon_background" = background;
"theme.bar.buttons.modules.cpuTemp.icon" = accent.base;
"theme.bar.buttons.modules.cpuTemp.text" = accent.base;
"theme.bar.buttons.modules.hypridle.background" = background;
"theme.bar.buttons.modules.hypridle.border" = accent.base;
"theme.bar.buttons.modules.hypridle.icon_background" = background;
"theme.bar.buttons.modules.hypridle.icon" = accent.base;
"theme.bar.buttons.modules.hypridle.text" = accent.base;
"theme.bar.buttons.modules.hyprsunset.background" = background;
"theme.bar.buttons.modules.hyprsunset.border" = accent.base;
"theme.bar.buttons.modules.hyprsunset.icon_background" = background;
"theme.bar.buttons.modules.hyprsunset.icon" = accent.base;
"theme.bar.buttons.modules.hyprsunset.text" = accent.base;
"theme.bar.buttons.modules.kbLayout.background" = background;
"theme.bar.buttons.modules.kbLayout.border" = accent.base;
"theme.bar.buttons.modules.kbLayout.icon_background" = background;
"theme.bar.buttons.modules.kbLayout.icon" = accent.base;
"theme.bar.buttons.modules.kbLayout.text" = accent.base;
"theme.bar.buttons.modules.microphone.background" = background;
"theme.bar.buttons.modules.microphone.border" = accent.base;
"theme.bar.buttons.modules.microphone.icon_background" = background;
"theme.bar.buttons.modules.microphone.icon" = accent.base;
"theme.bar.buttons.modules.microphone.text" = accent.base;
"theme.bar.buttons.modules.netstat.background" = background;
"theme.bar.buttons.modules.netstat.border" = accent.base;
"theme.bar.buttons.modules.netstat.icon_background" = background;
"theme.bar.buttons.modules.netstat.icon" = accent.base;
"theme.bar.buttons.modules.netstat.text" = accent.base;
"theme.bar.buttons.modules.power.background" = background;
"theme.bar.buttons.modules.power.border" = accent.base;
"theme.bar.buttons.modules.power.icon_background" = background;
"theme.bar.buttons.modules.power.icon" = accent.base;
"theme.bar.buttons.modules.ram.background" = background;
"theme.bar.buttons.modules.ram.border" = accent.base;
"theme.bar.buttons.modules.ram.icon_background" = background;
"theme.bar.buttons.modules.ram.icon" = accent.base;
"theme.bar.buttons.modules.ram.text" = accent.base;
"theme.bar.buttons.modules.storage.background" = background;
"theme.bar.buttons.modules.storage.border" = accent.base;
"theme.bar.buttons.modules.storage.icon_background" = background;
"theme.bar.buttons.modules.storage.icon" = accent.base;
"theme.bar.buttons.modules.storage.text" = accent.base;
"theme.bar.buttons.modules.submap.background" = background;
"theme.bar.buttons.modules.submap.border" = accent.base;
"theme.bar.buttons.modules.submap.icon_background" = background;
"theme.bar.buttons.modules.submap.icon" = accent.base;
"theme.bar.buttons.modules.submap.text" = special.base;
"theme.bar.buttons.modules.updates.background" = background;
"theme.bar.buttons.modules.updates.border" = accent.base;
"theme.bar.buttons.modules.updates.icon_background" = background;
"theme.bar.buttons.modules.updates.icon" = accent.base;
"theme.bar.buttons.modules.updates.text" = accent.base;
"theme.bar.buttons.modules.weather.background" = background;
"theme.bar.buttons.modules.weather.border" = accent.base;
"theme.bar.buttons.modules.weather.icon_background" = background;
"theme.bar.buttons.modules.weather.icon" = accent.base;
"theme.bar.buttons.modules.weather.text" = accent.base;
"theme.bar.buttons.modules.worldclock.background" = background;
"theme.bar.buttons.modules.worldclock.border" = accent.base;
"theme.bar.buttons.modules.worldclock.icon_background" = background;
"theme.bar.buttons.modules.worldclock.icon" = accent.base;
"theme.bar.buttons.modules.worldclock.text" = accent.base;
"theme.bar.buttons.monochrome" = false;
"theme.bar.buttons.network.background" = background;
"theme.bar.buttons.network.border" = accent.base;
"theme.bar.buttons.network.icon_background" = background;
"theme.bar.buttons.network.icon" = accent.base;
"theme.bar.buttons.network.text" = accent.base;
"theme.bar.buttons.notifications.background" = background;
"theme.bar.buttons.notifications.border" = accent.base;
"theme.bar.buttons.notifications.icon_background" = background;
"theme.bar.buttons.notifications.icon" = accent.base;
"theme.bar.buttons.notifications.total" = accent.base;
"theme.bar.buttons.opacity" = t;
"theme.bar.buttons.separator.color" = accent.base;
"theme.bar.buttons.style" = "default";
"theme.bar.buttons.systray.background" = background;
"theme.bar.buttons.systray.border" = accent.base;
"theme.bar.buttons.systray.customIcon" = accent.base;
"theme.bar.buttons.text" = accent.base;
"theme.bar.buttons.volume.background" = background;
"theme.bar.buttons.volume.border" = accent.base;
"theme.bar.buttons.volume.icon_background" = background;
"theme.bar.buttons.volume.icon" = accent.base;
"theme.bar.buttons.volume.text" = accent.base;
"theme.bar.buttons.windowtitle.background" = background;
"theme.bar.buttons.windowtitle.border" = secondary.base;
"theme.bar.buttons.windowtitle.icon_background" = background;
"theme.bar.buttons.windowtitle.icon" = secondary.base;
"theme.bar.buttons.windowtitle.text" = secondary.base;
"theme.bar.buttons.workspaces.active" = accent.bright;
"theme.bar.buttons.workspaces.available" = accent.base;
"theme.bar.buttons.workspaces.background" = background;
"theme.bar.buttons.workspaces.border" = accent.base;
"theme.bar.buttons.workspaces.hover" = foreground;
"theme.bar.buttons.workspaces.numbered_active_highlighted" = accent.base;
"theme.bar.buttons.workspaces.numbered_active_highlighted_text_color" = accent.dark;
"theme.bar.buttons.workspaces.numbered_active_highlight_padding" = "0.4em";
"theme.bar.buttons.workspaces.numbered_active_underline_color" = accent.bright;
"theme.bar.buttons.workspaces.numbered_inactive_padding" = "0.4em";
"theme.bar.buttons.workspaces.occupied" = secondary.base;
"theme.bar.buttons.workspaces.pill.width" = "4em";
"theme.bar.buttons.workspaces.smartHighlight" = true;
"theme.bar.buttons.y_margins" = "0em";
"theme.bar.location" = "bottom";
"theme.bar.menus.menu.battery.background.color" = background;
"theme.bar.menus.menu.battery.border.color" = accent.base;
"theme.bar.menus.menu.battery.card.color" = accent.dark;
"theme.bar.menus.menu.battery.icons.active" = accent.base;
"theme.bar.menus.menu.battery.icons.passive" = accent.base;
"theme.bar.menus.menu.battery.label.color" = accent.base;
"theme.bar.menus.menu.battery.listitems.active" = accent.base;
"theme.bar.menus.menu.battery.listitems.passive" = accent.base;
"theme.bar.menus.menu.battery.slider.background" = background;
"theme.bar.menus.menu.battery.slider.backgroundhover" = background;
"theme.bar.menus.menu.battery.slider.primary" = accent.base;
"theme.bar.menus.menu.battery.slider.puck" = accent.base;
"theme.bar.menus.menu.battery.text" = foreground;
"theme.bar.menus.menu.bluetooth.background.color" = background;
"theme.bar.menus.menu.bluetooth.border.color" = accent.base;
"theme.bar.menus.menu.bluetooth.card.color" = accent.dark;
"theme.bar.menus.menu.bluetooth.iconbutton.active" = accent.base;
"theme.bar.menus.menu.bluetooth.iconbutton.passive" = accent.base;
"theme.bar.menus.menu.bluetooth.icons.active" = accent.base;
"theme.bar.menus.menu.bluetooth.icons.passive" = accent.base;
"theme.bar.menus.menu.bluetooth.label.color" = accent.base;
"theme.bar.menus.menu.bluetooth.listitems.active" = accent.base;
"theme.bar.menus.menu.bluetooth.listitems.passive" = accent.base;
"theme.bar.menus.menu.bluetooth.scroller.color" = accent.base;
"theme.bar.menus.menu.bluetooth.status" = accent.base;
"theme.bar.menus.menu.bluetooth.switch.disabled" = accent.base;
"theme.bar.menus.menu.bluetooth.switch_divider" = accent.base;
"theme.bar.menus.menu.bluetooth.switch.enabled" = accent.base;
"theme.bar.menus.menu.bluetooth.switch.puck" = accent.base;
"theme.bar.menus.menu.bluetooth.text" = foreground;
"theme.bar.menus.menu.clock.background.color" = background;
"theme.bar.menus.menu.clock.border.color" = accent.base;
"theme.bar.menus.menu.clock.calendar.contextdays" = foreground;
"theme.bar.menus.menu.clock.calendar.currentday" = accent.base;
"theme.bar.menus.menu.clock.calendar.days" = accent.base;
"theme.bar.menus.menu.clock.calendar.paginator" = accent.base;
"theme.bar.menus.menu.clock.calendar.weekdays" = accent.base;
"theme.bar.menus.menu.clock.calendar.yearmonth" = accent.base;
"theme.bar.menus.menu.clock.card.color" = accent.dark;
"theme.bar.menus.menu.clock.text" = foreground;
"theme.bar.menus.menu.clock.time.time" = accent.base;
"theme.bar.menus.menu.clock.time.timeperiod" = accent.base;
"theme.bar.menus.menu.clock.weather.hourly.icon" = accent.base;
"theme.bar.menus.menu.clock.weather.hourly.temperature" = accent.base;
"theme.bar.menus.menu.clock.weather.hourly.time" = accent.base;
"theme.bar.menus.menu.clock.weather.icon" = accent.base;
"theme.bar.menus.menu.clock.weather.stats" = accent.base;
"theme.bar.menus.menu.clock.weather.status" = accent.base;
"theme.bar.menus.menu.clock.weather.temperature" = accent.base;
"theme.bar.menus.menu.clock.weather.thermometer.cold" = accent.base;
"theme.bar.menus.menu.clock.weather.thermometer.extremelycold" = accent.base;
"theme.bar.menus.menu.clock.weather.thermometer.extremelyhot" = accent.base;
"theme.bar.menus.menu.clock.weather.thermometer.hot" = accent.base;
"theme.bar.menus.menu.clock.weather.thermometer.moderate" = accent.base;
"theme.bar.menus.menu.dashboard.background.color" = background;
"theme.bar.menus.menu.dashboard.border.color" = accent.base;
"theme.bar.menus.menu.dashboard.card.color" = accent.dark;
"theme.bar.menus.menu.dashboard.controls.bluetooth.background" = background;
"theme.bar.menus.menu.dashboard.controls.bluetooth.text" = foreground;
"theme.bar.menus.menu.dashboard.controls.disabled" = accent.base;
"theme.bar.menus.menu.dashboard.controls.input.background" = background;
"theme.bar.menus.menu.dashboard.controls.input.text" = foreground;
"theme.bar.menus.menu.dashboard.controls.notifications.background" = background;
"theme.bar.menus.menu.dashboard.controls.notifications.text" = foreground;
"theme.bar.menus.menu.dashboard.controls.volume.background" = background;
"theme.bar.menus.menu.dashboard.controls.volume.text" = foreground;
"theme.bar.menus.menu.dashboard.controls.wifi.background" = background;
"theme.bar.menus.menu.dashboard.controls.wifi.text" = foreground;
"theme.bar.menus.menu.dashboard.directories.left.bottom.color" = accent.base;
"theme.bar.menus.menu.dashboard.directories.left.middle.color" = accent.base;
"theme.bar.menus.menu.dashboard.directories.left.top.color" = accent.base;
"theme.bar.menus.menu.dashboard.directories.right.bottom.color" = accent.base;
"theme.bar.menus.menu.dashboard.directories.right.middle.color" = accent.base;
"theme.bar.menus.menu.dashboard.directories.right.top.color" = accent.base;
"theme.bar.menus.menu.dashboard.monitors.bar_background" = background;
"theme.bar.menus.menu.dashboard.monitors.cpu.bar" = accent.base;
"theme.bar.menus.menu.dashboard.monitors.cpu.icon" = accent.base;
"theme.bar.menus.menu.dashboard.monitors.cpu.label" = accent.base;
"theme.bar.menus.menu.dashboard.monitors.disk.bar" = accent.base;
"theme.bar.menus.menu.dashboard.monitors.disk.icon" = accent.base;
"theme.bar.menus.menu.dashboard.monitors.disk.label" = accent.base;
"theme.bar.menus.menu.dashboard.monitors.gpu.bar" = accent.base;
"theme.bar.menus.menu.dashboard.monitors.gpu.icon" = accent.base;
"theme.bar.menus.menu.dashboard.monitors.gpu.label" = accent.base;
"theme.bar.menus.menu.dashboard.monitors.ram.bar" = accent.base;
"theme.bar.menus.menu.dashboard.monitors.ram.icon" = accent.base;
"theme.bar.menus.menu.dashboard.monitors.ram.label" = accent.base;
"theme.bar.menus.menu.dashboard.powermenu.confirmation.background" = background;
"theme.bar.menus.menu.dashboard.powermenu.confirmation.body" = accent.base;
"theme.bar.menus.menu.dashboard.powermenu.confirmation.border" = accent.base;
"theme.bar.menus.menu.dashboard.powermenu.confirmation.button_text" = foreground;
"theme.bar.menus.menu.dashboard.powermenu.confirmation.card" = accent.dark;
"theme.bar.menus.menu.dashboard.powermenu.confirmation.confirm" = accent.base;
"theme.bar.menus.menu.dashboard.powermenu.confirmation.deny" = accent.base;
"theme.bar.menus.menu.dashboard.powermenu.confirmation.label" = accent.base;
"theme.bar.menus.menu.dashboard.powermenu.logout" = accent.base;
"theme.bar.menus.menu.dashboard.powermenu.restart" = accent.base;
"theme.bar.menus.menu.dashboard.powermenu.shutdown" = accent.base;
"theme.bar.menus.menu.dashboard.powermenu.sleep" = accent.base;
"theme.bar.menus.menu.dashboard.profile.name" = accent.base;
"theme.bar.menus.menu.dashboard.shortcuts.background" = background;
"theme.bar.menus.menu.dashboard.shortcuts.recording" = accent.base;
"theme.bar.menus.menu.dashboard.shortcuts.text" = foreground;
"theme.bar.menus.menu.media.album" = accent.base;
"theme.bar.menus.menu.media.artist" = accent.base;
"theme.bar.menus.menu.media.background.color" = "#000000";
"theme.bar.menus.menu.media.border.color" = accent.base;
"theme.bar.menus.menu.media.buttons.background" = background;
"theme.bar.menus.menu.media.buttons.enabled" = accent.base;
"theme.bar.menus.menu.media.buttons.inactive" = accent.base;
"theme.bar.menus.menu.media.buttons.text" = foreground;
"theme.bar.menus.menu.media.card.color" = accent.dark;
"theme.bar.menus.menu.media.card.tint" = accent.dark;
"theme.bar.menus.menu.media.slider.background" = accent.dark;
"theme.bar.menus.menu.media.slider.backgroundhover" = secondary.dark;
"theme.bar.menus.menu.media.slider.primary" = accent.base;
"theme.bar.menus.menu.media.slider.puck" = accent.bright;
"theme.bar.menus.menu.media.song" = accent.base;
"theme.bar.menus.menu.media.timestamp" = accent.base;
"theme.bar.menus.menu.network.background.color" = background;
"theme.bar.menus.menu.network.border.color" = accent.base;
"theme.bar.menus.menu.network.card.color" = accent.dark;
"theme.bar.menus.menu.network.iconbuttons.active" = accent.base;
"theme.bar.menus.menu.network.iconbuttons.passive" = accent.base;
"theme.bar.menus.menu.network.icons.active" = accent.base;
"theme.bar.menus.menu.network.icons.passive" = accent.base;
"theme.bar.menus.menu.network.label.color" = accent.base;
"theme.bar.menus.menu.network.listitems.active" = accent.base;
"theme.bar.menus.menu.network.listitems.passive" = accent.base;
"theme.bar.menus.menu.network.scroller.color" = accent.base;
"theme.bar.menus.menu.network.status.color" = accent.base;
"theme.bar.menus.menu.network.switch.disabled" = accent.base;
"theme.bar.menus.menu.network.switch.enabled" = accent.base;
"theme.bar.menus.menu.network.switch.puck" = accent.base;
"theme.bar.menus.menu.network.text" = foreground;
"theme.bar.menus.menu.notifications.background" = background;
"theme.bar.menus.menu.notifications.border" = accent.base;
"theme.bar.menus.menu.notifications.card" = accent.dark;
"theme.bar.menus.menu.notifications.clear" = accent.base;
"theme.bar.menus.menu.notifications.label" = accent.base;
"theme.bar.menus.menu.notifications.no_notifications_label" = accent.base;
"theme.bar.menus.menu.notifications.pager.background" = background;
"theme.bar.menus.menu.notifications.pager.button" = accent.dark;
"theme.bar.menus.menu.notifications.pager.label" = accent.base;
"theme.bar.menus.menu.notifications.scrollbar.color" = accent.base;
"theme.bar.menus.menu.notifications.switch.disabled" = accent.base;
"theme.bar.menus.menu.notifications.switch_divider" = accent.base;
"theme.bar.menus.menu.notifications.switch.enabled" = accent.base;
"theme.bar.menus.menu.notifications.switch.puck" = accent.base;
"theme.bar.menus.menu.power.background.color" = background;
"theme.bar.menus.menu.power.border.color" = accent.base;
"theme.bar.menus.menu.power.buttons.logout.background" = background;
"theme.bar.menus.menu.power.buttons.logout.icon_background" = background;
"theme.bar.menus.menu.power.buttons.logout.icon" = accent.base;
"theme.bar.menus.menu.power.buttons.logout.text" = foreground;
"theme.bar.menus.menu.power.buttons.restart.background" = background;
"theme.bar.menus.menu.power.buttons.restart.icon_background" = background;
"theme.bar.menus.menu.power.buttons.restart.icon" = accent.base;
"theme.bar.menus.menu.power.buttons.restart.text" = foreground;
"theme.bar.menus.menu.power.buttons.shutdown.background" = background;
"theme.bar.menus.menu.power.buttons.shutdown.icon_background" = background;
"theme.bar.menus.menu.power.buttons.shutdown.icon" = accent.base;
"theme.bar.menus.menu.power.buttons.shutdown.text" = foreground;
"theme.bar.menus.menu.power.buttons.sleep.background" = background;
"theme.bar.menus.menu.power.buttons.sleep.icon_background" = background;
"theme.bar.menus.menu.power.buttons.sleep.icon" = accent.base;
"theme.bar.menus.menu.power.buttons.sleep.text" = foreground;
"theme.bar.menus.menu.systray.dropdownmenu.background" = background;
"theme.bar.menus.menu.systray.dropdownmenu.divider" = accent.base;
"theme.bar.menus.menu.systray.dropdownmenu.text" = foreground;
"theme.bar.menus.menu.volume.audio_slider.background" = background;
"theme.bar.menus.menu.volume.audio_slider.backgroundhover" = background;
"theme.bar.menus.menu.volume.audio_slider.primary" = accent.base;
"theme.bar.menus.menu.volume.audio_slider.puck" = accent.base;
"theme.bar.menus.menu.volume.background.color" = background;
"theme.bar.menus.menu.volume.border.color" = accent.base;
"theme.bar.menus.menu.volume.card.color" = accent.dark;
"theme.bar.menus.menu.volume.iconbutton.active" = accent.base;
"theme.bar.menus.menu.volume.iconbutton.passive" = accent.base;
"theme.bar.menus.menu.volume.input_slider.background" = background;
"theme.bar.menus.menu.volume.input_slider.backgroundhover" = background;
"theme.bar.menus.menu.volume.input_slider.primary" = accent.base;
"theme.bar.menus.menu.volume.input_slider.puck" = accent.base;
"theme.bar.menus.menu.volume.label.color" = accent.base;
"theme.bar.menus.menu.volume.listitems.active" = accent.base;
"theme.bar.menus.menu.volume.listitems.passive" = accent.base;
"theme.bar.menus.menu.volume.text" = foreground;
"theme.bar.menus.monochrome" = false;
"theme.bar.opacity" = t;
"theme.bar.outer_spacing" = "0em";
"theme.bar.transparent" = false;
"theme.font.name" = rice.font.code.name;
"theme.font.size" = "12px";
"theme.notification.actions.background" = background;
"theme.notification.actions.text" = foreground;
"theme.notification.background" = background;
"theme.notification.border" = accent.base;
"theme.notification.close_button.background" = accent.dark;
"theme.notification.close_button.label" = accent.base;
"theme.notification.label" = accent.base;
"theme.notification.labelicon" = accent.base;
"theme.notification.opacity" = 1.0;
"theme.notification.text" = foreground;
"theme.notification.time" = accent.base;
"theme.osd.bar_color" = accent.base;
"theme.osd.bar_container" = accent.dark;
"theme.osd.bar_empty_color" = accent.dark;
"theme.osd.bar_overflow_color" = accent.base;
"theme.osd.border.color" = border;
"theme.osd.icon_container" = secondary.dark;
"theme.osd.icon" = secondary.bright;
"theme.osd.label" = accent.bright;
"theme.osd.opacity" = t;
};
};
}

View File

@@ -0,0 +1,37 @@
{ pkgs, ... }: {
home.packages = [
(pkgs.writeShellApplication { name = "submap_indicator"; text = /*bash*/ ''
print_help() {
echo "Usage: submap_indicator {set <string>|unset}"
}
if [ $# -lt 1 ]; then
print_help; exit 1;
fi
case "$1" in
set)
# Check if there is a second argument for the 'set' operation
if [ $# -eq 2 ]; then
echo "$2" > /tmp/submap-indictor
pkill -RTMIN+8 waybar
pkill -RTMIN+8 hyprpanel
else
echo "Error: 'set' operation requires exactly one string argument."
print_help
exit 1
fi
;;
unset)
echo "" > /tmp/submap-indictor
pkill -RTMIN+8 waybar
pkill -RTMIN+8 hyprpanel
;;
*)
echo "Error: Unknown command '$1'"
print_help
exit 1
;;
esac
exit 0
'';})
];
}

165
home-modules/bar/waybar.nix Normal file
View File

@@ -0,0 +1,165 @@
{ pkgs, ... }@all: with all; let
sep = " ";
in {
programs.waybar = {
enable = false;
package = pkgs.waybar;
settings = {
bar = {
# height = 20;
layer = "top";
position = "bottom";
margin-top = 0;
# margin-left = rice.gap-size;
# margin-bottom = rice.gap-size;
# margin-right = rice.gap-size;
margin-left = 0;
margin-bottom = 0;
margin-right = 0;
spacing = 10;
fixed-center = true;
modules-left = [
# "cpu"
# "memory"
"wireplumber"
"backlight"
"battery"
"network"
"hyprland/window"
];
modules-center = [
"hyprland/workspaces"
];
modules-right = [
"custom/mode"
"custom/caldav_event"
"custom/cclock"
"tray"
];
"hyprland/workspaces" = {
on-click = "activate";
format = "{name}";
all-outputs = false;
active-only = false;
};
"hyprland/window" = {
# format = "${sep}{}";
format = "{}";
separate-outputs = true;
};
"custom/cclock" = {
exec = "cclock";
restart-interval = 60;
};
"custom/caldav_event" = {
format = "󰃰${sep}{}";
exec = "caldav_event";
restart-interval = 60;
max-width = 60;
};
"custom/mode" = {
exec = "cat /tmp/submap-indictor";
interval = "once";
signal = 8;
};
cpu = {
interval = 1;
format = "󰍛${sep}{}%";
max-length = 10;
};
memory = {
interval = 5;
format = "${sep}{avail:.0f}G free";
};
battery = {
interval = 60;
tooltip = false;
format = "{icon}${sep}{capacity}%";
states = {
warning = 15;
critical = 5;
};
format-icons = [ " " " " " " " " " " ];
format-charging = "{icon}${sep}+{capacity}%";
format-plugged = "{icon}${sep}P{capacity}%";
format-full = "{icon}${sep}F{capacity}%";
};
backlight = {
device = "eDP-1";
format = "{icon}${sep}{percent}%";
format-icons = [ "" "" "" "" "" "" "" "" "" ];
};
network = {
format-wifi = "${sep}{essid}";
format-ethernet = "󰈀${sep}Wired";
format-disconnected = "󰌙${sep}Disconnected";
};
wireplumber = {
format = "󰕾${sep}{volume}%";
format-muted = "󰝟${sep}--%";
};
};
};
style = with rice.color; let f = rice.lib.hex-to-rgb-comma-string; in /* css */ ''
* {
font-family: ${rice.font.code.name};
font-size: 1em;
min-height: 0px;
margin: 0px;
padding: 0px;
}
window#waybar {
background: rgba(${f background},${builtins.toString rice.transparency});
}
#clock,
#custom-cclock,
#custom-mode,
#custom-caldav-event,
#battery,
#cpu,
#tray,
#disk,
#backlight,
#network,
#wireplumber,
#memory,
#window,
#workspaces {
padding: 0px 3px;
margin-top: 0.3em;
border-radius: ${builtins.toString rice.rounding}px;
color: rgb(${f accent.bright});
}
#workspaces button {
color: rgb(${f accent.base});
padding-left: 15px;
padding-right: 15px;
border-radius: ${builtins.toString rice.rounding}px;
}
#workspaces button.active { color: rgb(${f background}); background-color: rgb(${f accent.base}); }
#workspaces button:hover { color: rgb(${f tertiary.bright}); }
#workspaces button.urgent { background-color: rgba(${f magenta.base},${builtins.toString rice.transparency}); }
#window, #custom-caldav_event {
font-family: ${rice.font.base.name}, ${rice.font.code.name};
color: rgb(${f tertiary.bright});
}
#wireplumber.muted { color: rgb(${f tertiary.bright}); }
#wireplumber { padding-left: 10px; }
#battery.warning:not(.charging) { color: rgb(${f green.base});; }
#battery.charging { color: rgb(${f green.base}); }
#battery.critical {
background: rgb(${f negative.base});
color: rgb(${f foreground});
}
#custom-mode { color: rgb(${f red.base}); }
'';
};
}

View File

@@ -52,7 +52,7 @@ in {
packages = with pkgs; [ packages = with pkgs; [
chatterino2 chatterino2
streamlink streamlink
mpv # mpv
]; ];
file = { file = {
".local/share/chatterino/Settings/settings.json".text = with secrets.chatterino; /* json */ '' ".local/share/chatterino/Settings/settings.json".text = with secrets.chatterino; /* json */ ''

View File

@@ -67,13 +67,13 @@
/* New tab page */ /* New tab page */
--newtab-background-color : ${background} !important; --newtab-background-color : ${background} !important;
--newtab-background-color-secondary : ${background} !important; --newtab-background-color-secondary : ${secondary.dark} !important;
--newtab-text-primary-color : ${foreground} !important; --newtab-text-primary-color : ${foreground} !important;
--newtab-text-secondary-color : ${secondary.base} !important; --newtab-text-secondary-color : ${secondary.base} !important;
--newtab-search-icon-color : ${accent.base} !important; --newtab-search-icon-color : ${accent.base} !important;
--tabpanel-background-color : transparent !important; --tabpanel-background-color : transparent !important;
background : rgba(${rice.lib.hex-to-rgb-comma-string background}, ${builtins.toString rice.transparency}) !important; background : linear-gradient(180deg,rgba(${rice.lib.hex-to-rgb-comma-string secondary.dark}, ${builtins.toString rice.transparency}) 0%, rgba(${rice.lib.hex-to-rgb-comma-string background}, ${builtins.toString rice.transparency}) 100%) !important;
} }
.tabbrowser-tab[selected="true"] { .tabbrowser-tab[selected="true"] {
color: ${background} !important; color: ${background} !important;
@@ -194,6 +194,21 @@
background-color: transparent !important; background-color: transparent !important;
} }
} }
@-moz-document domain(youtube.com) {
body, html, div#content, ytd-app, #frosted-glass.with-chipbar.ytd-app, ytd-shorts[is-dark] #cinematic-shorts-scrim.ytd-shorts {
background-color: transparent !important;
}
#background.ytd-masthead, div#background {
background-color: rgba(${rice.lib.hex-to-rgb-comma-string background}, ${builtins.toString rice.transparency}) !important;
backdrop-filter: blur(100px);
}
* {
--yt-spec-base-background: transparent;
--yt-spec-raised-background: rgba(${rice.lib.hex-to-rgb-comma-string background}, ${builtins.toString rice.transparency}) !important;
--yt-spec-menu-background: rgba(${rice.lib.hex-to-rgb-comma-string accent.dark}, ${builtins.toString rice.transparency}) !important;
--yt-spec-inverted-background: rgba(${rice.lib.hex-to-rgb-comma-string secondary.dark}, ${builtins.toString rice.transparency}) !important;
}
}
@-moz-document domain(mynixos.com) { @-moz-document domain(mynixos.com) {
body, html { body, html {

View File

@@ -110,6 +110,12 @@
mkdir $argv mkdir $argv
cd $argv cd $argv
''; '';
nx_backup = let
destination = if hyper.host == "NxNORTH" then "${hyper.home}/shared/" else "${hyper.home}/backups/";
in pkgs.lib.mkIf (hyper.host != "NxACE") ''
set RPATH (curl -s https://${hyper.domain}/latest-backup)
rsync -avz --info=progress2 -e "ssh -p ${builtins.toString secrets.ssh.port}" ${hyper.user}@ssh.${hyper.domain}:"$RPATH" ${destination}
'';
# gpg = ''; # gpg = '';
# set bold \e[1m # set bold \e[1m
# set green \e[32m # set green \e[32m

View File

@@ -10,7 +10,7 @@ let
second = { name = "desc:Sony SONY TV 0x01010101"; resolution = "1920x1080"; position = "0x0"; scale = "1.0"; }; second = { name = "desc:Sony SONY TV 0x01010101"; resolution = "1920x1080"; position = "0x0"; scale = "1.0"; };
}; };
north = { north = {
main = { name = "desc:Iiyama North America PL3270Q na"; resolution = "2560x1440"; position = "1920x150"; scale = "1.0"; }; main = { name = "desc:Iiyama North America PL3270Q na"; resolution = "2560x1440"; position = "1920x0"; scale = "1.0"; };
left = { name = "desc:Philips Consumer Electronics Company 273PLPH AU11423002132"; resolution = "1920x1080"; position = "0x0"; scale = "1.0"; }; left = { name = "desc:Philips Consumer Electronics Company 273PLPH AU11423002132"; resolution = "1920x1080"; position = "0x0"; scale = "1.0"; };
# right = { name = "HDMI-A-2"; resolution = "1920x1080"; position = "4480x360"; scale = "1.0"; }; # right = { name = "HDMI-A-2"; resolution = "1920x1080"; position = "4480x360"; scale = "1.0"; };
}; };

80
home-modules/mpv.nix Normal file
View File

@@ -0,0 +1,80 @@
{ pkgs, ... }@all: with all; {
programs.mpv = {
enable = true;
package = pkgs.mpv;
config = {
# osc = false; # Disables the on-screen controller (seekbar, volume, etc.)
# osd-bar = false; # Disables the on-screen display progress bar
demuxer-max-back-bytes = 4294967296; # Sets the maximum number of bytes to buffer for seeking backwards
demuxer-max-bytes = 4294967296; # Sets the maximum number of bytes to buffer for seeking forwards
interpolation = true; # Enables frame interpolation for smoother playback
video-sync = "display-resample"; # Synchronizes video playback to the display's refresh rate
sub-visibility = true; # Hides subtitles by default
sub-auto = "fuzzy"; # Automatically loads subtitles if their filename is similar to the video file
sub-font = rice.font.base.name;
# sub-blur = 10; # this blurs the whole thing, text aswell
sub-color = rice.color.accent.bright;
sub-back-color = "${rice.color.background}${rice.lib.float-to-drune 0.8}"; # does not seem to work
# sub-border-size = 0;
sub-border-style = "opaque-box";
background-color = "${rice.color.background}"; # transparency breaks blur on hyprland sometimes, so just rgb
alang = "en,eng,de,ger"; # Sets preferred audio languages in order
slang = "en,eng,de,ger"; # Sets preferred subtitle languages in order
vlang = "en,eng,de,ger"; # Sets preferred video languages in order
save-position-on-quit = true; # Saves the playback position when quitting
ignore-path-in-watch-later-config = true; # Ignores the path in the watch-later configuration
ytdl-format = "bestvideo[height<=?1080]+bestaudio/best"; # Sets the format for downloading YouTube videos
vo = pkgs.lib.mkIf hyper.nvidia.enable "gpu";
hwdec = if hyper.nvidia.enable then "no" else "no"; # bugged
};
scripts = with pkgs.mpvScripts; [
mpris # use media keys
thumbfast # thumbnails on timeline hover
# uosc # custom ui
sponsorblock
];
bindings = {
"O" = ''no-osd cycle-values glsl-shaders "~~/shaders/invert.glsl" ""; show-text "Invert Shader"'';
# "tab" = ''script-binding uosc/toggle-ui'';
# "space" = ''cycle pause; script-binding uosc/flash-pause-indicator'';
# "right" = ''seek 5'';
# "left" = ''seek -5'';
# "shift+right" = ''seek 30; script-binding uosc/flash-timeline'';
# "shift+left" = ''seek -30; script-binding uosc/flash-timeline'';
# "m" = ''no-osd cycle mute; script-binding uosc/flash-volume'';
# "up" = ''no-osd add volume 10; script-binding uosc/flash-volume'';
# "down" = ''no-osd add volume -10; script-binding uosc/flash-volume'';
# "[" = ''no-osd add speed -0.25; script-binding uosc/flash-speed'';
# "]" = ''no-osd add speed 0.25; script-binding uosc/flash-speed'';
# "\\" = ''no-osd set speed 1; script-binding uosc/flash-speed'';
# ">" = ''script-binding uosc/next; script-message-to uosc flash-elements top_bar,timeline'';
# "<" = ''script-binding uosc/prev; script-message-to uosc flash-elements top_bar,timeline>'';
};
scriptOpts = {
thumbfast = {
spawn_first = true;
network = true;
hwdec = true;
};
uosc = {
timeline_size = 25;
timeline_persistency = "paused,audio";
progress = "always";
progress_size = 4;
progress_line_width = 4;
controls = "subtitles,<has_many_audio>audio,<has_many_video>video,<has_many_edition>editions,<stream>stream-quality";
top_bar = "never";
refine = "text_width";
};
};
};
xdg.configFile."mpv/shaders/invert.glsl".text = /* glsl */ ''
//!HOOK LUMA
//!BIND HOOKED
vec4 hook()
{
float luma = LUMA_texOff(0).x;
return vec4(1.0 - luma);
}
'';
}

View File

@@ -11,8 +11,7 @@
theme = "matrix"; theme = "matrix";
provider = { provider = {
ollama = { ollama = {
apiKey = "KEY"; name = "Ollama (local)";
disabled = false;
npm = "@ai-sdk/openai-compatible"; npm = "@ai-sdk/openai-compatible";
options = { options = {
baseURL = "http://localhost:11434/v1"; baseURL = "http://localhost:11434/v1";

View File

@@ -2,7 +2,6 @@
home.packages = with pkgs; [ home.packages = with pkgs; [
chromium chromium
element-desktop element-desktop
mpv
qbittorrent qbittorrent
unstable.spotify unstable.spotify
wl-clipboard wl-clipboard

View File

@@ -20,7 +20,6 @@
lolcat lolcat
lynx lynx
mediainfo mediainfo
mpv
neofetch neofetch
pastel pastel
pdfgrep pdfgrep

View File

@@ -0,0 +1,8 @@
{ pkgs, ... }@all: with all;
{
home = {
packages = with pkgs; [
glsl_analyzer
];
};
}

33
home-modules/rclone.nix Normal file
View File

@@ -0,0 +1,33 @@
{ pkgs, ... }@all: with all; {
home.packages = with pkgs; [ rclone ];
sops.secrets."nx2site/copyparty/user-password/${hyper.user}".path = "%r/secrets/copyparty/user-password/${hyper.user}";
programs.rclone = {
enable = true;
package = pkgs.rclone;
remotes = {
"file.${hyper.domain}" = {
config = {
type = "webdav";
vendor = "owncloud"; # copyparty
url = "https://file.${hyper.domain}/";
user = hyper.user;
pacer_min_sleep = "0.01ms";
};
mounts = {
"" = {
enable = true;
mountPoint = "${hyper.home}/file.nx2.site/";
options = {
vfs-cache-mode = "writes";
dir-cache-time = "5s";
};
};
};
secrets = {
pass = "/run/user/1000/secrets/copyparty/user-password/${hyper.user}";
};
};
};
};
}

View File

@@ -139,7 +139,7 @@
weird = alter_hue(ilist=accent, hue=80) weird = alter_hue(ilist=accent, hue=80)
special = alter_hue(ilist=accent, hue=180) special = alter_hue(ilist=accent, hue=180)
foreground = alter_l(accent, 0.9) foreground = alter_l(accent, 0.9)
background = alter_l(accent, 0.1) background = alter_l(accent, 0.05)
d = { d = {
"base": { "base": {

View File

@@ -1,7 +1,9 @@
{ pkgs, ... }@all: with all; { pkgs, ... }@all: with all; let
{ tfc = pkgs.latest.xdg-desktop-portal-termfilechooser;
home.packages = with pkgs; [ in {
unar home.packages = [
pkgs.unar
tfc
]; ];
programs.yazi = { programs.yazi = {
@@ -328,6 +330,12 @@
border_symbol = ""; border_symbol = "";
border_style = { fg = border; }; border_style = { fg = border; };
}; };
tabs = {
active = { fg = accent.dark; bg = accent.base; };
inactive = { fg = secondary.base; bg = secondary.dark; };
# sep_inner =
# sep_outer =
};
status = { status = {
separator_open = " "; #""; separator_open = " "; #"";
separator_close = " "; #""; separator_close = " "; #"";
@@ -397,73 +405,23 @@
}; };
}; };
xdg = { xdg = {
# # https://github.com/hunkyburrito/xdg-desktop-portal-termfilechooser/pull/44 configFile."xdg-desktop-portal-termfilechooser/config" = {
configFile = let force = true;
wrapper = pkgs.writeShellApplication { name = "yazi-wrapper.sh"; text = /*bash*/ '' text = ''
set -ex
multiple="$1"
directory="$2"
save="$3"
path="$4"
out="$5"
cmd="yazi"
termcmd="''${TERMCMD:-kitty --title 'termfilechooser'}"
if [ "$save" = "1" ]; then
# save a file
set -- --chooser-file="$out" "$path"
elif [ "$directory" = "1" ]; then
# upload files from a directory
set -- --chooser-file="$out" --cwd-file="$out" "$path"
elif [ "$multiple" = "1" ]; then
# upload multiple files
set -- --chooser-file="$out" "$path"
else
# upload only 1 file
set -- --chooser-file="$out" "$path"
fi
command="$termcmd $cmd"
for arg in "$@"; do
# escape double quotes
escaped=$(printf "%s" "$arg" | sed -E 's/[\"\(\)\{\}\|]//g')
# escape spaces
command="$command \"$escaped\""
done
sh -c "$command"
'';};
in {
"xdg-desktop-portal-termfilechooser/config".text = ''
[filechooser] [filechooser]
cmd=${wrapper}/bin/yazi-wrapper.sh cmd=${tfc}/share/xdg-desktop-portal-termfilechooser/yazi-wrapper.sh
env=TERMCMD=ghostty --title="terminal-file-picker -e" env=TERMCMD=ghostty --title="terminal-file-picker -e"
default_dir=$HOME default_dir=$HOME
open_mode=suggested open_mode=suggested
save_mode=last save_mode=last
''; '';
# "xdg-desktop-portal-termfilechooser/config".text = ''
# [filechooser]
# cmd=${pkgs.latest.xdg-desktop-portal-termfilechooser}/share/xdg-desktop-portal-termfilechooser/yazi-wrapper.sh
# env=TERMCMD=ghostty --title="terminal-file-picker -e"
# default_dir=$HOME
# open_mode=suggested
# save_mode=last
# '';
}; };
portal = { portal = {
enable = true; enable = true;
extraPortals = [ pkgs.latest.xdg-desktop-portal-termfilechooser ]; xdgOpenUsePortal = true;
config = { config.common."org.freedesktop.impl.portal.FileChooser" = "termfilechooser";
common = { extraPortals = [ tfc ];
"org.freedesktop.impl.portal.FileChooser" = "termfilechooser";
}; };
}; };
}; home.sessionVariables."GTK_USE_PORTAL" = "1";
};
home.sessionVariables = {
GTK_USE_PORTAL = "1";
};
} }

View File

@@ -10,7 +10,7 @@
completion-fg = foreground; completion-fg = foreground;
completion-highlight-bg = background; completion-highlight-bg = background;
completion-highlight-fg = accent.base; completion-highlight-fg = accent.base;
default-bg = "rgba(${f background},${t})"; default-bg = "rgba(${f accent.dark},${t})";
default-fg = foreground; default-fg = foreground;
highlight-active-color = "rgba(${f accent.base},0.5)"; highlight-active-color = "rgba(${f accent.base},0.5)";
highlight-color = "rgba(${f secondary.base},0.5)"; highlight-color = "rgba(${f secondary.base},0.5)";

View File

@@ -28,6 +28,7 @@
./home-modules/latex.nix ./home-modules/latex.nix
./home-modules/mako.nix ./home-modules/mako.nix
# ./home-modules/matrix.nix # ./home-modules/matrix.nix
./home-modules/mpv.nix
./home-modules/nh.nix ./home-modules/nh.nix
./home-modules/nixd.nix ./home-modules/nixd.nix
./home-modules/nvidia.nix ./home-modules/nvidia.nix
@@ -43,11 +44,13 @@
./home-modules/pnx.nix ./home-modules/pnx.nix
./home-modules/programming/c.nix ./home-modules/programming/c.nix
./home-modules/programming/gleam.nix ./home-modules/programming/gleam.nix
./home-modules/programming/glsl.nix
./home-modules/programming/go.nix ./home-modules/programming/go.nix
./home-modules/programming/java.nix ./home-modules/programming/java.nix
./home-modules/programming/js.nix ./home-modules/programming/js.nix
./home-modules/programming/python.nix ./home-modules/programming/python.nix
./home-modules/qt.nix ./home-modules/qt.nix
./home-modules/rclone.nix
./home-modules/rofi.nix ./home-modules/rofi.nix
./home-modules/scanning.nix ./home-modules/scanning.nix
./home-modules/sent.nix ./home-modules/sent.nix

View File

@@ -1,4 +1,4 @@
{ pkgs, ... }@all: with all; { config, pkgs, ... }@all: with all;
{ {
# sops.secrets = { # sops.secrets = {
# "wireless-networking.env" = {}; # "wireless-networking.env" = {};
@@ -15,6 +15,7 @@
}; };
enableIPv6 = true; enableIPv6 = true;
firewall.allowedTCPPorts = [ firewall.allowedTCPPorts = [
(pkgs.lib.mkIf config.services.ollama.enable 11434)
80 80
443 443
8000 8000

View File

@@ -4,7 +4,7 @@
package = if hyper.nvidia.enable then pkgs.ollama-cuda else pkgs.ollama; package = if hyper.nvidia.enable then pkgs.ollama-cuda else pkgs.ollama;
enable = true; enable = true;
acceleration = lib.mkIf hyper.nvidia.enable "cuda"; acceleration = lib.mkIf hyper.nvidia.enable "cuda";
host = if hyper.host == "NxACE" then "0.0.0.0" else "127.0.0.1"; host = "0.0.0.0";
port = 11434; port = 11434;
environmentVariables = { environmentVariables = {
OLLAMA_ORIGINS = "*"; OLLAMA_ORIGINS = "*";