diff --git a/flake-modules/colors.json b/flake-modules/colors.json index 61eecac..ea48ae1 100644 --- a/flake-modules/colors.json +++ b/flake-modules/colors.json @@ -1,13 +1,13 @@ { "base": { - "foreground": "#fefefe", - "background": "#020202" + "foreground": "#dcd5f5", + "background": "#100929" }, "to_alter": { - "accent": "#aaaaff", - "secondary": "#aaeeff", - "tertiary": "#aaffaa", - "special": "#aaffaa", - "weird": "#ffffaa" + "accent": "#765ad7", + "secondary": "#ce32ff", + "tertiary": "#879eaa", + "special": "#bad759", + "weird": "#d75991" } } \ No newline at end of file diff --git a/flake-modules/rice.nix b/flake-modules/rice.nix index 0503d59..12cfc31 100644 --- a/flake-modules/rice.nix +++ b/flake-modules/rice.nix @@ -26,7 +26,7 @@ pkgs: rec { fbcolor = (builtins.fromJSON (builtins.readFile ./colors.json)).base; fcolor = facolor // fbcolor; xcolor = with ccolor; with fcolor; { - background = "#000000"; + # background = "#000000"; # foreground = "#dddddd"; # accent = blue; # secondary = cyan; diff --git a/flake.lock b/flake.lock index 0ca57bb..2ad837b 100644 --- a/flake.lock +++ b/flake.lock @@ -20,11 +20,11 @@ ] }, "locked": { - "lastModified": 1753216019, - "narHash": "sha256-zik7WISrR1ks2l6T1MZqZHb/OqroHdJnSnAehkE0kCk=", + "lastModified": 1755946532, + "narHash": "sha256-POePremlUY5GyA1zfbtic6XLxDaQcqHN6l+bIxdT5gc=", "owner": "hyprwm", "repo": "aquamarine", - "rev": "be166e11d86ba4186db93e10c54a141058bdce49", + "rev": "81584dae2df6ac79f6b6dae0ecb7705e95129ada", "type": "github" }, "original": { @@ -39,11 +39,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1755732626, - "narHash": "sha256-qLAElW0E2QmcrKAbLPjFdueAOpjp3HmlxaOQf4R4jas=", + "lastModified": 1756320983, + "narHash": "sha256-huaJ1CvBsylibf55pjiFEpiKxYU235iAzwMhJ+iDSjw=", "owner": "9001", "repo": "copyparty", - "rev": "cd8771fa522d1cf645c3c7e0193f07b53d81559c", + "rev": "f4f702c39dd2365f6ca43ed6b72a84c708fded8d", "type": "github" }, "original": { @@ -220,11 +220,11 @@ ] }, "locked": { - "lastModified": 1755776884, - "narHash": "sha256-CPM7zm6csUx7vSfKvzMDIjepEJv1u/usmaT7zydzbuI=", + "lastModified": 1756245065, + "narHash": "sha256-aAZNbGcWrVRZgWgkQbkabSGcDVRDMgON4BipMy69gvI=", "owner": "nix-community", "repo": "home-manager", - "rev": "4fb695d10890e9fc6a19deadf85ff79ffb78da86", + "rev": "54b2879ce622d44415e727905925e21b8f833a98", "type": "github" }, "original": { @@ -279,11 +279,11 @@ ] }, "locked": { - "lastModified": 1754305013, - "narHash": "sha256-u+M2f0Xf1lVHzIPQ7DsNCDkM1NYxykOSsRr4t3TbSM4=", + "lastModified": 1755678602, + "narHash": "sha256-uEC5O/NIUNs1zmc1aH1+G3GRACbODjk2iS0ET5hXtuk=", "owner": "hyprwm", "repo": "hyprgraphics", - "rev": "4c1d63a0f22135db123fc789f174b89544c6ec2d", + "rev": "157cc52065a104fc3b8fa542ae648b992421d1c7", "type": "github" }, "original": { @@ -308,11 +308,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1755781160, - "narHash": "sha256-8pOPsz8kMppCZa9HdvjxH/kB6DIdlpXXBcuNGLMZfSM=", + "lastModified": 1756325904, + "narHash": "sha256-PRz3GE4ZBScWrHTVegpM4B2YLZplp1iPwmZ9AeYBbsg=", "ref": "refs/heads/main", - "rev": "50a242f16abfc49efc6f89ea9cd14a3544888a25", - "revCount": 6384, + "rev": "378e130f1426648d8d734049800128f9882805bf", + "revCount": 6395, "submodules": true, "type": "git", "url": "https://github.com/hyprwm/Hyprland" @@ -340,11 +340,11 @@ ] }, "locked": { - "lastModified": 1755183521, - "narHash": "sha256-wrP8TM2lb2x0+PyTc7Uc3yfVBeIlYW7+hFeG14N9Cr8=", + "lastModified": 1756325158, + "narHash": "sha256-aJ9jAYtZ64MWBpWPfH1q+t6U9b6kJWc2yK9Vrlj6fZY=", "owner": "hyprwm", "repo": "hyprland-plugins", - "rev": "c1ddebb423acc7c88653c04de5ddafee64dac89a", + "rev": "bf843fc6adf90d43a5dd7742e9df61d395ba780d", "type": "github" }, "original": { @@ -508,11 +508,11 @@ ] }, "locked": { - "lastModified": 1754481650, - "narHash": "sha256-6u6HdEFJh5gY6VfyMQbhP7zDdVcqOrCDTkbiHJmAtMI=", + "lastModified": 1756117388, + "narHash": "sha256-oRDel6pNl/T2tI+nc/USU9ZP9w08dxtl7hiZxa0C/Wc=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "df6b8820c4a0835d83d0c7c7be86fbc555f1f7fd", + "rev": "b2ae3204845f5f2f79b4703b441252d8ad2ecfd0", "type": "github" }, "original": { @@ -533,11 +533,11 @@ ] }, "locked": { - "lastModified": 1751897909, - "narHash": "sha256-FnhBENxihITZldThvbO7883PdXC/2dzW4eiNvtoV5Ao=", + "lastModified": 1755184602, + "narHash": "sha256-RCBQN8xuADB0LEgaKbfRqwm6CdyopE1xIEhNc67FAbw=", "owner": "hyprwm", "repo": "hyprwayland-scanner", - "rev": "fcca0c61f988a9d092cbb33e906775014c61579d", + "rev": "b3b0f1f40ae09d4447c20608e5a4faf8bf3c492d", "type": "github" }, "original": { @@ -607,11 +607,11 @@ }, "nixpkgs-latest": { "locked": { - "lastModified": 1755792360, - "narHash": "sha256-Bp9mBVrO0c6EDGBXH4jWE+IlEf+FW+jJDSoFuf+ncg8=", + "lastModified": 1756326156, + "narHash": "sha256-EvRCnKAE5oL9wOIT/LrA5+pJVpTvhH71OReJDTOZDyk=", "owner": "nixos", "repo": "nixpkgs", - "rev": "dac37fbcd385fbb0ea1e6d153673f62b5f4e0079", + "rev": "636dea4f2cd65b8c558149a957423da47c1cbc95", "type": "github" }, "original": { @@ -639,11 +639,11 @@ }, "nixpkgs-unstable": { "locked": { - "lastModified": 1755615617, - "narHash": "sha256-HMwfAJBdrr8wXAkbGhtcby1zGFvs+StOp19xNsbqdOg=", + "lastModified": 1756266583, + "narHash": "sha256-cr748nSmpfvnhqSXPiCfUPxRz2FJnvf/RjJGvFfaCsM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "20075955deac2583bb12f07151c2df830ef346b4", + "rev": "8a6d5427d99ec71c64f0b93d45778c889005d9c2", "type": "github" }, "original": { @@ -654,11 +654,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1754725699, - "narHash": "sha256-iAcj9T/Y+3DBy2J0N+yF9XQQQ8IEb5swLFzs23CdP88=", + "lastModified": 1756266583, + "narHash": "sha256-cr748nSmpfvnhqSXPiCfUPxRz2FJnvf/RjJGvFfaCsM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "85dbfc7aaf52ecb755f87e577ddbe6dbbdbc1054", + "rev": "8a6d5427d99ec71c64f0b93d45778c889005d9c2", "type": "github" }, "original": { @@ -702,11 +702,11 @@ }, "nixpkgs_5": { "locked": { - "lastModified": 1755704039, - "narHash": "sha256-gKlP0LbyJ3qX0KObfIWcp5nbuHSb5EHwIvU6UcNBg2A=", + "lastModified": 1756217674, + "narHash": "sha256-TH1SfSP523QI7kcPiNtMAEuwZR3Jdz0MCDXPs7TS8uo=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "9cb344e96d5b6918e94e1bca2d9f3ea1e9615545", + "rev": "4e7667a90c167f7a81d906e5a75cba4ad8bee620", "type": "github" }, "original": { @@ -741,11 +741,11 @@ ] }, "locked": { - "lastModified": 1754416808, - "narHash": "sha256-c6yg0EQ9xVESx6HGDOCMcyRSjaTpNJP10ef+6fRcofA=", + "lastModified": 1755960406, + "narHash": "sha256-RF7j6C1TmSTK9tYWO6CdEMtg6XZaUKcvZwOCD2SICZs=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "9c52372878df6911f9afc1e2a1391f55e4dfc864", + "rev": "e891a93b193fcaf2fc8012d890dc7f0befe86ec2", "type": "github" }, "original": { @@ -932,11 +932,11 @@ ] }, "locked": { - "lastModified": 1753633878, - "narHash": "sha256-js2sLRtsOUA/aT10OCDaTjO80yplqwOIaLUqEe0nMx0=", + "lastModified": 1755354946, + "narHash": "sha256-zdov5f/GcoLQc9qYIS1dUTqtJMeDqmBmo59PAxze6e4=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "371b96bd11ad2006ed4f21229dbd1be69bed3e8a", + "rev": "a10726d6a8d0ef1a0c645378f983b6278c42eaa0", "type": "github" }, "original": { @@ -952,11 +952,11 @@ "rust-overlay": "rust-overlay_2" }, "locked": { - "lastModified": 1755740452, - "narHash": "sha256-4C6tuLUdt2ohMPthPMT2Ma+vbn/y7Qz5qfZXVXcb+08=", + "lastModified": 1756309929, + "narHash": "sha256-udly1zNvxR6UKFZSkbutSEZ9EihUd+pPCDBaseppB5s=", "owner": "sxyazi", "repo": "yazi", - "rev": "0054cf0b878bae84d1bf0c063801dc9c42aa6978", + "rev": "dd7afaa64aa54fac5bd30404eb44ccd9d68f31c5", "type": "github" }, "original": { diff --git a/home-modules/bar.nix b/home-modules/bar.nix index f8632bd..06cd61e 100644 --- a/home-modules/bar.nix +++ b/home-modules/bar.nix @@ -1,807 +1,9 @@ -{ pkgs, hyper, ... }@all: with all; let - sep = " "; -in { - sops.secrets = { - "nx2site/radicale/password" = { }; - }; - home.packages = [ - (pkgs.writeShellApplication { name = "submap_indicator"; text = /*bash*/ '' - print_help() { - echo "Usage: submap_indicator {set |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}") -'') +{ ... }: { + imports = [ + # ./bar/submap-indicator.nix + ./bar/cclock.nix + ./bar/caldav-event.nix + # ./bar/waybar.nix + ./bar/hyprpanel.nix ]; - 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; - }; - }; - }; } diff --git a/home-modules/bar/caldav-event.nix b/home-modules/bar/caldav-event.nix new file mode 100644 index 0000000..f8cefbc --- /dev/null +++ b/home-modules/bar/caldav-event.nix @@ -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}") +'') + ]; +} diff --git a/home-modules/bar/cclock.nix b/home-modules/bar/cclock.nix new file mode 100644 index 0000000..ce2ab53 --- /dev/null +++ b/home-modules/bar/cclock.nix @@ -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 + '';}) + ]; +} diff --git a/home-modules/bar/hyprpanel.nix b/home-modules/bar/hyprpanel.nix new file mode 100644 index 0000000..a21eb02 --- /dev/null +++ b/home-modules/bar/hyprpanel.nix @@ -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; + }; + }; +} diff --git a/home-modules/bar/submap-indicator.nix b/home-modules/bar/submap-indicator.nix new file mode 100644 index 0000000..d79b2b3 --- /dev/null +++ b/home-modules/bar/submap-indicator.nix @@ -0,0 +1,37 @@ +{ pkgs, ... }: { + home.packages = [ + (pkgs.writeShellApplication { name = "submap_indicator"; text = /*bash*/ '' + print_help() { + echo "Usage: submap_indicator {set |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 + '';}) + ]; +} diff --git a/home-modules/bar/waybar.nix b/home-modules/bar/waybar.nix new file mode 100644 index 0000000..52b91c9 --- /dev/null +++ b/home-modules/bar/waybar.nix @@ -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}); } + ''; + }; +} diff --git a/home-modules/chatterino.nix b/home-modules/chatterino.nix index e0a8915..2faa000 100644 --- a/home-modules/chatterino.nix +++ b/home-modules/chatterino.nix @@ -52,7 +52,7 @@ in { packages = with pkgs; [ chatterino2 streamlink - mpv + # mpv ]; file = { ".local/share/chatterino/Settings/settings.json".text = with secrets.chatterino; /* json */ '' diff --git a/home-modules/firefox.nix b/home-modules/firefox.nix index 4b89bd2..03caadd 100644 --- a/home-modules/firefox.nix +++ b/home-modules/firefox.nix @@ -67,13 +67,13 @@ /* New tab page */ --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-secondary-color : ${secondary.base} !important; --newtab-search-icon-color : ${accent.base} !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"] { color: ${background} !important; @@ -194,6 +194,21 @@ 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) { body, html { diff --git a/home-modules/fish.nix b/home-modules/fish.nix index afbf122..e6a721e 100644 --- a/home-modules/fish.nix +++ b/home-modules/fish.nix @@ -110,6 +110,12 @@ mkdir $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 = ''; # set bold \e[1m # set green \e[32m diff --git a/home-modules/hyprland.nix b/home-modules/hyprland.nix index d123118..05bf154 100644 --- a/home-modules/hyprland.nix +++ b/home-modules/hyprland.nix @@ -10,7 +10,7 @@ let second = { name = "desc:Sony SONY TV 0x01010101"; resolution = "1920x1080"; position = "0x0"; scale = "1.0"; }; }; 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"; }; # right = { name = "HDMI-A-2"; resolution = "1920x1080"; position = "4480x360"; scale = "1.0"; }; }; diff --git a/home-modules/mpv.nix b/home-modules/mpv.nix new file mode 100644 index 0000000..9e1b7e8 --- /dev/null +++ b/home-modules/mpv.nix @@ -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,audio,video,editions,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); + } + ''; +} diff --git a/home-modules/opencode.nix b/home-modules/opencode.nix index 3a57c32..7865a61 100644 --- a/home-modules/opencode.nix +++ b/home-modules/opencode.nix @@ -11,8 +11,7 @@ theme = "matrix"; provider = { ollama = { - apiKey = "KEY"; - disabled = false; + name = "Ollama (local)"; npm = "@ai-sdk/openai-compatible"; options = { baseURL = "http://localhost:11434/v1"; diff --git a/home-modules/pkgs-list/programs.nix b/home-modules/pkgs-list/programs.nix index 4ac2595..c936a71 100644 --- a/home-modules/pkgs-list/programs.nix +++ b/home-modules/pkgs-list/programs.nix @@ -2,7 +2,6 @@ home.packages = with pkgs; [ chromium element-desktop - mpv qbittorrent unstable.spotify wl-clipboard diff --git a/home-modules/pkgs-list/shell.nix b/home-modules/pkgs-list/shell.nix index 90a8f6b..9c35172 100644 --- a/home-modules/pkgs-list/shell.nix +++ b/home-modules/pkgs-list/shell.nix @@ -20,7 +20,6 @@ lolcat lynx mediainfo - mpv neofetch pastel pdfgrep diff --git a/home-modules/programming/glsl.nix b/home-modules/programming/glsl.nix new file mode 100644 index 0000000..7f77d81 --- /dev/null +++ b/home-modules/programming/glsl.nix @@ -0,0 +1,8 @@ +{ pkgs, ... }@all: with all; +{ + home = { + packages = with pkgs; [ + glsl_analyzer + ]; + }; +} diff --git a/home-modules/rclone.nix b/home-modules/rclone.nix new file mode 100644 index 0000000..fee8dfc --- /dev/null +++ b/home-modules/rclone.nix @@ -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}"; + }; + }; + }; + }; +} + diff --git a/home-modules/wallpaper-to-colors.nix b/home-modules/wallpaper-to-colors.nix index 9e84206..6f042b4 100644 --- a/home-modules/wallpaper-to-colors.nix +++ b/home-modules/wallpaper-to-colors.nix @@ -139,7 +139,7 @@ weird = alter_hue(ilist=accent, hue=80) special = alter_hue(ilist=accent, hue=180) foreground = alter_l(accent, 0.9) - background = alter_l(accent, 0.1) + background = alter_l(accent, 0.05) d = { "base": { diff --git a/home-modules/yazi.nix b/home-modules/yazi.nix index 74af1fa..848f4b8 100644 --- a/home-modules/yazi.nix +++ b/home-modules/yazi.nix @@ -1,7 +1,9 @@ -{ pkgs, ... }@all: with all; -{ - home.packages = with pkgs; [ - unar +{ pkgs, ... }@all: with all; let + tfc = pkgs.latest.xdg-desktop-portal-termfilechooser; +in { + home.packages = [ + pkgs.unar + tfc ]; programs.yazi = { @@ -328,6 +330,12 @@ border_symbol = "│"; border_style = { fg = border; }; }; + tabs = { + active = { fg = accent.dark; bg = accent.base; }; + inactive = { fg = secondary.base; bg = secondary.dark; }; + # sep_inner = + # sep_outer = + }; status = { separator_open = " "; #""; separator_close = " "; #""; @@ -397,73 +405,23 @@ }; }; xdg = { - # # https://github.com/hunkyburrito/xdg-desktop-portal-termfilechooser/pull/44 - configFile = let - wrapper = pkgs.writeShellApplication { name = "yazi-wrapper.sh"; text = /*bash*/ '' - 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 = '' + configFile."xdg-desktop-portal-termfilechooser/config" = { + force = true; + text = '' [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" default_dir=$HOME open_mode=suggested 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 = { enable = true; - extraPortals = [ pkgs.latest.xdg-desktop-portal-termfilechooser ]; - config = { - common = { - "org.freedesktop.impl.portal.FileChooser" = "termfilechooser"; - }; - }; + xdgOpenUsePortal = true; + config.common."org.freedesktop.impl.portal.FileChooser" = "termfilechooser"; + extraPortals = [ tfc ]; }; }; - home.sessionVariables = { - GTK_USE_PORTAL = "1"; - }; + home.sessionVariables."GTK_USE_PORTAL" = "1"; } diff --git a/home-modules/zathura.nix b/home-modules/zathura.nix index 447f635..9cc780d 100644 --- a/home-modules/zathura.nix +++ b/home-modules/zathura.nix @@ -10,7 +10,7 @@ completion-fg = foreground; completion-highlight-bg = background; completion-highlight-fg = accent.base; - default-bg = "rgba(${f background},${t})"; + default-bg = "rgba(${f accent.dark},${t})"; default-fg = foreground; highlight-active-color = "rgba(${f accent.base},0.5)"; highlight-color = "rgba(${f secondary.base},0.5)"; diff --git a/home.nix b/home.nix index 708878c..194c3dc 100644 --- a/home.nix +++ b/home.nix @@ -28,6 +28,7 @@ ./home-modules/latex.nix ./home-modules/mako.nix # ./home-modules/matrix.nix + ./home-modules/mpv.nix ./home-modules/nh.nix ./home-modules/nixd.nix ./home-modules/nvidia.nix @@ -43,11 +44,13 @@ ./home-modules/pnx.nix ./home-modules/programming/c.nix ./home-modules/programming/gleam.nix + ./home-modules/programming/glsl.nix ./home-modules/programming/go.nix ./home-modules/programming/java.nix ./home-modules/programming/js.nix ./home-modules/programming/python.nix ./home-modules/qt.nix + ./home-modules/rclone.nix ./home-modules/rofi.nix ./home-modules/scanning.nix ./home-modules/sent.nix diff --git a/system-modules/networking.nix b/system-modules/networking.nix index 0092696..246a0f5 100644 --- a/system-modules/networking.nix +++ b/system-modules/networking.nix @@ -1,4 +1,4 @@ -{ pkgs, ... }@all: with all; +{ config, pkgs, ... }@all: with all; { # sops.secrets = { # "wireless-networking.env" = {}; @@ -15,6 +15,7 @@ }; enableIPv6 = true; firewall.allowedTCPPorts = [ + (pkgs.lib.mkIf config.services.ollama.enable 11434) 80 443 8000 diff --git a/system-modules/ollama.nix b/system-modules/ollama.nix index 9fe38d3..446446a 100644 --- a/system-modules/ollama.nix +++ b/system-modules/ollama.nix @@ -4,7 +4,7 @@ package = if hyper.nvidia.enable then pkgs.ollama-cuda else pkgs.ollama; enable = true; 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; environmentVariables = { OLLAMA_ORIGINS = "*";