diff --git a/maskiner/core/configuration.nix b/maskiner/core/configuration.nix index 62ae60d..c9775f0 100644 --- a/maskiner/core/configuration.nix +++ b/maskiner/core/configuration.nix @@ -200,8 +200,8 @@ in ]; waybar = { enable = true; - profile = "desktop"; - theme = theme; + configPath = ./../../moduler/programs/waybar/waybar.jsonc; + stylePath = ./../../moduler/programs/waybar/waybar-${theme}.css; }; gtk = { enable = true; diff --git a/maskiner/gammal/configuration.nix b/maskiner/gammal/configuration.nix index 7ec0f19..db965cf 100644 --- a/maskiner/gammal/configuration.nix +++ b/maskiner/gammal/configuration.nix @@ -61,8 +61,8 @@ in ]; waybar = { enable = true; - profile = "laptop"; - theme = theme; + configPath = ./../../moduler/programs/waybar/waybar-laptop.jsonc; + stylePath = ./../../moduler/programs/waybar/waybar-${theme}.css; }; gtk = { enable = true; diff --git a/maskiner/laptop/configuration.nix b/maskiner/laptop/configuration.nix index 7575c80..6877f3e 100644 --- a/maskiner/laptop/configuration.nix +++ b/maskiner/laptop/configuration.nix @@ -3,11 +3,14 @@ # and in the NixOS manual (accessible by running ‘nixos-help’). { + inputs, + config, pkgs, myhostname, ... }: let + theme = "mocha"; modulesDirectory = ../../moduler; in { @@ -15,15 +18,33 @@ in ./hardware-configuration.nix (modulesDirectory + /users.nix) + (modulesDirectory + /git.nix) (modulesDirectory + /network.nix) + (modulesDirectory + /programs.nix) (modulesDirectory + /system.nix) + (modulesDirectory + /dev.nix) + (modulesDirectory + /sound.nix) (modulesDirectory + /services/base) (modulesDirectory + /services/webcam-rtsp) + + (modulesDirectory + /programs/hyprland) + (modulesDirectory + /programs/kubernetes-tools.nix) + (modulesDirectory + /programs/confetti) + (modulesDirectory + /programs/nixvim) ]; + kubernetes-tools.enable = true; networking.networkmanager = { enable = true; + plugins = with pkgs; [ + networkmanager-openvpn + ]; + }; + + stylix = { + enable = true; + base16Scheme = "${pkgs.base16-schemes}/share/themes/catppuccin-${theme}.yaml"; }; webcam-rtsp = { @@ -34,12 +55,78 @@ in videoSize = "1280x720"; }; + nixvim = { + enable = true; + theme = theme; + }; + + hyprland = { + enable = true; + theme = theme; + }; + + home-manager.extraSpecialArgs = { inherit inputs pkgs; }; + home-manager.users.fw = { + imports = [ + ./../../moduler/home.nix + ./../../moduler/programs/waybar + inputs.catppuccin.homeModules.catppuccin + ]; + waybar = { + enable = true; + configPath = ./../../moduler/programs/waybar/waybar-laptop.jsonc; + stylePath = ./../../moduler/programs/waybar/waybar-${theme}.css; + }; + gtk = { + enable = true; + iconTheme = { + name = "oomox-gruvbox-dark"; + package = pkgs.gruvbox-dark-icons-gtk; + }; + }; + kitty = { + enable = true; + theme = theme; + }; + fish = { + theme = theme; + }; + k9s = { + enable = true; + theme = theme; + }; + oh-my-posh = { + enable = true; + theme = theme; + }; + catppuccin = { + librewolf = { + enable = true; + flavor = theme; + accent = "peach"; + }; + }; + programs.ranger.enable = true; + stylix.targets = { + lazygit.enable = false; + fish.enable = false; + kitty.enable = false; + waybar.enable = false; + tmux.enable = false; + k9s.enable = false; + }; + }; + security.sudo.wheelNeedsPassword = false; users.users.root.openssh.authorizedKeys.keys = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII60tdNsG0z9q2jHmoTKvkeLQE6OF0bmTsDX1bpqpoG7 fw@jobb" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFpJBGPIfPB1BwSG7aoKqwfccyZSaU7J3xpJ8behMp9N fw@core" ]; + services.upower = { + enable = true; + }; + boot.kernelPackages = pkgs.linuxPackages_latest; networking.hostName = myhostname; diff --git a/maskiner/styrelsen/configuration.nix b/maskiner/styrelsen/configuration.nix index 2e6096d..a53945e 100644 --- a/maskiner/styrelsen/configuration.nix +++ b/maskiner/styrelsen/configuration.nix @@ -63,8 +63,8 @@ in ]; waybar = { enable = true; - profile = "laptop"; - theme = theme; + configPath = ./../../moduler/programs/waybar/waybar-laptop.jsonc; + stylePath = ./../../moduler/programs/waybar/waybar-${theme}.css; }; gtk = { enable = true; diff --git a/moduler/programs/waybar/default.nix b/moduler/programs/waybar/default.nix index 389225c..397ccb5 100644 --- a/moduler/programs/waybar/default.nix +++ b/moduler/programs/waybar/default.nix @@ -7,339 +7,22 @@ }: let - cfg = config.waybar; - isLaptop = cfg.profile == "laptop"; - palette = - if cfg.theme == "mocha" then - { - base = "#1E1E2E"; - mantle = "#181825"; - crust = "#11111B"; - text = "#CDD6F4"; - subtext0 = "#A6ADC8"; - green = "#A6E3A1"; - yellow = "#F9E2AF"; - sky = "#89DCEB"; - rose = "#F38BA8"; - blue = "#89B4FA"; - surface2 = "#585B70"; - peach = "#FAB387"; - } - else - { - base = "#EFF1F5"; - mantle = "#E6E9EF"; - crust = "#DCE0E8"; - text = "#4C4F69"; - subtext0 = "#6C6F85"; - green = "#40A02B"; - yellow = "#DF8E1D"; - sky = "#04A5E5"; - rose = "#D20F39"; - blue = "#1E66F5"; - surface2 = "#ACB0BE"; - peach = "#FE640B"; - }; - - waybarConfig = { - layer = "top"; - position = "top"; - margin-top = 10; - margin-left = 14; - margin-right = 14; - spacing = 12; - modules-left = [ "hyprland/workspaces" ]; - modules-right = - if isLaptop then - [ - "mpris" - "bluetooth" - "pulseaudio" - "upower" - "custom/tailscale" - "custom/netbird" - "network" - "clock" - ] - else - [ - "mpris" - "pulseaudio" - "bluetooth" - "custom/tailscale" - "custom/netbird" - "network" - "clock" - ]; - - mpris = { - format = "{player_icon} {title} - {artist}"; - format-paused = " {player_icon} {title}"; - format-stopped = ""; - player-icons = { - default = ""; - Feishin = ""; - }; - max-length = if isLaptop then 45 else 50; - interval = 1; - tooltip = true; - tooltip-format = "{player} - {status}\n{artist}\n{title}\n{album}"; - on-click = if isLaptop then "playerctl -p Feishin play-pause" else "playerctl play-pause"; - } - // lib.optionalAttrs isLaptop { - player = "Feishin"; - on-scroll-up = "playerctl -p Feishin next"; - on-scroll-down = "playerctl -p Feishin previous"; - }; - - 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 = "pgrep .blueman-manage && pkill .blueman-manage || blueman-manager &"; - }; - - network = { - interface = - if isLaptop then - "wlp0s20f3" - else - [ - "enp195s0" - "enp196s0" - ]; - format = "{ifname}"; - format-wifi = " {essid} ({signalStrength}%)"; - format-ethernet = if isLaptop then "{ifname} " else " {ifname}"; - format-disconnected = "no signal"; - tooltip-format = "{ifname}"; - tooltip-format-wifi = "{essid} ({signalStrength}%) "; - tooltip-format-ethernet = "{ifname} "; - tooltip-format-disconnected = "Disconnected"; - max-length = 50; - }; - - upower = { - icon-size = 20; - hide-if-empty = true; - tooltip = true; - tooltip-spacing = 20; - }; - - pulseaudio = { - format = "{icon} {volume}%"; - format-bluetooth = "{icon}  {volume}%"; - format-muted = ""; - format-icons = { - headphones = ""; - handsfree = ""; - headset = ""; - phone = ""; - portable = ""; - car = ""; - default = [ - "" - "" - ]; - }; - on-click = "pgrep pavucontrol && pkill pavucontrol || pavucontrol &"; - }; - - clock = { - format = "{:%c}"; - locale = "sv_SE.UTF-8"; - tooltip = true; - tooltip-format = "{:%A, %d %B %Y}\n %H:%M:%S"; - interval = 1; - }; - - "custom/tailscale" = { - exec = "/home/fw/.config/waybar/scripts/tailscale.sh --status"; - on-click = "/home/fw/.config/waybar/scripts/tailscale.sh --toggle"; - exec-on-event = true; - format = "TS {icon} {text}"; - format-icons = { - connected = ""; - stopped = ""; - connecting = ""; - disconnecting = ""; - }; - tooltip = true; - return-type = "json"; - interval = 5; - }; - - "custom/netbird" = { - exec = "/home/fw/.config/waybar/scripts/netbird.sh --status"; - on-click = "/home/fw/.config/waybar/scripts/netbird.sh --toggle"; - exec-on-event = true; - format = "NB {icon} {text}"; - format-icons = { - connected = ""; - stopped = ""; - connecting = ""; - disconnecting = ""; - }; - tooltip = true; - return-type = "json"; - interval = 5; - }; - }; - - waybarStyle = '' - @define-color base ${palette.base}; - @define-color mantle ${palette.mantle}; - @define-color crust ${palette.crust}; - @define-color text ${palette.text}; - @define-color subtext0 ${palette.subtext0}; - @define-color green ${palette.green}; - @define-color yellow ${palette.yellow}; - @define-color sky ${palette.sky}; - @define-color rose ${palette.rose}; - @define-color blue ${palette.blue}; - @define-color surface2 ${palette.surface2}; - @define-color peach ${palette.peach}; - - * { - font-family: "FiraCode Nerd Font", "Font Awesome 7 Free"; - font-size: 15px; - } - - .connecting { - animation: pulse 0.8s ease-in-out infinite; - } - - @keyframes pulse { - 0% { opacity: 1; } - 50% { opacity: 0.5; } - 100% { opacity: 1; } - } - - window#waybar { - background: transparent; - box-shadow: 0 6px 18px rgba(0, 0, 0, 0.35); - transition: background-color .35s ease, color .35s ease; - } - - window#waybar.hidden { opacity: 0.2; } - window#waybar.termite { background: @base; } - window#waybar.chromium { background: @base; border: none; } - - #workspaces, - #clock, - #mpris, - #pulseaudio, - #bluetooth, - #upower, - #network, - #custom-tailscale, - #custom-netbird { - background: @base; - border: none; - border-radius: 5px; - padding: 3px 8px; - } - - .modules-left > widget, - .modules-right > widget { - margin: 0 15px; - } - - .modules-left > widget:first-child { margin-left: 0; } - .modules-right > widget:last-child { margin-right: 0; } - - button { - border: none; - border-radius: 8px; - background: transparent; - color: @text; - transition: background-color .2s ease, box-shadow .2s ease; - box-shadow: inset 0 -3px transparent; - } - - button:hover { - background: rgba(255, 255, 255, 0.08); - box-shadow: inset 0 -3px @peach; - } - - button:active { - padding-top: 1px; - padding-bottom: 1px; - box-shadow: inset 0 -2px @peach; - color: @base; - } - - #workspaces { background: @base; } - - #workspaces button { - padding: 2px 8px; - margin: 0 2px; - border-radius: 8px; - transition: background-color .2s ease, box-shadow .2s ease; - } - - #workspaces button:hover { background: rgba(255, 255, 255, 0.08); } - - #workspaces button.active, - #workspaces button.focused { - background: @peach; - color: @base; - box-shadow: inset 0 -3px @peach; - } - - #workspaces button.urgent { - background: @rose; - color: @base; - box-shadow: inset 0 -3px rgba(0, 0, 0, 0.2); - } - - #clock, - #mpris, - #pulseaudio, - #bluetooth, - #upower, - #custom-tailscale, - #custom-netbird, - #network { - background: @peach; - color: @base; - font-weight: 600; - letter-spacing: 0.2px; - } - - @keyframes blink { - to { - background-color: @peach; - color: @base; - } - } - ''; in with lib; { options = { waybar = { enable = mkEnableOption "enables waybar"; - profile = lib.mkOption { - type = lib.types.enum [ - "desktop" - "laptop" - ]; - default = "desktop"; - description = "Layout profile for modules and device-specific settings"; + configPath = lib.mkOption { + type = lib.types.path; + default = ./waybar.jsonc; + description = "The path to the waybar config"; }; - theme = lib.mkOption { - type = lib.types.enum [ - "latte" - "mocha" - ]; - default = "latte"; - description = "Color theme used for Waybar style generation"; + stylePath = lib.mkOption { + type = lib.types.path; + default = ./waybar-latte.css; + description = "The path to the waybar config"; }; }; }; @@ -352,8 +35,8 @@ with lib; }; }; }; - xdg.configFile."waybar/config.jsonc".text = builtins.toJSON waybarConfig; - xdg.configFile."waybar/style.css".text = waybarStyle; + xdg.configFile."waybar/config.jsonc".source = config.waybar.configPath; + xdg.configFile."waybar/style.css".source = config.waybar.stylePath; xdg.configFile."waybar/scripts/tailscale.sh" = { text = '' #!${pkgs.bash}/bin/bash diff --git a/moduler/programs/waybar/waybar-laptop.jsonc b/moduler/programs/waybar/waybar-laptop.jsonc new file mode 100644 index 0000000..f47b3f9 --- /dev/null +++ b/moduler/programs/waybar/waybar-laptop.jsonc @@ -0,0 +1,122 @@ +{ + "layer": "top", + "position": "top", + "margin-top": 10, + "margin-left": 14, + "margin-right": 14, + "spacing": 12, + "modules-left": [ + "hyprland/workspaces" + ], + "modules-right": [ + "mpris", + "bluetooth", + "pulseaudio", + "upower", + "custom/tailscale", + "custom/netbird", + "network", + "clock" + ], + "mpris": { + "player": "Feishin", + "format": "{player_icon} {title} — {artist}", + "format-paused": " {player_icon} {title}", + "format-stopped": "", + "player-icons": { + "default": "", + "Feishin": "" + }, + "max-length": 45, + "interval": 1, + "tooltip": true, + "tooltip-format": "{player} — {status}\n{artist}\n{title}\n{album}", + "on-click": "playerctl -p Feishin play-pause", + "on-scroll-up": "playerctl -p Feishin next", + "on-scroll-down": "playerctl -p Feishin previous" + }, + "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": "pgrep .blueman-manage && pkill .blueman-manage || blueman-manager &" + }, + "network": { + "interface": "wlp0s20f3", + "format": "{ifname}", + "format-wifi": " {essid} ({signalStrength}%)", + "format-ethernet": "{ifname} ", + "format-disconnected": "no signal", //An empty format will hide the module. + "tooltip-format": "{ifname}", + "tooltip-format-wifi": "{essid} ({signalStrength}%) ", + "tooltip-format-ethernet": "{ifname} ", + "tooltip-format-disconnected": "Disconnected", + "max-length": 50 + }, + "upower": { + "icon-size": 20, + "hide-if-empty": true, + "tooltip": true, + "tooltip-spacing": 20 + }, + "pulseaudio": { + //"scroll-step": 1, + "format": "{icon} {volume}%", + "format-bluetooth": "{icon}  {volume}%", + "format-muted": "", + "format-icons": { + "headphones": "", + "handsfree": "", + "headset": "", + "phone": "", + "portable": "", + "car": "", + "default": [ + "", + "" + ] + }, + "on-click": "pgrep pavucontrol && pkill pavucontrol || pavucontrol &" + }, + "clock": { + "format": "{:%c}", + "locale": "sv_SE.UTF-8", + "tooltip": true, + "tooltip-format": "{:%A, %d %B %Y}\n %H:%M:%S", + "interval": 1 + }, + "custom/tailscale": { + "exec": "/home/fw/.config/waybar/scripts/tailscale.sh --status", + "on-click": "/home/fw/.config/waybar/scripts/tailscale.sh --toggle", + "exec-on-event": true, + "format": "{icon} {text}", + "format-icons": { + "connected": "", + "stopped": "", + "connecting": "", + "disconnecting": "" + }, + "tooltip": true, + "return-type": "json", + "interval": 5 + }, + "custom/netbird": { + "exec": "/home/fw/.config/waybar/scripts/netbird.sh --status", + "on-click": "/home/fw/.config/waybar/scripts/netbird.sh --toggle", + "exec-on-event": true, + "format": "{icon} {text}", + "format-icons": { + "connected": "", + "stopped": "", + "connecting": "", + "disconnecting": "" + }, + "tooltip": true, + "return-type": "json", + "interval": 5 + } +} diff --git a/moduler/programs/waybar/waybar-latte.css b/moduler/programs/waybar/waybar-latte.css new file mode 100644 index 0000000..8c11c19 --- /dev/null +++ b/moduler/programs/waybar/waybar-latte.css @@ -0,0 +1,153 @@ +/* -------- Catppuccin Latte Palette -------- */ +@define-color base #EFF1F5; +@define-color mantle #E6E9EF; +@define-color crust #DCE0E8; +@define-color text #4C4F69; +@define-color subtext0 #6C6F85; + +@define-color green #40A02B; +@define-color yellow #DF8E1D; +@define-color sky #04A5E5; +@define-color rose #D20F39; +@define-color blue #1E66F5; +@define-color surface2 #ACB0BE; +@define-color peach #FE640B; + +/* -------- Base Styles -------- */ +* { + font-family: "FiraCode Nerd Font", "Font Awesome 7 Free"; + font-size: 15px; +} + +window#waybar { + /* background: @base; */ + background: transparent; + box-shadow: 0 6px 18px rgba(0, 0, 0, 0.35); + transition: background-color .35s ease, color .35s ease; +} + +window#waybar.hidden { opacity: 0.2; } + +window#waybar.termite { background: @base; } +window#waybar.chromium { background: @base; border: none; } + +/* -------- Module “pill” look -------- */ +#workspaces, #clock, #mpris, #pulseaudio, #bluetooth, #upower, #network { + background: @base; + border: none; + border-radius: 5px; + padding: 3px 8px; +} + +/* consistent gaps between modules */ +.modules-left > widget, .modules-right > widget { + margin: 0 15px; +} +.modules-left > widget:first-child { margin-left: 0; } +.modules-right > widget:last-child { margin-right: 0; } + +/* -------- Buttons (generic) -------- */ +/* Buttons */ +button { + border: none; + border-radius: 8px; + background: transparent; + color: @text; + transition: background-color .2s ease, box-shadow .2s ease; + box-shadow: inset 0 -3px transparent; +} + +/* hover */ +button:hover { + background: rgba(255,255,255,0.08); + box-shadow: inset 0 -3px @peach; +} + +/* active (no CSS transform in GTK; simulate press with padding + shadow) */ +button:active { + padding-top: 1px; /* nudge down visually */ + padding-bottom: 1px; /* keep height stable */ + box-shadow: inset 0 -2px @peach; + color: @base; +} + +/* -------- Workspaces -------- */ +#workspaces { + background: @base; +} + +#workspaces button { + padding: 2px 8px; + margin: 0 2px; + border-radius: 8px; + transition: background-color .2s ease, box-shadow .2s ease; +} + +#workspaces button:hover { + background: rgba(255,255,255,0.08); +} + +#workspaces button.active, #workspaces button.focused { + background: @peach; + color: @base; + box-shadow: inset 0 -3px @peach; +} + +#workspaces button.urgent { + background: @rose; + color: @base; + box-shadow: inset 0 -3px rgba(0,0,0,0.2); +} + +/* -------- Clock -------- */ +#clock { + background: @peach; + color: @base; + font-weight: 600; + letter-spacing: 0.2px; +} + +/* -------- Mpris -------- */ +#mpris { + background: @peach; + color: @base; + font-weight: 600; + letter-spacing: 0.2px; +} + +/* -------- Pavu -------- */ +#pulseaudio { + background: @peach; + color: @base; + font-weight: 600; + letter-spacing: 0.2px; +} + +/* -------- Bluetooth -------- */ +#bluetooth { + background: @peach; + color: @base; + font-weight: 600; + letter-spacing: 0.2px; +} + +/* -------- Upower -------- */ +#upower { + background: @peach; + color: @base; + font-weight: 600; + letter-spacing: 0.2px; +} + +/* -------- Network -------- */ +#network { + background: @peach; + color: @base; + font-weight: 600; + letter-spacing: 0.2px; +} + +/* -------- Helpers -------- */ +@keyframes blink { + to { background-color: @peach; color: @base; } +} diff --git a/moduler/programs/waybar/waybar-mocha.css b/moduler/programs/waybar/waybar-mocha.css new file mode 100644 index 0000000..c54b43c --- /dev/null +++ b/moduler/programs/waybar/waybar-mocha.css @@ -0,0 +1,185 @@ +/* -------- Catppuccin Mocha Palette -------- */ +@define-color base #1E1E2E; +@define-color mantle #181825; +@define-color crust #11111B; +@define-color text #CDD6F4; +@define-color subtext0 #A6ADC8; + +@define-color green #A6E3A1; +@define-color yellow #F9E2AF; +@define-color sky #89DCEB; +@define-color rose #F38BA8; +@define-color blue #89B4FA; +@define-color surface2 #585B70; +@define-color peach #fab387; + +/* -------- Base Styles -------- */ +* { + font-family: "FiraCode Nerd Font", "Font Awesome 7 Free"; + font-size: 15px; +} + +.connecting { + animation: pulse 0.8s ease-in-out infinite; +} + +@keyframes pulse { + 0% { + opacity: 1; + } + 50% { + opacity: 0.5; + } + 100% { + opacity: 1; + } +} + +window#waybar { + /* background: @base; */ + background: transparent; + box-shadow: 0 6px 18px rgba(0, 0, 0, 0.35); + transition: background-color .35s ease, color .35s ease; +} + +window#waybar.hidden { opacity: 0.2; } + +window#waybar.termite { background: @base; } +window#waybar.chromium { background: @base; border: none; } + +/* -------- Module “pill” look -------- */ +#workspaces, #clock, #mpris, #pulseaudio, #bluetooth, #upower, #network, #custom-tailscale, #custom-netbird { + background: @base; + border: none; + border-radius: 5px; + padding: 3px 8px; +} + +/* consistent gaps between modules */ +.modules-left > widget, .modules-right > widget { + margin: 0 15px; +} +.modules-left > widget:first-child { margin-left: 0; } +.modules-right > widget:last-child { margin-right: 0; } + +/* -------- Buttons (generic) -------- */ +/* Buttons */ +button { + border: none; + border-radius: 8px; + background: transparent; + color: @text; + transition: background-color .2s ease, box-shadow .2s ease; + box-shadow: inset 0 -3px transparent; +} + +/* hover */ +button:hover { + background: rgba(255,255,255,0.08); + box-shadow: inset 0 -3px @peach; +} + +/* active (no CSS transform in GTK; simulate press with padding + shadow) */ +button:active { + padding-top: 1px; /* nudge down visually */ + padding-bottom: 1px; /* keep height stable */ + box-shadow: inset 0 -2px @peach; + color: @base; +} + +/* -------- Workspaces -------- */ +#workspaces { + background: @base; +} + +#workspaces button { + padding: 2px 8px; + margin: 0 2px; + border-radius: 8px; + transition: background-color .2s ease, box-shadow .2s ease; +} + +#workspaces button:hover { + background: rgba(255,255,255,0.08); +} + +#workspaces button.active, #workspaces button.focused { + background: @peach; + color: @base; + box-shadow: inset 0 -3px @peach; +} + +#workspaces button.urgent { + background: @rose; + color: @base; + box-shadow: inset 0 -3px rgba(0,0,0,0.2); +} + +/* -------- Clock -------- */ +#clock { + background: @peach; + color: @base; + font-weight: 600; + letter-spacing: 0.2px; +} + +/* -------- Mpris -------- */ +#mpris { + background: @peach; + color: @base; + font-weight: 600; + letter-spacing: 0.2px; +} + +/* -------- Pavu -------- */ +#pulseaudio { + background: @peach; + color: @base; + font-weight: 600; + letter-spacing: 0.2px; +} + +/* -------- Bluetooth -------- */ +#bluetooth { + background: @peach; + color: @base; + font-weight: 600; + letter-spacing: 0.2px; +} + +/* -------- Upower -------- */ +#upower { + background: @peach; + color: @base; + font-weight: 600; + letter-spacing: 0.2px; +} + +/* -------- Upower -------- */ +#custom-tailscale { + background: @peach; + color: @base; + font-weight: 600; + letter-spacing: 0.2px; +} + +/* -------- Netbird -------- */ +#custom-netbird { + background: @peach; + color: @base; + font-weight: 600; + letter-spacing: 0.2px; +} + +/* -------- Network -------- */ +#network { + background: @peach; + color: @base; + font-weight: 600; + letter-spacing: 0.2px; +} + +/* -------- Helpers -------- */ +@keyframes blink { + to { background-color: @peach; color: @base; } +} diff --git a/moduler/programs/waybar/waybar.jsonc b/moduler/programs/waybar/waybar.jsonc new file mode 100644 index 0000000..eca5509 --- /dev/null +++ b/moduler/programs/waybar/waybar.jsonc @@ -0,0 +1,116 @@ +{ + "layer": "top", + "position": "top", + "margin-top": 10, + "margin-left": 14, + "margin-right": 14, + "spacing": 12, + "modules-left": [ + "hyprland/workspaces" + ], + "modules-right": [ + "mpris", + "pulseaudio", + "bluetooth", + "custom/tailscale", + "custom/netbird", + "network", + "clock" + ], + "mpris": { + // "player": "Feishin", + "format": "{player_icon} {title} — {artist}", + "format-paused": " {player_icon} {title}", + "format-stopped": "", + "player-icons": { + "default": "", + "Feishin": "" + }, + "max-length": 45, + "interval": 1, + "tooltip": true, + "tooltip-format": "{player} — {status}\n{artist}\n{title}\n{album}", + "on-click": "playerctl play-pause" + }, + "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": "pgrep .blueman-manage && pkill .blueman-manage || blueman-manager &" + }, + "network": { + "interface": [ + "enp195s0", + "enp196s0" + ], + "format": "{ifname}", + "format-wifi": " {essid} ({signalStrength}%)", + "format-ethernet": " {ifname}", + "format-disconnected": "no signal", //An empty format will hide the module. + "tooltip-format": "{ifname}", + "tooltip-format-wifi": "{essid} ({signalStrength}%) ", + "tooltip-format-ethernet": "{ifname} ", + "tooltip-format-disconnected": "Disconnected", + "max-length": 50 + }, + "pulseaudio": { + //"scroll-step": 1, + "format": "{icon} {volume}%", + "format-bluetooth": "{icon}  {volume}%", + "format-muted": "", + "format-icons": { + "headphones": "", + "handsfree": "", + "headset": "", + "phone": "", + "portable": "", + "car": "", + "default": [ + "", + "" + ] + }, + "on-click": "pgrep pavucontrol && pkill pavucontrol || pavucontrol &" + }, + "clock": { + "format": "{:%c}", + "locale": "sv_SE.UTF-8", + "tooltip": true, + "tooltip-format": "{:%A, %d %B %Y}\n %H:%M:%S", + "interval": 1 + }, + "custom/tailscale": { + "exec": "/home/fw/.config/waybar/scripts/tailscale.sh --status", + "on-click": "/home/fw/.config/waybar/scripts/tailscale.sh --toggle", + "exec-on-event": true, + "format": "{icon} {text}", + "format-icons": { + "connected": "", + "stopped": "", + "connecting": "", + "disconnecting": "" + }, + "tooltip": true, + "return-type": "json", + "interval": 5 + }, + "custom/netbird": { + "exec": "/home/fw/.config/waybar/scripts/netbird.sh --status", + "on-click": "/home/fw/.config/waybar/scripts/netbird.sh --toggle", + "exec-on-event": true, + "format": "{icon} {text}", + "format-icons": { + "connected": "", + "stopped": "", + "connecting": "", + "disconnecting": "" + }, + "tooltip": true, + "return-type": "json", + "interval": 5 + } +}