diff --git a/flake.nix b/flake.nix index 05ec6f46..03c9cbb4 100644 --- a/flake.nix +++ b/flake.nix @@ -35,7 +35,7 @@ nixosConfigurations = { # Virtual Machines nixos-vm-01 = libx.mkHost { hostname = "nixos-vm-01"; }; - nixos-vm-02 = libx.mkHost { hostname = "nixos-vm-02"; }; + nixos-vm-02 = libx.mkHost { hostname = "nixos-vm-02"; desktop = "hyprland"; gpu = "intel"; theme = "gruvbox" }; # Physical Machines nixos-laptop = libx.mkHost { hostname = "nixos-laptop"; desktop = "hyprland"; gpu = "intel"; theme = "gruvbox"; }; nixos-framework = libx.mkHost { hostname = "nixos-framework"; desktop = "hyprland"; gpu = "intel"; theme = "gruvbox"; }; @@ -47,7 +47,7 @@ homeConfigurations = { # Virtual Machines "albert@nixos-vm-01" = libx.mkHome { hostname = "nixos-vm-01"; }; - "albert@nixos-vm-02" = libx.mkHome { hostname = "nixos-vm-02"; }; + "albert@nixos-vm-02" = libx.mkHome { hostname = "nixos-vm-02"; desktop = "hyprland"; theme = "gruvbox"; }; # Physical Machines "albert@nixos-laptop" = libx.mkHome { hostname = "nixos-laptop"; desktop = "hyprland"; theme = "gruvbox"; }; "albert@nixos-framework" = libx.mkHome { hostname = "nixos-framework"; desktop = "hyprland"; theme = "gruvbox"; }; diff --git a/home-manager/hosts/nixos-vm-02/desktops/gnome/default.nix b/home-manager/hosts/nixos-vm-02/desktops/gnome/default.nix new file mode 100644 index 00000000..fa72eb2f --- /dev/null +++ b/home-manager/hosts/nixos-vm-02/desktops/gnome/default.nix @@ -0,0 +1,6 @@ +{ hostname, username, ... }: { + imports = [ + ./gnome-conf.nix + # ./gnome-terminal-conf.nix + ]; +} \ No newline at end of file diff --git a/home-manager/hosts/nixos-vm-02/desktops/gnome/gnome-conf.nix b/home-manager/hosts/nixos-vm-02/desktops/gnome/gnome-conf.nix new file mode 100644 index 00000000..812aa78a --- /dev/null +++ b/home-manager/hosts/nixos-vm-02/desktops/gnome/gnome-conf.nix @@ -0,0 +1,180 @@ +# Generated via dconf2nix: https://github.com/gvolpe/dconf2nix +{ lib, hostname, username, ... }: with lib.hm.gvariant; +let + # Day Variant + day-wallpaper = "file:///etc/nixos/git/wallpapers/gruvbox/wallpaper10.jpg"; + day-gtk-theme = "vimix-doder"; + day-shell-theme = "vimix-doder"; + day-icon-theme = "Vimix-Doder"; + + # Night Variant + night-wallpaper = "file:///etc/nixos/git/wallpapers/gruvbox/wallpaper11.jpg"; + night-gtk-theme = "Gruvbox-Dark-BL"; + night-shell-theme = "Gruvbox-Dark-BL"; + night-icon-theme = "Nordzy-yellow-dark"; + +in { + # Gnome GTK Settings + gtk.theme = "${night-gtk-theme}"; + + # Gnome DCONF Settings + dconf.settings = { + "apps/seahorse/listing" = { + keyrings-selected = [ "openssh:///home/${username}/.ssh" ]; + }; + + "org/gnome/GWeather4" = { + temperature-unit = "centigrade"; + }; + + "org/gnome/Weather" = { + locations = "[<(uint32 2, <('Osaka International Airport', 'RJOO', false, [(0.60708368566759674, 2.3640484718263193)], @a(dd) [])>)>]"; + }; + + "org/gnome/clocks" = { + world-clocks = "[{'location': <(uint32 2, <('Los Angeles', 'KCQT', true, [(0.59370283970450188, -2.0644336110828618)], [(0.59432360095955872, -2.063741622941031)])>)>}, {'location': <(uint32 2, <('Dallas', 'KDAL', true, [(0.57338429251143708, -1.690448351049749)], [(0.57217226606568217, -1.6895950770317414)])>)>}, {'location': <(uint32 2, <('Washington', 'KDCA', true, [(0.67803131976116615, -1.3444998506811625)], [(0.67884776733195662, -1.344538230471414)])>)>}, {'location': <(uint32 2, <('Coordinated Universal Time (UTC)', '@UTC', false, @a(dd) [], @a(dd) [])>)>}]"; + }; + + "org/gnome/clocks/state/window" = { + maximized = false; + panel-id = "world"; + size = mkTuple [ 870 690 ]; + }; + + "org/gnome/desktop/app-folders" = { + folder-children = [ "Utilities" "YaST" ]; + }; + + "org/gnome/desktop/app-folders/folders/Utilities" = { + apps = [ "gnome-abrt.desktop" "gnome-system-log.desktop" "nm-connection-editor.desktop" "org.gnome.baobab.desktop" "org.gnome.Connections.desktop" "org.gnome.DejaDup.desktop" "org.gnome.Dictionary.desktop" "org.gnome.DiskUtility.desktop" "org.gnome.eog.desktop" "org.gnome.Evince.desktop" "org.gnome.FileRoller.desktop" "org.gnome.fonts.desktop" "org.gnome.seahorse.Application.desktop" "org.gnome.tweaks.desktop" "org.gnome.Usage.desktop" "vinagre.desktop" ]; + categories = [ "X-GNOME-Utilities" ]; + name = "X-GNOME-Utilities.directory"; + translate = true; + }; + + "org/gnome/desktop/background" = { + picture-uri = "${day-wallpaper}"; + picture-uri-dark = "${night-wallpaper}"; + }; + + "org/gnome/desktop/calendar" = { + show-weekdate = false; + }; + + "org/gnome/desktop/interface" = { + clock-show-date = true; + clock-show-weekday = false; + color-scheme = "prefer-dark"; + document-font-name = "JetBrainsMonoNL Nerd Font 11"; + font-antialiasing = "rgba"; + font-hinting = "slight"; + font-name = "JetBrainsMonoNL Nerd Font Propo Thin 11"; + gtk-theme = "Gruvbox-Dark-BL"; + icon-theme = "Nordzy-yellow-dark"; + monospace-font-name = "JetBrainsMono Nerd Font 10"; + show-battery-percentage = false; + }; + + + "org/gnome/desktop/notifications" = { + show-banners = true; + }; + + "org/gnome/desktop/peripherals/touchpad" = { + tap-to-click = true; + two-finger-scrolling-enabled = true; + }; + + "org/gnome/desktop/wm/preferences" = { + button-layout = "appmenu:minimize,maximize,close"; + }; + + "org/gnome/mutter" = { + edge-tiling = false; + }; + + "org/gnome/settings-daemon/plugins/color" = { + night-light-enabled = true; + night-light-temperature = mkUint32 3418; + }; + + "org/gnome/shell" = { + app-picker-layout = "[{'org.gnome.Extensions.desktop': <{'position': <0>}>, 'htop.desktop': <{'position': <1>}>, 'nixos-manual.desktop': <{'position': <2>}>, 'nvidia-settings.desktop': <{'position': <3>}>, 'vlc.desktop': <{'position': <4>}>, 'xterm.desktop': <{'position': <5>}>, 'org.gnome.Settings.desktop': <{'position': <6>}>, 'org.gnome.Calculator.desktop': <{'position': <7>}>, 'org.gnome.clocks.desktop': <{'position': <8>}>, 'org.gnome.Contacts.desktop': <{'position': <9>}>, 'simple-scan.desktop': <{'position': <10>}>, 'yelp.desktop': <{'position': <11>}>, 'org.gnome.Calendar.desktop': <{'position': <12>}>, 'gnome-system-monitor.desktop': <{'position': <13>}>, 'org.gnome.TextEditor.desktop': <{'position': <14>}>, 'Utilities': <{'position': <15>}>, 'org.gnome.Weather.desktop': <{'position': <16>}>, 'org.gnome.Photos.desktop': <{'position': <17>}>}]"; + disable-user-extensions = false; + disabled-extensions = [ "workspace-indicator@gnome-shell-extensions.gcampax.github.com" ]; + enabled-extensions = [ "blur-my-shell@aunetx" "caffeine@patapon.info" "dash-to-dock@micxgx.gmail.com" "user-theme@gnome-shell-extensions.gcampax.github.com" "Vitals@CoreCoding.com" "tiling-assistant@leleat-on-github" "hibernate-status@dromi" "nightthemeswitcher@romainvigier.fr" ]; + favorite-apps = [ "org.gnome.Nautilus.desktop" "firefox.desktop" "org.gnome.Console.desktop" "bitwarden.desktop" "steam.desktop" "net.lutris.Lutris.desktop" ]; + welcome-dialog-last-shown-version = "44.2"; + }; + + "org/gnome/shell/extensions/caffeine" = { + indicator-position-max = 3; + }; + + "org/gnome/shell/extensions/dash-to-dock" = { + apply-custom-theme = false; + background-opacity = 0.8; + custom-theme-shrink = true; + dance-urgent-applications = true; + dash-max-icon-size = 40; + disable-overview-on-startup = true; + dock-position = "BOTTOM"; + height-fraction = 0.9; + icon-size-fixed = false; + isolate-workspaces = false; + show-icons-emblems = true; + show-icons-notifications-counter = true; + show-show-apps-button = false; + show-windows-preview = true; + transparency-mode = "FIXED"; + }; + + "org/gnome/shell/extensions/nightthemeswitcher/gtk-variants" = { + enabled = true; + day = "${day-gtk-theme}"; + night = "${night-gtk-theme}"; + }; + + "org/gnome/shell/extensions/nightthemeswitcher/icon-variants" = { + enabled = true; + day = "${day-icon-theme}"; + night = "${night-icon-theme}"; + }; + + "org/gnome/shell/extensions/nightthemeswitcher/shell-variants" = { + enabled = true; + day = "${day-shell-theme}"; + night = "${night-shell-theme}"; + }; + + "org/gnome/shell/extensions/nightthemeswitcher/time" = { + manual-schedule = true; + nightthemeswitcher-ondemand-keybinding = [ "t" ]; + sunset = 19.0; + }; + + "org/gnome/shell/weather" = { + automatic-location = true; + locations = "[<(uint32 2, <('Osaka International Airport', 'RJOO', false, [(0.60708368566759674, 2.3640484718263193)], @a(dd) [])>)>]"; + }; + + "org/gnome/tweaks" = { + show-extensions-notice = false; + }; + + "org/gtk/gtk4/settings/file-chooser" = { + date-format = "regular"; + location-mode = "path-bar"; + show-hidden = false; + show-size-column = true; + show-type-column = true; + sidebar-width = 140; + sort-column = "name"; + sort-directories-first = false; + sort-order = "ascending"; + type-format = "category"; + view-type = "list"; + window-size = mkTuple [ 859 453 ]; + }; + }; +} diff --git a/home-manager/hosts/nixos-vm-02/desktops/gnome/gnome-terminal-conf.nix b/home-manager/hosts/nixos-vm-02/desktops/gnome/gnome-terminal-conf.nix new file mode 100644 index 00000000..7f520842 --- /dev/null +++ b/home-manager/hosts/nixos-vm-02/desktops/gnome/gnome-terminal-conf.nix @@ -0,0 +1,39 @@ +{ ... }: { + programs.gnome-terminal = { + enable = true; + themeVariant = "system"; + profile."Default" = { + boldIsBright = true; + cursorShape = "block"; + font = "Jetbrains Regular Mono"; + colors = { + # https://github.com/Gogh-Co/Gogh/blob/master/themes/Gruvbox%20Dark.yml + # highlight = [ ]; + palette = [ + "#282828" # Black (Host) + "#CC241D" # Red (Syntax string) + "#98971A" # Green (Command) + "#D79921" # Yellow (Command second) + "#458588" # Blue (Path) + "#B16286" # Magenta (Syntax var) + "#689D6A" # Cyan (Prompt) + "#A89984" # White + + "#928374" # Bright Black + "#FB4934" # Bright Red (Command error) + "#B8BB26" # Bright Green (Exec) + "#FABD2F" # Bright Yellow + "#83A598" # Bright Blue (Folder) + "#D3869B" # Bright Magenta + "#8EC07C" # Bright Cyan + "#EBDBB2" # Bright White + + "#282828" # Background + "#EBDBB2" # Foreground (Text) + + "#EBDBB2" # Cursor + ]; + }; + }; + }; +} \ No newline at end of file diff --git a/home-manager/hosts/nixos-vm-02/desktops/hyprland/default.nix b/home-manager/hosts/nixos-vm-02/desktops/hyprland/default.nix new file mode 100644 index 00000000..48b37159 --- /dev/null +++ b/home-manager/hosts/nixos-vm-02/desktops/hyprland/default.nix @@ -0,0 +1,18 @@ +{ theme, ... }: { + imports = [ + ./${theme}/hyprland-conf.nix + ./${theme}/waybar-conf.nix + ]; + + home.file = { + ".config/hypr/hyprland.conf" = { + enable = true; + text = '' + # Laptop specific: + monitor=,highrr,auto,1 + + # https://wiki.hyprland.org/Configuring/Variables/ + env = GDK_SCALE,1 + env = XCURSOR_SIZE,22 + '' +} \ No newline at end of file diff --git a/home-manager/hosts/nixos-vm-02/desktops/hyprland/gruvbox/hyprland-conf.nix b/home-manager/hosts/nixos-vm-02/desktops/hyprland/gruvbox/hyprland-conf.nix new file mode 100644 index 00000000..128ad292 --- /dev/null +++ b/home-manager/hosts/nixos-vm-02/desktops/hyprland/gruvbox/hyprland-conf.nix @@ -0,0 +1,275 @@ +{ theme, ... }: { + home.file = { + ".config/hypr/hyprland.conf" = { + enable = true; + text = '' + layerrule = blur, waybar + + # unscale XWayland + xwayland { + force_zero_scaling = true + } + + # nVidia Speficic Settings: + # https://wiki.hyprland.org/Nvidia/ + # env = LIBVA_DRIVER_NAME,nvidia + # env = XDG_SESSION_TYPE,wayland + # env = GBM_BACKEND,nvidia-drm + # env = __GLX_VENDOR_LIBRARY_NAME,nvidia + env = WLR_NO_HARDWARE_CURSORS,1 + + general { + gaps_in = 10 + gaps_out = 20 + border_size = 3 + # First six are color, last 2 are opacity + col.active_border = rgba(d5c4a1bb) # Gruvbox fg2, opacity bb + col.inactive_border = rgba(504945dd) # Gruvbox bg2, opacity aa + resize_on_border = true + extend_border_grab_area = 15 + layout = dwindle + } + input { + kb_layout = us + follow_mouse = 1 + touchpad { + natural_scroll = true + disable_while_typing = true + tap-to-click = true + clickfinger_behavior = true + drag_lock = true + } + sensitivity = 0 + } + gestures { + # https://wiki.hyprland.org/0.24.1/Configuring/Keywords/#gestures + workspace_swipe = true + workspace_swipe_fingers = 3 + workspace_swipe_numbered = false + } + misc { + disable_hyprland_logo = true + mouse_move_enables_dpms = true + key_press_enables_dpms = true + } + decoration { + rounding = 5 + active_opacity = 0.9 + inactive_opacity = 0.7 + fullscreen_opacity = 0.9 + drop_shadow = true + shadow_range = 4 + shadow_render_power = 3 + col.shadow = rgba(1a1a1aee) + blur { + size = 8 + passes = 3 + ignore_opacity = true + } + + } + animations { + # https://wiki.hyprland.org/Configuring/Animations/ + enabled = true + bezier = myBezier, 0.05, 0.9, 0.1, 1.05 + animation = windows, 1, 7, myBezier + animation = windowsOut, 1, 7, default, popin 80% + animation = border, 1, 10, default + animation = borderangle, 1, 8, default + animation = fade, 1, 7, default + animation = workspaces, 1, 6, default + } + dwindle { + # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more + pseudotile = true # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below + preserve_split = true # you probably want this + no_gaps_when_only = 1 + + } + master { + # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more + new_is_master = true + } + + # See https://wiki.hyprland.org/Configuring/Keywords/ for more + $mainMod = SUPER + + # Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more + bind = $mainMod, Q, exec, kitty + bind = $mainMod, C, killactive, + bind = $mainMod, M, exit, + bind = $mainMod, V, togglefloating, + bind = $mainMod, R, exec, wofi --show drun + bind = $mainMod, P, pseudo, # dwindle + bind = $mainMod, J, togglesplit, # dwindle + + # Move focus with mainMod + arrow keys + # bind = $mainMod, left, movefocus, l + # bind = $mainMod, right, movefocus, r + # bind = $mainMod, up, movefocus, u + # bind = $mainMod, down, movefocus, d + + # Switch workspaces with mainMod + [0-9] + bind = $mainMod, 1, workspace, 1 + bind = $mainMod, 2, workspace, 2 + bind = $mainMod, 3, workspace, 3 + bind = $mainMod, 4, workspace, 4 + bind = $mainMod, 5, workspace, 5 + bind = $mainMod, 6, workspace, 6 + bind = $mainMod, 7, workspace, 7 + bind = $mainMod, 8, workspace, 8 + bind = $mainMod, 9, workspace, 9 + bind = $mainMod, 0, workspace, 10 + + # Move active window to a workspace with mainMod + SHIFT + [0-9] + bind = $mainMod SHIFT, 1, movetoworkspace, 1 + bind = $mainMod SHIFT, 2, movetoworkspace, 2 + bind = $mainMod SHIFT, 3, movetoworkspace, 3 + bind = $mainMod SHIFT, 4, movetoworkspace, 4 + bind = $mainMod SHIFT, 5, movetoworkspace, 5 + bind = $mainMod SHIFT, 6, movetoworkspace, 6 + bind = $mainMod SHIFT, 7, movetoworkspace, 7 + bind = $mainMod SHIFT, 8, movetoworkspace, 8 + bind = $mainMod SHIFT, 9, movetoworkspace, 9 + bind = $mainMod SHIFT, 0, movetoworkspace, 10 + + # Scroll through existing workspaces with mainMod + scroll + bind = $mainMod, mouse_down, workspace, e+1 + bind = $mainMod, mouse_up, workspace, e-1 + + # Move/resize windows with mainMod + LMB/RMB and dragging + bindm = $mainMod, mouse:272, movewindow + bindm = $mainMod, mouse:273, resizewindow + + ############################################################################# + # Custom keybinds + # Show Rofi on SUPER-SPACE + bind = $mainMod, space, exec, rofi -show drun -show-icons + # Take a screenshot with the Print key + bind = , Print, exec, grim -g "$(slurp)" | wl-copy -t image/png + + # Move to the previous / next workspace with SUPER-LEFT and SUPER-RIGHT + bind = $mainMod , right, workspace, e+1 + bind = $mainMod , left , workspace, e-1 + bind = $mainMod SHIFT, right, movetoworkspace, e+1 + bind = $mainMod SHIFT, left , movetoworkspace, e-1 + + # Launch various applications + bind = $mainMod, R, exec, ranger + bind = $mainMod, S, exec, steam + + # Lock the screen, send to swaylock and pause music + bind = $mainMod, L, exec, swaylock && playerctl pause + + # Lid closure: + # trigger when the switch is toggled + # bindl=,switch:[switch name],exec,swaylock + # trigger when the switch is turning on + bindl=,switch:on:1241ec0,exec,hyprctl keyword monitor "eDP-1, 2560x1600, 0x0, 1" + # trigger when the switch is turning off + bindl=,switch:off:1241ec0,exec,hyprctl keyword monitor "eDP-1, disable" + + # Laptop specific config + # Set up the FN keys: + + # F1 - Mute + # bind = , XF86AudioMute, exec, amixer set Master toggle && swayosd --output-volume=mute-toggle + bind = , XF86AudioMute, exec, swayosd --output-volume=mute-toggle + + # F2 - Volume Down + # binde = , XF86AudioLowerVolume, exec, amixer set Master 3%- + binde = , XF86AudioLowerVolume, exec, swayosd --output-volume=lower + + # F3 - Volume Up + # binde = , XF86AudioRaiseVolume, exec, amixer set Master 3%+ + binde = , XF86AudioRaiseVolume, exec, swayosd --output-volume=raise + + # F4 - Mute Microphone + # bind = , XF86AudioMicMute, exec, amixer set Capture toggle + bind = , XF86AudioMicMute, exec, swayosd --input-volume=mute-toggle + + # F5 - Brightness Down + # binde = , XF86MonBrightnessDown, exec, light -U 5 + binde = , XF86MonBrightnessDown, exec, swayosd --brightness=lower + + # F6 - Brightness Up + # binde = , XF86MonBrightnessUp, exec, light -A 5 + binde = , XF86MonBrightnessUp, exec, swayosd --brightness=raise + + # F7 - External Displays + # bind = , XF86 + + # F8 - Airplane Mode + # bind = , XF86 + + # F9 - Notifications? + # bind = , XF86 + + # F10 - Call Answer? + # bind = , XF86 + + # F11 - Call Hang Up? + # bind = , XF86 + + # F12 - Favorites? + # bind = , XF86 + + # Use rofi as an alt-tab switcher + # bind = ALT, TAB, exec, rofi -show window + + # Resize + bind = $mainMod, R, exec, notify-send "Entered resize mode. Press ESC to quit." + bind = $mainMod, R, submap, resize + submap = resize + binde = , H, resizeactive,-50 0 + binde = , L, resizeactive,50 0 + binde = , K, resizeactive,0 -50 + binde = , J, resizeactive,0 50 + binde = , left, resizeactive,-50 0 + binde = , right, resizeactive,50 0 + binde = , up, resizeactive,0 -50 + binde = , down, resizeactive,0 50 + bind = , escape, submap, reset + submap = reset + + # Start the config: + exec-once=bash ~/.config/hypr/start.sh + ''; + }; + # Set the custom launcher script + ".config/hypr/start.sh" = { + enable = true; + executable = true; + text = '' + #!/usr/bin/env bash + # https://wiki.hyprland.org/FAQ/#some-of-my-apps-take-a-really-long-time-to-open + dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP & + + # Set the wallpaper + swww init + + # Waybar + waybar & + + # Set up the idle management daemon + swayidle -w \ + timeout 120 'swaylock -f && playerctl pause' \ + timeout 180 'hyprctl dispatch dpms off' \ + timeout 300 'systemctl suspend-then-hibernate' \ + resume 'hyprctl dispatch dpms on' \ + before-sleep 'swaylock -f' \ + before-sleep 'playerctl pause' & + + # Automatic device mounting + udiskie & + + DIR=/etc/nixos/git/wallpapers/${theme} + IMG=`ls $DIR | shuf -n 1` + swww img $DIR/$IMG -t random & + + # Notification listener + mako + ''; + }; + }; +} diff --git a/home-manager/hosts/nixos-vm-02/desktops/hyprland/gruvbox/waybar-conf.nix b/home-manager/hosts/nixos-vm-02/desktops/hyprland/gruvbox/waybar-conf.nix new file mode 100644 index 00000000..2598667b --- /dev/null +++ b/home-manager/hosts/nixos-vm-02/desktops/hyprland/gruvbox/waybar-conf.nix @@ -0,0 +1,270 @@ +{ ...}: { + imports = [ ../waybar/scripts.nix ]; + + home.file = { + # https://yewtu.be/watch?v=tWQB1NDDA9c + # https://github.com/DN-debug/waybar-examples + + # Inspiration: + # https://github.com/Pipshag/dotfiles_gruvbox + + # Font Search: + # https://www.nerdfonts.com/cheat-sheet + + # Online CSS testing + # https://www.w3schools.com/css/tryit.asp?filename=trycss_border_round + + # Waybar configuration + ".config/waybar/config.jsonc" = { + enable = true; + executable = false; + text = '' + { + "layer": "top", + "position": "top", + "modules-left": [ + "custom/wlogout", + "idle_inhibitor", + "clock", + "mpris", + ], + "modules-center": [ + "wlr/workspaces", + ], + "modules-right": [ + "pulseaudio", + "custom/tailscale", + "network", + "battery", + ], + + "custom/wlogout": { + "format": "", + "on-click": "wlogout" + }, + + "custom/tailscale": { + "format": "{icon} {}", + "exec": "$HOME/.config/waybar/scripts/tailscale.sh", + "exec-if": "pgrep tailscaled", + "return-type": "json", + "interval": 5, + "format-icons": { + "Running": "󰌆", + "Stopped": "󰌊", + } + }, + + "idle_inhibitor": { + "format": "{icon}", + "format-icons": { + "activated": "", + "deactivated": "" + } + }, + + "mpris": { + "format": "{player_icon} {dynamic}", + "format-paused": "{status_icon} {dynamic}", + "player-icons": { "default": "▶" }, + "status-icons": { "paused": "⏸" }, + }, + + "wlr/workspaces": { + "on-click": "activate", + }, + + "clock": { + "format": "󰥔 {:%H:%M}", + "format-alt": "󰃭 {:%A, %d %b, %Y}", + "tooltip-format": "{calendar}", + "calendar": { + "mode" : "month", + "mode-mon-col" : 3, + "weeks-pos" : "left", + "on-scroll" : 1, + "format": { + "months": "{}", + "days": "{}", + "weeks": "W{}", + "weekdays": "{}", + "today": "{}" + } + }, + "actions": { + "on-click-right": "kitty -e calcurse", + "on-click-middle": "mode", + "on-scroll-up": "shift_up", + "on-scroll-down": "shift_down" + } + }, + + "pulseaudio": { + "scroll-step": 1, + "format": "{icon} {format_source}", + "format-bluetooth": "{volume}% {icon} {format_source}", + "format-bluetooth-muted": " ", + "format-muted": "󰝟 {format_source}", + "format-source": " ", + "format-source-muted": " ", + "format-icons": { + "headphone": "", + "headset": "", + "default": ["󰕿", "󰖀", "󰕾"] + }, + "tooltip": false, + "on-click": "kitty -e pulsemixer", + }, + + "network": { + "format": "{ifname}", + "format-wifi": " {essid}", + "format-ethernet": " {ipaddr}", + "format-disconnected": "", // An empty format will hide the module. + "tooltip-format": "{ifname} via {gwaddr} ", + "tooltip-format-wifi": "{essid} ({signalStrength}%) ", + "tooltip-format-ethernet": "{ifname} ", + "tooltip-format-disconnected": "Disconnected", + "max-length": 50, + "on-click": "kitty --class=nmtui -e nmtui" + }, + + "battery": { + "tooltip": true, + "tooltip-format": "{time}", + "states": { + "warning": 35, + "critical": 20 + }, + "format": "{icon} {capacity}%", + "format-charging": "󰂄 {capacity}%", + "format-plugged": " {capacity}%", + "format-icons": ["", "", "", "", ""] + }, + } + ''; + }; + + # Waybar theming + ".config/waybar/style.css" = { + enable = true; + executable = false; + text = '' + * { + border: none; + border-radius: 0; + font-family: JetbrainsMono Regular; + } + + #waybar { + background-color: rgba(50, 48, 47, 0.8); + padding: 15px; + } + + #workspaces button.visible, + #workspaces button { + font-size: 1px; + border-radius: 50px; + padding: 0px 5px; + margin: 5px; + color: rgba(0, 0, 0, 0); + background-color: #282828; + } + + #workspaces button.active { + padding: 0px 15px; + background-color: #a89984; + } + + #workspaces button:hover, + #workspaces button.focused:hover, + #workspaces button.visible:hover { + background-color: #d5c4a1; + } + + #workspaces button.urgent { + background-color: #cc241d; + } + + /* + * General background + */ + #network, + #mpris, + #memory, + #backlight, + #cpu, + #pulseaudio, + #temperature, + #battery, + #tray, + #submap, + #clock, + #idle_inhibitor, + #custom-tailscale, + #custom-wlogout, + #window { + font-size: 16px; + padding: 0px 10px; + margin: 5px; + border-radius: 5px; + color: rgba(50, 48, 47, 0.8); + background-color: #a89984; + font-weight: bold; + } + + /* + * General background + */ + #network button:hover, + #mpris button:hover, + #memory button:hover, + #backlight button:hover, + #cpu button:hover, + #pulseaudio button:hover, + #temperature button:hover, + #battery button:hover, + #tray button:hover, + #submap button:hover, + #clock button:hover, + #idle_inhibitor button:hover, + #custom-tailscale button:hover, + #custom-wlogout button:hover, + #window button:hover{ + background-color: #d5c4a1; + } + + /* + * Warning plugins state + */ + #battery.warning { + background-color: #e9b143; + } + + /* + * Critical plugins state + */ + #idle_inhibitor.activated, + #battery.critical, + #custom-tailscale.Stopped, + #network.disconnected { + color: #e2cca9; + background-color: #cc241d; + } + #battery.charging { + background-color: #98971a; + } + #battery.plugged { + background-color: #458588; + } + #pulseaudio.bluetooth { + background-color: #458588; + } + tooltip { + color: #e2cca9; + font-size: 14px; + } + ''; + }; + }; +} diff --git a/home-manager/hosts/nixos-vm-02/desktops/hyprland/waybar/scripts.nix b/home-manager/hosts/nixos-vm-02/desktops/hyprland/waybar/scripts.nix new file mode 100644 index 00000000..86d3b45b --- /dev/null +++ b/home-manager/hosts/nixos-vm-02/desktops/hyprland/waybar/scripts.nix @@ -0,0 +1,26 @@ +{...}: { + home.file = { + ".config/waybar/scripts/tailscale.sh" = { + enable = true; + executable = true; + text = '' + #!/usr/bin/env bash + CLASS=`tailscale status --json | jq -r '.BackendState'` + # Known values: Running, Stopped + + # Expected Output: + # {"text": "$text", "alt": "$alt", "tooltip": "$tooltip", "class": "$class", "percentage": $percentage } + # Different $Class depending on if TS is running or not + if [ $CLASS == "Running" ]; then + IP=`tailscale status --json | jq -r '.TailscaleIPs[0]'` + TOOLTIP="IP: $IP" + printf '{"class": "%s", "tooltip": "%s", "alt": "%s"}\n' "$CLASS" "$TOOLTIP" "$CLASS" + fi + if [ $CLASS == "Stopped" ]; then + TOOLTIP="Tailscale is not running" + printf '{"class": "%s", "tooltip": "%s", "alt": "%s"}\n' "$CLASS" "$TOOLTIP" "$CLASS" + fi + ''; + }; + }; +} \ No newline at end of file