From e51fb08bfcc0ea7e53f2152770db3734e90aa691 Mon Sep 17 00:00:00 2001 From: "RingOfStorms (Joshua Bell)" Date: Sat, 23 Aug 2025 12:36:38 -0500 Subject: [PATCH] bunch of stuff with hyprland config, still not great --- .../desktop_environment/hyprland/default.nix | 20 +- .../hyprland/home_manager/default.nix | 5 +- .../hyprland/home_manager/hyprland.nix | 33 ++- .../hyprland/home_manager/hyprpanel.nix | 159 ----------- .../hyprland/home_manager/swaync.nix | 258 +++++++++++++++++ .../hyprland/home_manager/waybar.nix | 264 ++++++++++++++++++ common/secrets/secrets/secrets.nix | 2 +- hosts/lio/containers.nix | 1 - hosts/lio/flake.lock | 47 +--- hosts/lio/flake.nix | 31 +- hosts/oracle/o001/nginx.nix | 29 ++ 11 files changed, 632 insertions(+), 217 deletions(-) delete mode 100644 common/desktop_environment/hyprland/home_manager/hyprpanel.nix create mode 100644 common/desktop_environment/hyprland/home_manager/waybar.nix diff --git a/common/desktop_environment/hyprland/default.nix b/common/desktop_environment/hyprland/default.nix index e130991..9b627e0 100644 --- a/common/desktop_environment/hyprland/default.nix +++ b/common/desktop_environment/hyprland/default.nix @@ -60,11 +60,25 @@ with lib; environment.systemPackages = with pkgs; [ wl-clipboard wl-clip-persist - wofi - nemo - feh + wofi # application launcher + nemo # file manager + feh # image viewer + networkmanager # network management + upower # power management + brightnessctl # screen/keyboard brightness control + wireplumber # media session manager + libgtop # system monitor library + bluez # Bluetooth support + bluez-tools # Bluetooth tools + blueman # Bluetooth manager + power-profiles-daemon # power profiles + grimblast # screenshot tool + wf-recorder # screen recording tool + btop # system monitor ]; + services.blueman.enable = config.hardware.bluetooth.enable; + programs.hyprland = { enable = true; xwayland.enable = true; diff --git a/common/desktop_environment/hyprland/home_manager/default.nix b/common/desktop_environment/hyprland/home_manager/default.nix index f22b944..4c2e83a 100644 --- a/common/desktop_environment/hyprland/home_manager/default.nix +++ b/common/desktop_environment/hyprland/home_manager/default.nix @@ -3,11 +3,10 @@ imports = [ ./theme.nix ./hyprland.nix - ./hyprpanel.nix + ./waybar.nix ./hyprpolkitagent.nix - # ./quickshell.nix # TODO replace hyprpanel with custom quickshell... ./wofi.nix - # ./swaync.nix # notifications, hyprpanel has notifications but I want to replace hyprpanel sometime so keeping this here as reference + ./swaync.nix ./swaylock.nix ]; } diff --git a/common/desktop_environment/hyprland/home_manager/hyprland.nix b/common/desktop_environment/hyprland/home_manager/hyprland.nix index 4e1e6d8..8560f4c 100644 --- a/common/desktop_environment/hyprland/home_manager/hyprland.nix +++ b/common/desktop_environment/hyprland/home_manager/hyprland.nix @@ -32,10 +32,10 @@ in # Default monitor configuration monitor = "monitor = , preferred, auto, 1"; - # Add window rules for hyprpanel stability windowrulev2 = [ - "stayfocused, class:^(hyprpanel)$" - "pin, class:^(hyprpanel)$" + "float, class:.*blueman-manager.*" + "size 700 500, class:.*blueman-manager.*" + "center, class:.*blueman-manager.*" ]; # Input configuration @@ -105,10 +105,15 @@ in # Switch workspaces with mainMod + [0-9] "$mainMod, 1, workspace, 1" + "$mainMod, n, workspace, 1" "$mainMod, 2, workspace, 2" + "$mainMod, m, workspace, 2" "$mainMod, 3, workspace, 3" + "$mainMod, comma, workspace, 3" "$mainMod, 4, workspace, 4" + "$mainMod, period, workspace, 4" "$mainMod, 5, workspace, 5" + "$mainMod, slash, workspace, 5" "$mainMod, 6, workspace, 6" "$mainMod, 7, workspace, 7" "$mainMod, 8, workspace, 8" @@ -120,8 +125,21 @@ in "$mainMod SHIFT, l, movewindow, r" "$mainMod SHIFT, k, movewindow, u" "$mainMod SHIFT, j, movewindow, d" - "$mainMod SHIFT, n, movetoworkspace, m+1" - "$mainMod SHIFT, p, movetoworkspace, m-1" + "$mainMod SHIFT, 1, movetoworkspacesilent, 1" + "$mainMod SHIFT, n, movetoworkspacesilent, 1" + "$mainMod SHIFT, 2, movetoworkspacesilent, 2" + "$mainMod SHIFT, m, movetoworkspacesilent, 2" + "$mainMod SHIFT, 3, movetoworkspacesilent, 3" + "$mainMod SHIFT, comma, movetoworkspacesilent, 3" + "$mainMod SHIFT, 4, movetoworkspacesilent, 4" + "$mainMod SHIFT, period, movetoworkspacesilent, 4" + "$mainMod SHIFT, 5, movetoworkspacesilent, 5" + "$mainMod SHIFT, slash, movetoworkspacesilent, 5" + "$mainMod SHIFT, 6, movetoworkspacesilent, 6" + "$mainMod SHIFT, 7, movetoworkspacesilent, 7" + "$mainMod SHIFT, 8, movetoworkspacesilent, 8" + "$mainMod SHIFT, 9, movetoworkspacesilent, 9" + "$mainMod SHIFT, 0, movetoworkspacesilent, 10" # Screenshots ", Print, exec, grimblast copy area" @@ -135,8 +153,8 @@ in binde = [ # Move between workspaces - "$mainMod, n, workspace, r+1" - "$mainMod, p, workspace, r-1" + # "$mainMod, n, workspace, r+1" + # "$mainMod, p, workspace, r-1" # Resize windows "$mainMod CTRL, h, resizeactive, -40 0" @@ -150,6 +168,7 @@ in "$mainMod, mouse:272, movewindow" "$mainMod, mouse:273, resizewindow" ]; + } cfg.extraOptions; }; } diff --git a/common/desktop_environment/hyprland/home_manager/hyprpanel.nix b/common/desktop_environment/hyprland/home_manager/hyprpanel.nix deleted file mode 100644 index 7f4b66d..0000000 --- a/common/desktop_environment/hyprland/home_manager/hyprpanel.nix +++ /dev/null @@ -1,159 +0,0 @@ -{ - pkgs, - lib, - ... -}: -{ - home.packages = with pkgs; [ - # aylurs-gtk-shell-git - wireplumber - libgtop - bluez - bluez-tools - networkmanager - dart-sass - wl-clipboard - upower - gvfs - gtksourceview3 - libchamplain_libsoup3 # libsoup3 - ## Used for Tracking GPU Usage in your Dashboard (NVidia only) - # python - # python-gpustat - ## To control screen/keyboard brightness - brightnessctl - ## Only if a pywal hook from wallpaper changes applied through settings is desired - # pywal - ## To check for pacman updates in the default script used in the updates module - # pacman-contrib - ## To switch between power profiles in the battery module - power-profiles-daemon - ## To take snapshots with the default snapshot shortcut in the dashboard - grimblast - ## To record screen through the dashboard record shortcut - wf-recorder - ## To enable the eyedropper color picker with the default snapshot shortcut in the dashboard - hyprpicker - ## To enable hyprland's very own blue light filter - hyprsunset - ## To click resource/stat bars in the dashboard and open btop - btop - ## To enable matugen based color theming - # matugen - ## To enable matugen based color theming and setting wallpapers - # swww - ]; - - # uncomment this to make it possible to use the normal config agent using - # > hyprpanel toggleWindow settings-dialog - # xdg.configFile.hyprpanel.target = lib.mkForce "hyprpanel/config.generated.json"; - - programs.hyprpanel = { - enable = true; - settings = { - bar.layouts = { - "DP-1" = { - left = [ - # "dashboard" - "workspaces" - "media" - "volume" - ]; - - middle = [ - "notifications" - "clock" - "cputemp" - "cpu" - "ram" - "storage" - ]; - - right = [ - "netstat" - "network" - "bluetooth" - # "battery" - # "updates" - "kbinput" - "power" - ]; - }; - "*" = { - left = [ - "workspaces" - ]; - middle = [ - "clock" - ]; - right = [ - "systray" - "cava" - ]; - }; - }; - bar.workspaces = { - # workspaces = 10; - show_icons = false; - show_numbered = false; - showWsIcons = true; - showApplicationIcons = false; - workspaceMask = true; - numbered_active_indicator = "highlight"; - workspaceIconMap = { - "1" = "一"; # "1" いち | ひとつ - "2" = "二"; # "2" に | ふたつ - "3" = "三"; # "3" さん | みっつ - "4" = "四"; # "4" し | よん - "5" = "五"; # "5" ご | いつつ - "6" = "六"; # "6" ろく | むっつ - "7" = "七"; # "7" しち | ななつ - "8" = "八"; # "8" はち | やっつ - "9" = "九"; # "9" きゅう | ここのつ - "10" = "十"; # "10" じゅう | とお - "11" = "十一"; # "11" じゅういち | じゅうひとつ - "12" = "十二"; # "12" じゅうに | じゅうふたつ - "13" = "十三"; # "13" じゅうさん | じゅうみっつ - "14" = "十四"; # "14" じゅうし | じゅうよん - "15" = "十五"; # "15" じゅうご | じゅういつつ - "16" = "十六"; # "16" じゅうろく | じゅうむっつ - "17" = "十七"; # "17" じゅうしち | じゅうななつ - "18" = "十八"; # "18" じゅうはち | じゅうやっつ - "19" = "十九"; # "19" じゅうきゅう | じゅうここのつ - "20" = "二十"; # "20" にじゅう | にじっつ - }; - }; - notifications.ignore = [ "spotify" ]; - customModules = { - cava = { - showActiveOnly = true; - showIcon = false; - icon = ""; - }; - }; - theme = { - matugen = false; - name = "tokyo-night-vivid"; - - font = { - name = "JetBrainsMonoNL Nerd Font Regular"; - size = "12px"; - }; - bar = { - transparent = true; - floating = true; - outer_spacing = "0px"; - margin_bottom = "0px"; - margin_top = "0px"; - margin_sides = "0px"; - }; - - }; - wallpaper = { - enable = false; - image = ""; - }; - - }; - }; -} diff --git a/common/desktop_environment/hyprland/home_manager/swaync.nix b/common/desktop_environment/hyprland/home_manager/swaync.nix index 9848b4c..e3e7168 100644 --- a/common/desktop_environment/hyprland/home_manager/swaync.nix +++ b/common/desktop_environment/hyprland/home_manager/swaync.nix @@ -4,5 +4,263 @@ { services.swaync = { enable = true; + settings = { + ignore = [ + "com.spotify.Client" + ]; + + positionX = "center"; + positionY = "top"; + layer = "overlay"; + control-center-layer = "top"; + layer-shell = true; + cssPriority = "application"; + + control-center-margin-top = 0; + control-center-margin-bottom = 0; + control-center-margin-right = 0; + control-center-margin-left = 0; + + notification-2fa-action = true; + notification-inline-replies = false; + notification-icon-size = 64; + notification-body-image-height = 100; + notification-body-image-width = 200; + + timeout = 10; + timeout-low = 5; + timeout-critical = 0; + + control-center-width = 500; + control-center-height = 600; + notification-window-width = 500; + + keyboard-shortcuts = true; + image-visibility = "when-available"; + transition-time = 200; + hide-on-clear = false; + hide-on-action = true; + script-fail-notify = true; + + widgets = [ + "inhibitors" + "title" + "dnd" + "volume" + "backlight" + "mpris" + "buttons-grid#quick" + "notifications" + ]; + + # Widget configurations + widget-config = { + inhibitors = { + text = "Inhibitors"; + button-text = "Clear All"; + clear-all-button = true; + }; + title = { + text = "Notifications"; + clear-all-button = true; + button-text = "Clear All"; + }; + dnd.text = "Do Not Disturb"; + mpris = { + image-size = 96; + image-radius = 12; + }; + volume = { + label = "󰕾"; + show-per-app = true; + }; + backlight = { + label = "󰃟"; + device = "intel_backlight"; + }; + "buttons-grid#quick" = { + columns = 4; # adjust: 3/4/5 + icon-size = 20; # tweak to taste + actions = [ + # Power + { + label = "󰐥"; + tooltip = "Shutdown"; + command = "systemctl poweroff"; + } + { + label = "󰜉"; + tooltip = "Reboot"; + command = "systemctl reboot"; + } + { + label = "󰍃"; + tooltip = "Logout"; + command = "hyprctl dispatch exit"; + } + { + label = "󰤄"; + tooltip = "Suspend"; + command = "systemctl suspend"; + } + + # Network (requires NetworkManager/nmcli) + { + label = "󰖪"; + tooltip = "Toggle Wi‑Fi"; + command = "nmcli radio wifi toggle"; + } + { + label = "󰖩"; + tooltip = "Wi‑Fi Settings"; + command = "nm-connection-editor"; + } + + # Bluetooth (requires bluez/bluetoothctl, blueman optional) + { + label = "󰂲"; + tooltip = "Toggle Bluetooth"; + command = "bluetoothctl power toggle"; + } + { + label = "󰂯"; + tooltip = "Bluetooth Settings"; + command = "blueman-manager"; + } + ]; + }; + }; + }; + + # Custom CSS for the control center + style = '' + .control-center { + background: #1a1b26; + border: 2px solid #7dcae4; + border-radius: 12px; + } + + .control-center-list { + background: transparent; + } + + .control-center .notification-row:focus, + .control-center .notification-row:hover { + opacity: 1; + background: #24283b; + } + + .notification { + border-radius: 8px; + margin: 6px 12px; + box-shadow: 0 0 0 1px rgba(125, 196, 228, 0.3), 0 1px 3px 1px rgba(0, 0, 0, 0.7), 0 2px 6px 2px rgba(0, 0, 0, 0.3); + padding: 0; + } + + /* Widget styling */ + .widget-title { + margin: 8px; + font-size: 1.5rem; + color: #c0caf5; + } + + .widget-dnd { + margin: 8px; + font-size: 1.1rem; + color: #c0caf5; + } + + .widget-dnd > switch { + font-size: initial; + border-radius: 8px; + background: #414868; + border: 1px solid #7dcae4; + } + + .widget-dnd > switch:checked { + background: #7dcae4; + } + + .widget-mpris { + color: #c0caf5; + background: #24283b; + padding: 8px; + margin: 8px; + border-radius: 8px; + } + + .widget-mpris-player { + padding: 8px; + margin: 8px; + } + + .widget-mpris-title { + font-weight: bold; + font-size: 1.25rem; + } + + .widget-mpris-subtitle { + font-size: 1.1rem; + color: #9ece6a; + } + + .widget-volume { + background: #24283b; + padding: 8px; + margin: 8px; + border-radius: 8px; + color: #c0caf5; + } + + .widget-backlight { + background: #24283b; + padding: 8px; + margin: 8px; + border-radius: 8px; + color: #c0caf5; + } + + .widget-menubar { + background: #24283b; + padding: 8px; + margin: 8px; + border-radius: 8px; + color: #c0caf5; + } + + .widget-menubar .menu-item button { + background: #1f2335; + color: #c0caf5; + border-radius: 8px; + padding: 6px 10px; + margin: 4px; + border: 1px solid #2e3440; + font-family: "JetBrainsMonoNL Nerd Font"; + } + + .widget-menubar .menu-item button:hover { + background: #414868; + border-color: #7dcae4; + } + + .topbar-buttons button { + border: none; + background: transparent; + color: #c0caf5; + font-size: 1.1rem; + border-radius: 8px; + margin: 0 4px; + padding: 8px; + } + + .topbar-buttons button:hover { + background: #414868; + } + + .topbar-buttons button:active { + background: #7dcae4; + color: #1a1b26; + } + ''; }; } diff --git a/common/desktop_environment/hyprland/home_manager/waybar.nix b/common/desktop_environment/hyprland/home_manager/waybar.nix new file mode 100644 index 0000000..f80e490 --- /dev/null +++ b/common/desktop_environment/hyprland/home_manager/waybar.nix @@ -0,0 +1,264 @@ +{ + ... +}: +{ + programs.waybar = { + enable = true; + systemd.enable = true; + settings = { + mainBar = { + layer = "top"; + position = "top"; + height = 30; + spacing = 6; + margin-top = 0; + margin-bottom = 0; + margin-left = 10; + margin-right = 10; + + modules-left = [ + "hyprland/workspaces" + ]; + + modules-center = [ + "clock" + "temperature" + "custom/notifications" + "cpu" + "memory" + "disk" + ]; + + modules-right = [ + "pulseaudio" + "network" + "bluetooth" + "hyprland/language" + "custom/power" + ]; + + # Workspaces configuration + "hyprland/workspaces" = { + format = "{icon}"; + format-icons = { + "1" = "一"; + "2" = "二"; + "3" = "三"; + "4" = "四"; + "5" = "五"; + "6" = "六"; + "7" = "七"; + "8" = "八"; + "9" = "九"; + "10" = "十"; + "11" = "十一"; + "12" = "十二"; + "13" = "十三"; + "14" = "十四"; + "15" = "十五"; + "16" = "十六"; + "17" = "十七"; + "18" = "十八"; + "19" = "十九"; + "20" = "二十"; + }; + show-special = false; + }; + + pulseaudio = { + format = "{icon} {volume}%"; + format-bluetooth = "󰂰 {volume}%"; + format-bluetooth-muted = "󰂲 "; + format-muted = "󰖁 "; + format-source = "󰍬 {volume}%"; + format-source-muted = "󰍭 "; + format-icons = { + headphone = "󰋋"; + hands-free = "󰂑"; + headset = "󰂑"; + phone = "󰏲"; + portable = "󰦧"; + car = "󰄋"; + default = [ + "󰕿" + "󰖀" + "󰕾" + ]; + }; + }; + + "custom/notifications" = { + format = "{icon} {}"; + format-icons = { + notification = ""; + none = ""; + dnd-notification = "󰂛"; + dnd-none = "󰂛"; + inhibited-notification = ""; + inhibited-none = ""; + dnd-inhibited-notification = "󰂛"; + dnd-inhibited-none = "󰂛"; + }; + return-type = "json"; + exec-if = "which swaync-client"; + exec = "swaync-client -swb"; + on-click = "swaync-client -t -sw"; + on-click-right = "swaync-client -d -sw"; + escape = true; + tooltip = false; + }; + + # Clock + clock.format = "{:%Y-%m-%d} {:%H:%M}"; + + temperature = { + thermal-zone = 2; + hwmon-path = "/sys/class/hwmon/hwmon2/temp1_input"; + critical-threshold = 80; + format-critical = "󰔏 {temperatureC}°C"; + format = "󰔏 {temperatureC}°C"; + }; + + cpu = { + format = "󰻠 {usage}%"; + tooltip = false; + on-click = "btop"; + }; + + memory = { + format = "󰍛 {}%"; + on-click = "btop"; + }; + + disk = { + interval = 30; + format = "󰋊 {percentage_used}%"; + path = "/"; + on-click = "btop"; + }; + + network = { + format-wifi = "󰤨 {essid} ({signalStrength}%)"; + format-ethernet = "󰈀 {ipaddr}/{cidr}"; + tooltip-format = "{ifname} via {gwaddr} "; + format-linked = "󰈀 {ifname} (No IP)"; + format-disconnected = "󰖪 Disconnected"; + format-alt = "{ifname}: {ipaddr}/{cidr}"; + }; + + bluetooth = { + format = "󰂯 {status}"; + format-connected = "󰂱 {device_alias}"; + format-connected-battery = "󰂱 {device_alias} {device_battery_percentage}%"; + tooltip-format = "{controller_alias}\t{controller_address}\n\n{num_connections} connected"; + tooltip-format-connected = "{controller_alias}\t{controller_address}\n\n{num_connections} connected\n\n{device_enumerate}"; + tooltip-format-enumerate-connected = "{device_alias}\t{device_address}"; + tooltip-format-enumerate-connected-battery = "{device_alias}\t{device_address}\t{device_battery_percentage}%"; + on-click = "blueman-manager"; + }; + + # Keyboard input (language) + "hyprland/language" = { + format = "{}"; + format-en = "EN"; + format-ja = "JP"; + }; + + "custom/power" = { + format = "⏻"; + tooltip = false; + on-click = "wlogout"; + }; + }; + }; + + style = '' + * { + font-family: "JetBrainsMonoNL Nerd Font"; + font-size: 12px; + border: none; + border-radius: 0; + min-height: 0; + } + + window#waybar { + background: transparent; + border-radius: 10px; + margin: 0px; + } + + .modules-left, + .modules-center, + .modules-right { + background: rgba(26, 27, 38, 0.8); + border-radius: 10px; + margin: 4px; + padding: 0 10px; + } + + #workspaces { + padding: 0 5px; + } + + #workspaces button { + padding: 0 8px; + background: transparent; + color: #c0caf5; + border-radius: 5px; + margin: 2px; + } + + #workspaces button:hover { + background: rgba(125, 196, 228, 0.2); + color: #7dcae4; + } + + #workspaces button.active { + background: #7dcae4; + color: #1a1b26; + } + + #pulseaudio, + #custom-notifications, + #clock, + #temperature, + #cpu, + #memory, + #disk, + #network, + #bluetooth, + #language, + #custom-power { + padding: 0 8px; + color: #c0caf5; + margin: 2px; + } + + #temperature.critical { + color: #f7768e; + } + + #custom-power { + color: #f7768e; + padding: 0 10px; + } + + #custom-power:hover { + background: rgba(247, 118, 142, 0.2); + border-radius: 5px; + } + + #network.disconnected { + color: #f7768e; + } + + #bluetooth.disabled { + color: #565f89; + } + + #pulseaudio.muted { + color: #565f89; + } + ''; + }; +} diff --git a/common/secrets/secrets/secrets.nix b/common/secrets/secrets/secrets.nix index c551bb5..b9c59d7 100644 --- a/common/secrets/secrets/secrets.nix +++ b/common/secrets/secrets/secrets.nix @@ -49,7 +49,7 @@ let trustedKeys = authorityKey ++ gpdPocket3 ++ lio ++ joe ++ oren ++ h001 ++ h002 ++ h003; o001 = [ - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFrwvahx1x4rue28QHCzyADQndOeTESIv80f7d00NXWT" # root + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFrwvahx1x4rue28QHCzyADQndOeTESIv80f7d00NXWT root@o001" ]; in { diff --git a/hosts/lio/containers.nix b/hosts/lio/containers.nix index 5c3961d..294c8e0 100644 --- a/hosts/lio/containers.nix +++ b/hosts/lio/containers.nix @@ -13,7 +13,6 @@ in options = { }; imports = [ - common.nixosModules.containers.librechat common.nixosModules.containers.obsidian_sync ]; diff --git a/hosts/lio/flake.lock b/hosts/lio/flake.lock index 51aa01b..b5a5b8e 100644 --- a/hosts/lio/flake.lock +++ b/hosts/lio/flake.lock @@ -29,22 +29,17 @@ "inputs": { "home-manager": "home-manager", "nix-flatpak": "nix-flatpak", - "nixpkgs": "nixpkgs_2", "ragenix": "ragenix" }, "locked": { - "lastModified": 1755840659, - "narHash": "sha256-h/qwTgidh4lPLj018fRllg1VtoRXVEpC+L6RFomWesw=", - "ref": "refs/heads/master", - "rev": "c91d9dc23c4abf3567b653f383578621a77be0ab", - "revCount": 614, - "type": "git", - "url": "https://git.joshuabell.xyz/ringofstorms/dotfiles" + "path": "../../common", + "type": "path" }, "original": { - "type": "git", - "url": "https://git.joshuabell.xyz/ringofstorms/dotfiles" - } + "path": "../../common", + "type": "path" + }, + "parent": [] }, "crane": { "locked": { @@ -194,22 +189,6 @@ } }, "nixpkgs_2": { - "locked": { - "lastModified": 1753694789, - "narHash": "sha256-cKgvtz6fKuK1Xr5LQW/zOUiAC0oSQoA9nOISB0pJZqM=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "dc9637876d0dcc8c9e5e22986b857632effeb727", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_3": { "locked": { "lastModified": 1741379970, "narHash": "sha256-Wh7esNh7G24qYleLvgOSY/7HlDUzWaL/n4qzlBePpiw=", @@ -225,7 +204,7 @@ "type": "github" } }, - "nixpkgs_4": { + "nixpkgs_3": { "locked": { "lastModified": 1755471983, "narHash": "sha256-axUoWcm4cNQ36jOlnkD9D40LTfSQgk8ExfHSRm3rTtg=", @@ -241,7 +220,7 @@ "type": "github" } }, - "nixpkgs_5": { + "nixpkgs_4": { "locked": { "lastModified": 1755648324, "narHash": "sha256-+2TxwJEXWXGC7JBsRGUHtmQ66lRGPcDI2kFKTTU5e2s=", @@ -256,7 +235,7 @@ "type": "github" } }, - "nixpkgs_6": { + "nixpkgs_5": { "locked": { "lastModified": 1755186698, "narHash": "sha256-wNO3+Ks2jZJ4nTHMuks+cxAiVBGNuEBXsT29Bz6HASo=", @@ -1178,7 +1157,7 @@ "agenix": "agenix", "crane": "crane", "flake-utils": "flake-utils", - "nixpkgs": "nixpkgs_3", + "nixpkgs": "nixpkgs_2", "rust-overlay": "rust-overlay" }, "locked": { @@ -1198,7 +1177,7 @@ "root": { "inputs": { "common": "common", - "nixpkgs": "nixpkgs_4", + "nixpkgs": "nixpkgs_3", "nixpkgs-unstable": "nixpkgs-unstable", "ros_neovim": "ros_neovim", "zaphkiel": "zaphkiel" @@ -1206,7 +1185,7 @@ }, "ros_neovim": { "inputs": { - "nixpkgs": "nixpkgs_5", + "nixpkgs": "nixpkgs_4", "nvim_plugin-Almo7aya/openingh.nvim": "nvim_plugin-Almo7aya/openingh.nvim", "nvim_plugin-CopilotC-Nvim/CopilotChat.nvim": "nvim_plugin-CopilotC-Nvim/CopilotChat.nvim", "nvim_plugin-JoosepAlviste/nvim-ts-context-commentstring": "nvim_plugin-JoosepAlviste/nvim-ts-context-commentstring", @@ -1368,7 +1347,7 @@ }, "zaphkiel": { "inputs": { - "nixpkgs": "nixpkgs_6", + "nixpkgs": "nixpkgs_5", "quickshell": "quickshell", "systems": "systems_3" }, diff --git a/hosts/lio/flake.nix b/hosts/lio/flake.nix index 16b1bc2..4e0bfd5 100644 --- a/hosts/lio/flake.nix +++ b/hosts/lio/flake.nix @@ -4,8 +4,8 @@ nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable"; # Use relative to get current version for testing - # common.url = "path:../../common"; - common.url = "git+https://git.joshuabell.xyz/ringofstorms/dotfiles"; + common.url = "path:../../common"; + # common.url = "git+https://git.joshuabell.xyz/ringofstorms/dotfiles"; ros_neovim.url = "git+https://git.joshuabell.xyz/ringofstorms/nvim"; @@ -90,13 +90,26 @@ }; desktopEnvironment.hyprland = { enable = true; - extraOptions = { - # hyprctl monitors all - monitor = [ - "desc:ASUSTek COMPUTER INC ASUS PG43U 0x01010101,3840x2160@97.98,0x0,1,transform,0" - "desc:Samsung Electric Company C34J79x HTRM900776,3440x1440@99.98,-1440x-640,1,transform,1" - ]; - }; + extraOptions = + let + main = "desc:ASUSTek COMPUTER INC ASUS PG43U 0x01010101"; + secondary = "desc:Samsung Electric Company C34J79x HTRM900776"; + in + { + # hyprctl monitors all + monitor = [ + "${main},3840x2160@97.98,0x0,1,transform,0" + "${secondary},3440x1440@99.98,-1440x-640,1,transform,1" + ]; + # Pin workspaces 1-6 to main monitor and rest on other monitor + workspace = + let + inherit (builtins) map toString; + inherit (lib) range; + mkWs = monitor: i: "${toString i},monitor:${monitor}"; + in + (map (mkWs main) (range 1 6)) ++ (map (mkWs secondary) (range 7 10)); + }; }; programs = { qFlipper.enable = true; diff --git a/hosts/oracle/o001/nginx.nix b/hosts/oracle/o001/nginx.nix index c0b171a..9db6d81 100644 --- a/hosts/oracle/o001/nginx.nix +++ b/hosts/oracle/o001/nginx.nix @@ -69,6 +69,35 @@ enableACME = true; forceSSL = true; locations = { + "~ ^/ttyd-t(.*)$" = { + proxyPass = "http://100.64.0.8:9999"; + extraConfig = '' + rewrite ^/ttyd-tempus(.*) /$1 break; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-Port $server_port; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_read_timeout 1d; # dont kill connection after 60s of inactivity + ''; + }; + # "~ ^/tunnel_tempus/(?[0-9]+)(.*)$" = { + # extraConfig = '' + # set $target_port $port; + # rewrite ^/tunnel_tempus/(?[0-9]+)(.*)$ /$2 break; + # proxy_pass http://100.64.0.8:$target_port; + # proxy_http_version 1.1; + # proxy_set_header Upgrade $http_upgrade; + # proxy_set_header Connection "upgrade"; + # proxy_set_header Host $host; + # proxy_set_header X-Forwarded-Proto $scheme; + # proxy_set_header X-Forwarded-Port $server_port; + # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + # proxy_read_timeout 1d; # dont kill connection after 60s of inactivity + # ''; + # }; "/wasabi" = { proxyPass = "http://192.168.100.11/"; extraConfig = ''