Styles, waybar, timezones

This commit is contained in:
installer 2025-01-24 13:20:01 -08:00
parent d61d707fa2
commit 5c46112d7c
7 changed files with 674 additions and 263 deletions

View File

@ -13,6 +13,7 @@ with lib;
{ {
imports = [ imports = [
./waybar.nix ./waybar.nix
./swaync.nix
]; ];
home-manager.users.${username}.wayland.windowManager.hyprland = { home-manager.users.${username}.wayland.windowManager.hyprland = {
@ -43,7 +44,9 @@ with lib;
exec-once = killall -q waybar;sleep .5 && waybar exec-once = killall -q waybar;sleep .5 && waybar
exec-once = killall -q swaync;sleep .5 && swaync exec-once = killall -q swaync;sleep .5 && swaync
exec-once = nm-applet --indicator exec-once = nm-applet --indicator
exec-once = blueman-applet
exec-once = lxqt-policykit-agent exec-once = lxqt-policykit-agent
exec-once = [workspace special silent] foot
exec-once = sleep 1.5 && swww img /home/${username}/Pictures/Wallpapers/pink-desert.jpeg exec-once = sleep 1.5 && swww img /home/${username}/Pictures/Wallpapers/pink-desert.jpeg
${builtins.toString config.desktop.hostMonitorSettings} ${builtins.toString config.desktop.hostMonitorSettings}
exec-once = ${terminal} exec-once = ${terminal}
@ -101,6 +104,7 @@ with lib;
animation = border, 1, 1, liner animation = border, 1, 1, liner
animation = fade, 1, 10, default animation = fade, 1, 10, default
animation = workspaces, 1, 5, wind animation = workspaces, 1, 5, wind
animation = specialWorkspace, 1, 4, default, slidefadevert 20%
} }
decoration { decoration {
rounding = 10 rounding = 10
@ -120,6 +124,9 @@ with lib;
pseudotile = true pseudotile = true
preserve_split = true preserve_split = true
} }
bind = ${modifier}SHIFT,Q,exit,
bind = ${modifier},ESCAPE,killactive,
bind = ${modifier},GRAVE,toggleSpecialWorkspace
bind = ${modifier},Return,exec,${terminal} bind = ${modifier},Return,exec,${terminal}
bind = ${modifier}SHIFT,Return,exec,rofi-launcher bind = ${modifier}SHIFT,Return,exec,rofi-launcher
bind = ${modifier}SHIFT,W,exec,web-search bind = ${modifier}SHIFT,W,exec,web-search
@ -135,12 +142,10 @@ with lib;
bind = ${modifier}SHIFT,G,exec,godot4 bind = ${modifier}SHIFT,G,exec,godot4
bind = ${modifier},T,exec,thunar bind = ${modifier},T,exec,thunar
bind = ${modifier},M,exec,spotify bind = ${modifier},M,exec,spotify
bind = ${modifier},Q,killactive,
bind = ${modifier},P,pseudo, bind = ${modifier},P,pseudo,
bind = ${modifier}SHIFT,I,togglesplit, bind = ${modifier}SHIFT,I,togglesplit,
bind = ${modifier},F,fullscreen, bind = ${modifier},F,fullscreen,
bind = ${modifier}SHIFT,F,togglefloating, bind = ${modifier}SHIFT,F,togglefloating,
bind = ${modifier}SHIFT,C,exit,
bind = ${modifier}SHIFT,left,movewindow,l bind = ${modifier}SHIFT,left,movewindow,l
bind = ${modifier}SHIFT,right,movewindow,r bind = ${modifier}SHIFT,right,movewindow,r
bind = ${modifier}SHIFT,up,movewindow,u bind = ${modifier}SHIFT,up,movewindow,u

View File

@ -0,0 +1,314 @@
{ config, username, ... }:
{
home-manager.users.${username}.home.file = {
".config/swaync/config.json".text = ''
{
"$schema": "/etc/xdg/swaync/configSchema.json",
"positionX": "right",
"positionY": "top",
"control-center-margin-top": 10,
"control-center-margin-bottom": 10,
"control-center-margin-right": 10,
"control-center-margin-left": 10,
"notification-icon-size": 64,
"notification-body-image-height": 100,
"notification-body-image-width": 200,
"timeout": 10,
"timeout-low": 5,
"timeout-critical": 0,
"fit-to-screen": false,
"control-center-width": 500,
"control-center-height": 1025,
"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": [
"title",
"mpris",
"volume",
"backlight",
"dnd",
"notifications"
],
"widget-config": {
"title": {
"text": "Notification Center",
"clear-all-button": true,
"button-text": "󰆴 Clear All"
},
"dnd": {
"text": "Do Not Disturb"
},
"label": {
"max-lines": 1,
"text": "Notification Center"
},
"mpris": {
"image-size": 96,
"image-radius": 7
},
"volume": {
"label": "󰕾"
},
"backlight": {
"label": "󰃟"
},
}
}
'';
".config/swaync/style.css".text = ''
* {
font-family: JetBrainsMono Nerd Font Mono;
font-weight: bold;
}
.control-center .notification-row:focus,
.control-center .notification-row:hover {
opacity: 0.9;
background: #${config.lib.stylix.colors.base00}
}
.notification-row {
outline: none;
margin: 10px;
padding: 0;
}
.notification {
background: transparent;
padding: 0;
margin: 0px;
}
.notification-content {
background: #${config.lib.stylix.colors.base00};
padding: 10px;
border-radius: 5px;
border: 2px solid #${config.lib.stylix.colors.base0D};
margin: 0;
}
.notification-default-action {
margin: 0;
padding: 0;
border-radius: 5px;
}
.close-button {
background: #${config.lib.stylix.colors.base08};
color: #${config.lib.stylix.colors.base00};
text-shadow: none;
padding: 0;
border-radius: 5px;
margin-top: 5px;
margin-right: 5px;
}
.close-button:hover {
box-shadow: none;
background: #${config.lib.stylix.colors.base0D};
transition: all .15s ease-in-out;
border: none
}
.notification-action {
border: 2px solid #${config.lib.stylix.colors.base0D};
border-top: none;
border-radius: 5px;
}
.notification-default-action:hover,
.notification-action:hover {
color: #${config.lib.stylix.colors.base0B};
background: #${config.lib.stylix.colors.base0B}
}
.notification-default-action {
border-radius: 5px;
margin: 0px;
}
.notification-default-action:not(:only-child) {
border-bottom-left-radius: 7px;
border-bottom-right-radius: 7px
}
.notification-action:first-child {
border-bottom-left-radius: 10px;
background: #${config.lib.stylix.colors.base00}
}
.notification-action:last-child {
border-bottom-right-radius: 10px;
background: #${config.lib.stylix.colors.base00}
}
.inline-reply {
margin-top: 8px
}
.inline-reply-entry {
background: #${config.lib.stylix.colors.base00};
color: #${config.lib.stylix.colors.base05};
caret-color: #${config.lib.stylix.colors.base05};
border: 1px solid #${config.lib.stylix.colors.base09};
border-radius: 5px
}
.inline-reply-button {
margin-left: 4px;
background: #${config.lib.stylix.colors.base00};
border: 1px solid #${config.lib.stylix.colors.base09};
border-radius: 5px;
color: #${config.lib.stylix.colors.base05}
}
.inline-reply-button:disabled {
background: initial;
color: #${config.lib.stylix.colors.base03};
border: 1px solid transparent
}
.inline-reply-button:hover {
background: #${config.lib.stylix.colors.base00}
}
.body-image {
margin-top: 6px;
background-color: #${config.lib.stylix.colors.base05};
border-radius: 5px
}
.summary {
font-size: 16px;
font-weight: 700;
background: transparent;
color: rgba(158, 206, 106, 1);
text-shadow: none
}
.time {
font-size: 16px;
font-weight: 700;
background: transparent;
color: #${config.lib.stylix.colors.base05};
text-shadow: none;
margin-right: 18px
}
.body {
font-size: 15px;
font-weight: 400;
background: transparent;
color: #${config.lib.stylix.colors.base05};
text-shadow: none
}
.control-center {
background: #${config.lib.stylix.colors.base00};
border: 2px solid #${config.lib.stylix.colors.base0C};
border-radius: 5px;
}
.control-center-list {
background: transparent
}
.control-center-list-placeholder {
opacity: .5
}
.floating-notifications {
background: transparent
}
.blank-window {
background: alpha(black, 0)
}
.widget-title {
color: #${config.lib.stylix.colors.base0B};
background: #${config.lib.stylix.colors.base00};
padding: 5px 10px;
margin: 10px 10px 5px 10px;
font-size: 1.5rem;
border-radius: 5px;
}
.widget-title>button {
font-size: 1rem;
color: #${config.lib.stylix.colors.base05};
text-shadow: none;
background: #${config.lib.stylix.colors.base00};
box-shadow: none;
border-radius: 5px;
}
.widget-title>button:hover {
background: #${config.lib.stylix.colors.base08};
color: #${config.lib.stylix.colors.base00};
}
.widget-dnd {
background: #${config.lib.stylix.colors.base00};
padding: 5px 10px;
margin: 10px 10px 5px 10px;
border-radius: 5px;
font-size: large;
color: #${config.lib.stylix.colors.base0B};
}
.widget-dnd>switch {
border-radius: 5px;
/* border: 1px solid #${config.lib.stylix.colors.base0B}; */
background: #${config.lib.stylix.colors.base0B};
}
.widget-dnd>switch:checked {
background: #${config.lib.stylix.colors.base08};
border: 1px solid #${config.lib.stylix.colors.base08};
}
.widget-dnd>switch slider {
background: #${config.lib.stylix.colors.base00};
border-radius: 5px
}
.widget-dnd>switch:checked slider {
background: #${config.lib.stylix.colors.base00};
border-radius: 5px
}
.widget-label {
margin: 10px 10px 5px 10px;
}
.widget-label>label {
font-size: 1rem;
color: #${config.lib.stylix.colors.base05};
}
.widget-mpris {
color: #${config.lib.stylix.colors.base05};
padding: 5px 10px;
margin: 10px 10px 5px 10px;
border-radius: 5px;
}
.widget-mpris > box > button {
border-radius: 5px;
}
.widget-mpris-player {
padding: 5px 10px;
margin: 10px
}
.widget-mpris-title {
font-weight: 700;
font-size: 1.25rem
}
.widget-mpris-subtitle {
font-size: 1.1rem
}
.widget-menubar>box>.menu-button-bar>button {
border: none;
background: transparent
}
.topbar-buttons>button {
border: none;
background: transparent
}
.widget-volume {
background: #${config.lib.stylix.colors.base01};
padding: 5px;
margin: 10px 10px 5px 10px;
border-radius: 5px;
font-size: x-large;
color: #${config.lib.stylix.colors.base05};
}
.widget-volume>box>button {
background: #${config.lib.stylix.colors.base0B};
border: none
}
.per-app-volume {
background-color: #${config.lib.stylix.colors.base00};
padding: 4px 8px 8px;
margin: 0 8px 8px;
border-radius: 5px;
}
.widget-backlight {
background: #${config.lib.stylix.colors.base01};
padding: 5px;
margin: 10px 10px 5px 10px;
border-radius: 5px;
font-size: x-large;
color: #${config.lib.stylix.colors.base05}
}
'';
};
}

View File

@ -12,8 +12,16 @@ let
in in
with lib; with lib;
{ {
# Configure & Theme Waybar # Configure & Theme Waybar
home-manager.users.${username}.programs.waybar = { home-manager.users.${username} = {
home.packages = with pkgs; [
(writeShellScriptBin "task-waybar" ''
sleep 0.1
${pkgs.swaynotificationcenter}/bin/swaync-client -t &
'')
];
programs.waybar = {
enable = true; enable = true;
package = pkgs.waybar; package = pkgs.waybar;
settings = [ settings = [
@ -49,9 +57,10 @@ with lib;
on-scroll-down = "hyprctl dispatch workspace e-1"; on-scroll-down = "hyprctl dispatch workspace e-1";
}; };
"clock" = { "clock" = {
format = if clock24h == true then '' {:L%H:%M}'' else '' {:L%I:%M %p}''; interval = 1;
format = if clock24h == true then '' {:L%H:%M}'' else '' {:L%I:%M:%S %p}'';
tooltip = true; tooltip = true;
tooltip-format = "<big>{:%A, %d.%B %Y }</big>\n<tt><small>{calendar}</small></tt>"; tooltip-format = "<big>{:%A, %d %B %Y }</big>\n<tt><small>{calendar}</small></tt>";
}; };
"hyprland/window" = { "hyprland/window" = {
max-length = 22; max-length = 22;
@ -190,11 +199,11 @@ with lib;
min-height: 0px; min-height: 0px;
} }
window#waybar { window#waybar {
background: rgba(0,0,0,0); background: transparent;
} }
#workspaces { #workspaces {
color: #${config.lib.stylix.colors.base00}; color: #${config.lib.stylix.colors.base00};
background: #${config.lib.stylix.colors.base01}; background: #${config.lib.stylix.colors.base00};
margin: 4px 4px; margin: 4px 4px;
padding: 5px 5px; padding: 5px 5px;
border-radius: 16px; border-radius: 16px;
@ -204,8 +213,8 @@ with lib;
padding: 0px 5px; padding: 0px 5px;
margin: 0px 3px; margin: 0px 3px;
border-radius: 16px; border-radius: 16px;
color: #${config.lib.stylix.colors.base00}; color: #${config.lib.stylix.colors.base0E};
background: linear-gradient(45deg, #${config.lib.stylix.colors.base08}, #${config.lib.stylix.colors.base0D}); background: #${config.lib.stylix.colors.base00};
opacity: 0.5; opacity: 0.5;
transition: ${betterTransition}; transition: ${betterTransition};
} }
@ -214,8 +223,8 @@ with lib;
padding: 0px 5px; padding: 0px 5px;
margin: 0px 3px; margin: 0px 3px;
border-radius: 16px; border-radius: 16px;
color: #${config.lib.stylix.colors.base00}; color: #${config.lib.stylix.colors.base0E};
background: linear-gradient(45deg, #${config.lib.stylix.colors.base08}, #${config.lib.stylix.colors.base0D}); background: #${config.lib.stylix.colors.base00};;
transition: ${betterTransition}; transition: ${betterTransition};
opacity: 1.0; opacity: 1.0;
min-width: 40px; min-width: 40px;
@ -241,8 +250,8 @@ with lib;
margin: 4px 0px; margin: 4px 0px;
margin-left: 7px; margin-left: 7px;
padding: 0px 18px; padding: 0px 18px;
background: #${config.lib.stylix.colors.base04}; color: #${config.lib.stylix.colors.base06};
color: #${config.lib.stylix.colors.base00}; background: #${config.lib.stylix.colors.base02};
border-radius: 24px 10px 24px 10px; border-radius: 24px 10px 24px 10px;
} }
#custom-startmenu { #custom-startmenu {
@ -256,8 +265,8 @@ with lib;
#custom-hyprbindings, #network, #battery, #custom-hyprbindings, #network, #battery,
#custom-notification, #tray, #custom-exit { #custom-notification, #tray, #custom-exit {
font-weight: bold; font-weight: bold;
background: #${config.lib.stylix.colors.base0F}; color: #${config.lib.stylix.colors.base0D};
color: #${config.lib.stylix.colors.base00}; background: #${config.lib.stylix.colors.base02};
margin: 4px 0px; margin: 4px 0px;
margin-right: 7px; margin-right: 7px;
border-radius: 10px 24px 10px 24px; border-radius: 10px 24px 10px 24px;
@ -265,8 +274,8 @@ with lib;
} }
#clock { #clock {
font-weight: bold; font-weight: bold;
color: #0D0E15; color: #${config.lib.stylix.colors.base0B};
background: linear-gradient(90deg, #${config.lib.stylix.colors.base0E}, #${config.lib.stylix.colors.base0C}); background: #${config.lib.stylix.colors.base02};
margin: 0px; margin: 0px;
padding: 0px 15px 0px 30px; padding: 0px 15px 0px 30px;
border-radius: 0px 0px 0px 40px; border-radius: 0px 0px 0px 40px;
@ -274,4 +283,5 @@ with lib;
'' ''
]; ];
}; };
};
} }

View File

@ -1,5 +1,6 @@
{ {
lib, lib,
pkgs,
config, config,
username, username,
... ...
@ -27,5 +28,32 @@ in
useDHCP = lib.mkDefault true; useDHCP = lib.mkDefault true;
wireguard.enable = true; wireguard.enable = true;
}; };
# Fix for automatic-timezoned not working currently (Jan 2025)
systemd.services.set-timezone = {
description = "Kludgily set the timezone based on IP, with an API request to some sketchasaurus website.";
after = [ "network-online.target" ];
wants = [ "network-online.target" ];
serviceConfig = {
Type = "oneshot";
ExecStart = "${pkgs.writeShellScript "set-timezone.sh" ''
IP=$(${pkgs.curl}/bin/curl -s https://api.ipify.org)
/run/current-system/sw/bin/logger "Got IP $IP."
${pkgs.curl}/bin/curl "https://api.ipgeolocation.io/timezone?apiKey=2309807339f84c26a2cb8cb44c31e183&ip=$IP" > /tmp/tz
TZ=$(${pkgs.jq}/bin/jq -r .timezone < /tmp/tz)
timedatectl set-timezone $TZ
/run/current-system/sw/bin/logger "Set timezone to $TZ."
''}";
Restart = "no";
StandardOutput = "journal";
StandardError = "journal";
};
};
}; };
} }

View File

@ -20,12 +20,47 @@ in
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
stylix = { stylix = {
enable = true; enable = true;
image = ./wallpapers/mountainscapedark.jpg;
base16Scheme = "${pkgs.base16-schemes}/share/themes/catppuccin-mocha.yaml";
autoEnable = true; autoEnable = true;
image = ./wallpapers/biking-sunset.jpg;
base16Scheme = "${pkgs.base16-schemes}/share/themes/catppuccin-mocha.yaml";
opacity.terminal = 0.8;
cursor.package = pkgs.bibata-cursors;
cursor.name = "Bibata-Modern-Ice";
cursor.size = 24;
fonts = {
monospace = {
package = pkgs.nerd-fonts.jetbrains-mono;
name = "JetBrainsMono Nerd Font Mono";
};
sansSerif = {
package = pkgs.montserrat;
name = "Montserrat";
};
serif = {
package = pkgs.montserrat;
name = "Montserrat";
};
sizes = {
applications = 12;
terminal = 15;
desktop = 11;
popups = 12;
};
};
};
fonts = {
packages = with pkgs; [
noto-fonts-emoji
noto-fonts-cjk-sans
font-awesome
material-icons
];
}; };
home-manager.users.${username}.stylix = { home-manager.users.${username}.stylix = {
targets.kitty.enable = true; targets = {
kitty.enable = true;
foot.enable = true;
};
autoEnable = true; autoEnable = true;
}; };

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

View File

@ -47,11 +47,10 @@ in
hardware = { hardware = {
bluetooth = { bluetooth = {
enable = true; enable = true;
powerOnBoot = true;
settings = { settings = {
General = { General = {
AutoEnable = false; AutoEnable = true;
ControllerMode = "bredr";
Experimental = "true";
}; # https://reddit.com/r/NixOS/comments/1aoteqb/keychron_k1_pro_bluetooth_nixos_wkde_install/kq49q9r/?context=3 }; # https://reddit.com/r/NixOS/comments/1aoteqb/keychron_k1_pro_bluetooth_nixos_wkde_install/kq49q9r/?context=3
}; };
}; };
@ -70,6 +69,7 @@ in
# interval = "weekly"; # interval = "weekly";
# }; # };
# }; # };
blueman.enable = true;
devmon.enable = true; devmon.enable = true;
fwupd.enable = true; fwupd.enable = true;
geoclue2 = { geoclue2 = {
@ -82,7 +82,17 @@ in
enable = true; enable = true;
}; };
}; };
# NixOS system programs
programs = {
thunar = {
enable = true;
plugins = with pkgs.xfce; [
thunar-archive-plugin
thunar-volman
];
};
foot.enable = true;
};
home-manager.users.${username} = home-manager.users.${username} =
{ {
pkgs, pkgs,
@ -91,10 +101,19 @@ in
... ...
}: }:
{ {
programs.kitty.enable = true; # Home-manager programs
programs = {
kitty.enable = true;
};
home.packages = with pkgs; [ home.packages = with pkgs; [
# GUI Apps
firefox firefox
filezilla filezilla
spotify
# Utilities
networkmanagerapplet
swaynotificationcenter
]; ];
xdg = { xdg = {
mimeApps = mimeApps =