Compare commits

..

No commits in common. "2ac966be4984552638bf136ec20d758bff63b152" and "75728e1b810516d884a24e8ac5d3629fec968063" have entirely different histories.

17 changed files with 588 additions and 972 deletions

View file

@ -14,6 +14,17 @@
dpi-aware = "auto";
font = "monospace:size=14";
};
colors = let
inherit (osConfig.theme.scheme) palette;
in {
background = "${palette.base00}ff";
text = "${palette.base05}ff";
input = "${palette.base05}ff";
selection = "${palette.base02}ff";
selection-text = "${palette.base07}ff";
selection-match = "${palette.base0D}ff";
border = "${palette.base0E}ff";
};
border.width = 5;
};
};

View file

@ -1,8 +1,18 @@
{
pkgs,
config,
osConfig,
lib,
...
}: {
}: let
isDark = osConfig.theme.scheme.variant == "dark";
in {
home.pointerCursor = {
inherit (osConfig.theme.cursorTheme) name package size;
gtk.enable = true;
x11.enable = true;
};
gtk = {
enable = true;
@ -14,6 +24,7 @@
gtk3.extraConfig = {
gtk-decoration-layout = ":menu";
gtk-application-prefer-dark-theme = isDark;
};
gtk4.extraConfig = {
@ -21,5 +32,21 @@
};
gtk2.configLocation = "${config.xdg.configHome}/gtk-2.0/gtkrc";
iconTheme = {
inherit (osConfig.theme.gtk.iconTheme) name package;
};
theme = lib.mkIf (!osConfig.services.xserver.desktopManager.gnome.enable) {
inherit (osConfig.theme.gtk.theme) name package;
};
};
dconf.settings = {
"org/gnome/desktop/interface" = {
color-scheme =
if isDark
then "prefer-dark"
else "default";
};
};
}

View file

@ -1,17 +1,68 @@
_: {
{
osConfig,
lib,
lib',
...
}: let
inherit (osConfig.theme.scheme) palette;
inherit (lib) mkIf mkMerge;
inherit (lib') rgba;
in {
programs.zathura = {
enable = true;
options = {
font = "Inter 12";
selection-notification = true;
options = mkMerge [
{
font = "Inter 12";
selection-notification = true;
selection-clipboard = "clipboard";
adjust-open = "best-fit";
pages-per-row = "1";
scroll-page-aware = "true";
scroll-full-overlap = "0.01";
scroll-step = "100";
zoom-min = "10";
};
selection-clipboard = "clipboard";
adjust-open = "best-fit";
pages-per-row = "1";
scroll-page-aware = "true";
scroll-full-overlap = "0.01";
scroll-step = "100";
zoom-min = "10";
}
(mkIf osConfig.theme.enable {
default-fg = palette.base05;
default-bg = palette.base00;
completion-bg = palette.base02;
completion-fg = palette.base05;
completion-highlight-bg = palette.base03;
completion-highlight-fg = palette.base05;
completion-group-bg = palette.base02;
completion-group-fg = palette.base0D;
statusbar-fg = palette.base05;
statusbar-bg = palette.base02;
notification-bg = palette.base02;
notification-fg = palette.base05;
notification-error-bg = palette.base02;
notification-error-fg = palette.base08;
notification-warning-bg = palette.base02;
notification-warning-fg = palette.base0A;
inputbar-fg = palette.base05;
inputbar-bg = palette.base02;
recolor = true;
recolor-lightcolor = palette.base00;
recolor-darkcolor = palette.base05;
index-fg = palette.base05;
index-bg = palette.base00;
index-active-fg = palette.base05;
index-active-bg = palette.base02;
render-loading-bg = palette.base00;
render-loading-fg = palette.base05;
highlight-color = rgba lib palette.base03 ".5";
highlight-fg = rgba lib palette.base0E ".5";
highlight-active-color = rgba lib palette.base0E ".5";
})
];
};
}

View file

@ -2,8 +2,11 @@
lib,
pkgs,
config,
osConfig,
...
}: {
}: let
inherit (lib) mkMerge mkIf;
in {
imports = [./binds.nix];
xdg.portal = {
@ -19,78 +22,85 @@
};
};
programs.niri = {
settings = {
input = {
power-key-handling.enable = false;
keyboard.xkb = {
layout = "us";
options = "compose:ralt";
};
};
prefer-no-csd = true;
hotkey-overlay.skip-at-startup = true;
layout = {
focus-ring = {
enable = true;
};
always-center-single-column = true;
};
# https://github.com/sodiboo/system/blob/2978f4d79c51a5bd7e38a9cd75e3ec9046aa7e75/niri.mod.nix#L418-L434
outputs = let
cfg = config.programs.niri.settings.outputs;
in {
"HDMI-A-1" = {
mode = {
width = 1920;
height = 1080;
refresh = 60.0;
programs.niri = mkMerge [
{
settings = {
input = {
power-key-handling.enable = false;
keyboard.xkb = {
layout = "us";
options = "compose:ralt";
};
position.x = -cfg."HDMI-A-1".mode.width;
position.y = 0;
};
"DP-1" = {
mode = {
width = 2560;
height = 1440;
refresh = 144.0;
prefer-no-csd = true;
hotkey-overlay.skip-at-startup = true;
layout = {
focus-ring = {
enable = true;
};
position.x = 0;
position.y = 0;
always-center-single-column = true;
};
# https://github.com/sodiboo/system/blob/2978f4d79c51a5bd7e38a9cd75e3ec9046aa7e75/niri.mod.nix#L418-L434
outputs = let
cfg = config.programs.niri.settings.outputs;
in {
"HDMI-A-1" = {
mode = {
width = 1920;
height = 1080;
refresh = 60.0;
};
position.x = -cfg."HDMI-A-1".mode.width;
position.y = 0;
};
"DP-1" = {
mode = {
width = 2560;
height = 1440;
refresh = 144.0;
};
position.x = 0;
position.y = 0;
};
};
window-rules = [
{
draw-border-with-background = false;
geometry-corner-radius = let
r = 8.0;
in {
top-left = r;
top-right = r;
bottom-left = r;
bottom-right = r;
};
clip-to-geometry = true;
}
{
matches = [
{app-id = "foot";}
];
default-column-width = {proportion = 0.5;};
}
];
environment = {
"NIXOS_OZONE_WL" = "1";
"DISPLAY" = ":0";
"_JAVA_AWT_WM_NONREPARENTING" = "1"; # https://wiki.archlinux.org/title/Sway#Java_applications
};
};
window-rules = [
{
draw-border-with-background = false;
geometry-corner-radius = let
r = 8.0;
in {
top-left = r;
top-right = r;
bottom-left = r;
bottom-right = r;
};
clip-to-geometry = true;
}
{
matches = [
{app-id = "foot";}
];
default-column-width = {proportion = 0.5;};
}
];
environment = {
"NIXOS_OZONE_WL" = "1";
"DISPLAY" = ":0";
"_JAVA_AWT_WM_NONREPARENTING" = "1"; # https://wiki.archlinux.org/title/Sway#Java_applications
};
};
};
}
(mkIf osConfig.theme.enable (let
inherit (osConfig.theme.scheme) palette;
in {
settings.layout.focus-ring.active.color = palette.base0E;
}))
];
# copied from https://github.com/linyinfeng/dotfiles/blob/c00fe3b1562ad947672863a43e455bc2f01a56b6/home-manager/profiles/niri/default.nix#L594-L611
systemd.user.services.xwayland-satellite = {

View file

@ -0,0 +1,37 @@
{
inputs,
config,
pkgs,
...
}: {
imports = [
inputs.plasma-manager.homeManagerModules.plasma-manager
];
rograms.plasma = {
enable = true;
workspace = {
lookAndFeel = "org.kde.breezedark.desktop";
inherit (config.theme) wallpaper;
};
input = {
touchpads = [
{
enable = true;
naturalScroll = true;
vendorId = "093a";
productId = "0274";
name = "PIXA3854:00 093A:0274 Touchpad";
}
];
keyboard = {
options = [
"compose:ralt"
];
};
};
};
home.packages = with pkgs; [
qalculate-qt
];
}

View file

@ -1,24 +1,64 @@
{pkgs, ...}: {
{
pkgs,
osConfig,
lib,
...
}: let
inherit (lib) mkMerge mkIf;
in {
# requires `security.pam.services.swaylock = { };` at the system level or else
# unlock will not work.
programs.swaylock = {
enable = true;
package = pkgs.swaylock-effects;
settings = {
clock = true;
timestr = "%H:%M";
settings = mkMerge [
{
clock = true;
timestr = "%H:%M";
indicator = true;
indicator-radius = 111;
indicator-thickness = 9;
indicator = true;
indicator-radius = 111;
indicator-thickness = 9;
screenshots = true;
effect-blur = "7x5";
effect-vignette = "0.75:0.75";
effect-pixelate = 5;
screenshots = true;
effect-blur = "7x5";
effect-vignette = "0.75:0.75";
effect-pixelate = 5;
ignore-empty-password = false; # needed for PAM to work with fprintd / password
};
ignore-empty-password = false; # needed for PAM to work with fprintd / password
}
(mkIf
osConfig.theme.enable
(let
inherit (osConfig.theme.scheme) palette;
in {
inside-color = palette.base01;
inside-clear-color = palette.base0C;
inside-caps-lock-color = palette.base09;
inside-ver-color = palette.base0D;
inside-wrong-color = palette.base08;
key-hl-color = palette.base0B;
layout-bg-color = palette.base00;
layout-border-color = palette.base05;
layout-text-color = palette.base07;
line-color = palette.base00;
line-clear-color = palette.base0C;
line-caps-lock-color = palette.base09;
line-ver-color = palette.base0D;
line-wrong-color = palette.base08;
ring-color = palette.base02;
ring-clear-color = palette.base0C;
ring-caps-lock-color = palette.base09;
ring-ver-color = palette.base0D;
ring-wrong-color = palette.base08;
separator-color = palette.base02;
text-color = palette.base07;
text-clear-color = palette.base04;
text-caps-lock-color = palette.base04;
text-ver-color = palette.base04;
text-wrong-color = palette.base04;
}))
];
};
}

View file

@ -1,174 +1,152 @@
{
osConfig,
pkgs,
lib,
osConfig,
config,
...
}: let
inherit (lib) getExe mkMerge mkIf;
inherit (builtins) readFile;
inherit (lib) getExe;
in {
imports = [./style.nix];
programs.waybar = {
enable = true;
systemd.enable = true;
style = readFile ./style.css;
settings = {
mainBar = mkMerge [
{
layer = "top";
position = "top";
height = 30;
mainBar = {
layer = "top";
position = "top";
height = 30;
margin-top = 6;
margin-left = 6;
margin-right = 6;
margin-bottom = 0;
margin-top = 6;
margin-left = 6;
margin-right = 6;
margin-bottom = 0;
modules-left = ["niri/workspaces" "niri/window"];
modules-center = ["group/clock"];
modules-right =
["tray" "group/status" "group/power"]
++ lib.optional config.services.swaync.enable "custom/notification";
modules-left = ["niri/workspaces" "niri/window"];
modules-center = ["group/clock"];
modules-right = ["tray" "group/status" "group/power"];
battery = {
interval = 10;
states = {
warning = 30;
critical = 15;
};
format = "{icon} {capacity}%";
format-charging = " {capacity}% - {time}";
format-full = " {capacity}% - Full";
format-icons = [
""
""
""
""
""
];
max-length = 25;
battery = {
interval = 10;
states = {
warning = 30;
critical = 15;
};
format = "{icon} {capacity}%";
format-charging = " {capacity}% - {time}";
format-full = " {capacity}% - Full";
format-icons = [
""
""
""
""
""
];
max-length = 25;
};
"pulseaudio" = {
format = "{icon} {volume}%";
format-bluetooth = "{icon} {volume}%";
format-muted = " ";
format-icons = {
"alsa_output.pci-0000_00_1f.3.analog-stereo" = "";
"alsa_output.pci-0000_00_1f.3.analog-stereo-muted" = "";
headphone = "";
hands-free = "";
headset = "";
phone = "";
phone-muted = "";
portable = "";
car = "";
default = [
""
""
];
};
scroll-step = 1;
on-click = "pavucontrol";
ignored-sinks = [
"Easy Effects Sink"
"niri/window" = {
icon = true;
};
"pulseaudio" = {
format = "{icon} {volume}%";
format-bluetooth = "{icon} {volume}%";
format-muted = " ";
format-icons = {
"alsa_output.pci-0000_00_1f.3.analog-stereo" = "";
"alsa_output.pci-0000_00_1f.3.analog-stereo-muted" = "";
headphone = "";
hands-free = "";
headset = "";
phone = "";
phone-muted = "";
portable = "";
car = "";
default = [
""
""
];
};
scroll-step = 1;
on-click = "pavucontrol";
ignored-sinks = [
"Easy Effects Sink"
];
};
"power-profiles-daemon" = {
format-icons = {
default = "";
performance = "";
balanced = "";
power-saver = "";
};
"power-profiles-daemon" = {
format-icons = {
default = "";
performance = "";
balanced = "";
power-saver = "";
};
};
"group/status" = {
orientation = "inherit";
modules = [
"pulseaudio"
"power-profiles-daemon"
"network"
"battery"
];
};
"group/status" = {
orientation = "inherit";
modules = [
"pulseaudio"
"power-profiles-daemon"
"network"
"battery"
];
};
"group/power" = {
orientation = "inherit";
modules = [
"custom/power"
];
};
"group/power" = {
orientation = "inherit";
modules = [
"custom/power"
];
};
"group/clock" = {
orientation = "inherit";
modules = [
"clock#time"
"clock#date"
];
};
"group/clock" = {
orientation = "inherit";
modules = [
"clock#time"
"clock#date"
];
};
"custom/power" = {
format = "";
tooltip = false;
on-click = getExe pkgs.wlogout;
};
"custom/power" = {
format = "";
tooltip = false;
on-click = getExe pkgs.wlogout;
};
"clock#date" = {
format = "{:%D}";
tooltip-format = "<tt><big>{calendar}</big></tt>";
};
"clock#date" = {
format = "{:%D}";
tooltip-format = "<tt><big>{calendar}</big></tt>";
};
"clock#time" = {
format = "{:%H:%M}";
tooltip-format = "{tz_list}";
timezones = [
osConfig.time.timeZone
"US/Eastern"
];
};
"clock#time" = {
format = "{:%H:%M}";
tooltip-format = "{tz_list}";
timezones = [
osConfig.time.timeZone
"US/Eastern"
];
};
network = {
interface = "wlp1s0";
format = "{ifname}";
format-wifi = "{icon}";
format-ethernet = "{ipaddr}/{cidr} 󰊗";
format-disconnected = "";
tooltip-format = "{ifname} via {gwaddr} 󰊗";
tooltip-format-wifi = "{essid} ({signalStrength}%)";
tooltip-format-ethernet = "{ifname} ";
tooltip-format-disconnected = "Disconnected";
max-length = 50;
format-icons = [
"󰤟"
"󰤢"
"󰤥"
"󰤨"
];
};
}
(mkIf osConfig.programs.niri.enable {
"niri/window" = {
icon = true;
};
})
(mkIf config.services.swaync.enable {
"custom/notification" = {
tooltip = false;
format = "{icon}";
format-icons = {
notification = "󱅫";
none = "󰂚";
dnd-notification = "󱏧";
dnd-none = "󱏧";
};
return-type = "json";
exec = "swaync-client -swb";
on-click = "swaync-client -t -sw";
};
})
];
network = {
interface = "wlp1s0";
format = "{ifname}";
format-wifi = "{icon}";
format-ethernet = "{ipaddr}/{cidr} 󰊗";
format-disconnected = "";
tooltip-format = "{ifname} via {gwaddr} 󰊗";
tooltip-format-wifi = "{essid} ({signalStrength}%)";
tooltip-format-ethernet = "{ifname} ";
tooltip-format-disconnected = "Disconnected";
max-length = 50;
format-icons = [
"󰤟"
"󰤢"
"󰤥"
"󰤨"
];
};
};
};
};

View file

@ -1,91 +0,0 @@
* {
/* `otf-font-awesome` is required to be installed for icons */
border: none;
border-radius: 0px;
min-height: 0;
}
window#waybar {
border-radius: 2em;
font-family: "Symbols Nerd Font", Inter, sans-serif;
font-size: 16px;
font-style: normal;
background: alpha(
@base00,
0.9999999
); /* niri issue workaround, thanks https://github.com/oatmealine/nix-config/blob/bfdddd2cb36ef659bcddc28e0dbb542b6db8b3bc/modules/desktop/themes/catppuccin/waybar.css#L14 */
color: @base05;
}
#workspaces,
.modules-right box {
background: @base02;
padding: 0.15em 0.25em;
border-radius: 1em;
margin: 0 0.25em;
}
#workspaces {
padding: 0;
background: @base02;
}
#workspaces button:nth-child(1) {
border-top-left-radius: 1em;
border-bottom-left-radius: 1em;
}
#workspaces button:nth-last-child(1) {
border-top-right-radius: 1em;
border-bottom-right-radius: 1em;
}
#workspaces button {
padding: 0 0.5em;
background-color: transparent;
}
#workspaces button:hover {
background: rgba(255, 255, 255, 0.1);
box-shadow: none;
}
#workspaces button.active {
background: @base0E;
color: @base02;
}
#workspaces button.urgent {
background: @base08;
}
#window {
margin-left: 1em;
}
.modules-left,
.modules-right {
margin: 0.4em 0.5em;
}
#battery,
#clock,
#network,
#pulseaudio,
#tray,
#power-profiles-daemon {
padding: 0 0.5em;
}
.modules-left,
.modules-right {
margin: 0.4em 0.5em;
}
#custom-power {
padding: 0 1.2em;
color: @base08;
}
#custom-notification {
padding: 0 1.2em;
}

View file

@ -0,0 +1,106 @@
{
lib,
osConfig,
...
}: let
inherit (osConfig.theme.scheme) palette;
inherit (lib) mapAttrsToList concatLines optionalString;
generateGtkColors = palette: (concatLines
(mapAttrsToList
(name: color: "@define-color ${name} ${color};")
palette));
in {
programs.waybar.style =
optionalString osConfig.theme.enable generateGtkColors palette
+ ''
* {
/* `otf-font-awesome` is required to be installed for icons */
border: none;
border-radius: 0px;
min-height: 0;
}
window#waybar {
border-radius: 2em;
font-family: "Symbols Nerd Font", Inter, sans-serif;
font-size: 16px;
font-style: normal;
background: alpha(
@base00,
0.9999999
); /* niri issue workaround, thanks https://github.com/oatmealine/nix-config/blob/bfdddd2cb36ef659bcddc28e0dbb542b6db8b3bc/modules/desktop/themes/catppuccin/waybar.css#L14 */
color: @base05;
}
#workspaces,
.modules-right box {
background: @base02;
padding: 0.15em 0.25em;
border-radius: 1em;
margin: 0 0.25em;
}
#workspaces {
padding: 0;
background: @base02;
}
#workspaces button:nth-child(1) {
border-top-left-radius: 1em;
border-bottom-left-radius: 1em;
}
#workspaces button:nth-last-child(1) {
border-top-right-radius: 1em;
border-bottom-right-radius: 1em;
}
#workspaces button {
padding: 0 0.5em;
background-color: transparent;
}
#workspaces button:hover {
background: rgba(255, 255, 255, 0.1);
box-shadow: none;
}
#workspaces button.active {
background: @base0E;
color: @base02;
}
#workspaces button.urgent {
background: @base08;
}
#window {
margin-left: 1em;
}
.modules-left,
.modules-right {
margin: 0.4em 0.5em;
}
#battery,
#clock,
#network,
#pulseaudio,
#tray,
#power-profiles-daemon {
padding: 0 0.5em;
}
.modules-left,
.modules-right {
margin: 0.4em 0.5em;
}
#custom-power {
padding: 0 1.2em;
color: @base08;
}
'';
}

View file

@ -1,33 +0,0 @@
{
osConfig,
lib,
lib',
...
}: let
inherit (lib) optionalString;
inherit (builtins) readFile;
in {
services.swaync = {
enable = true;
style = readFile ./style.css;
settings = {
positionX = "right";
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;
};
};
# systemd.user.services.swaync.Service.Environment = "WAYLAND_DISPLAY=wayland-1";
systemd.user.services.swaync.Unit.ConditionEnvironment = lib.mkForce "";
}

View file

@ -1,450 +0,0 @@
* {
all: unset;
font-size: 14px;
font-family: "Ubuntu Nerd Font";
transition:
background 200ms,
border-radius 200ms; /* exclude color from transition so it looks more natural */
}
trough highlight {
background: @base05;
}
scale trough {
margin: 0rem 1rem;
background-color: @base02;
min-height: 8px;
min-width: 70px;
}
slider {
background-color: @base0D;
}
.floating-notifications.background .notification-row .notification-background {
box-shadow:
0 0 8px 0 rgba(0, 0, 0, 0.8),
inset 0 0 0 1px @base02;
border-radius: 12.6px;
margin: 18px;
background-color: @base00;
color: @base05;
padding: 0;
}
.floating-notifications.background
.notification-row
.notification-background
.notification {
padding: 7px;
border-radius: 12.6px;
}
.floating-notifications.background
.notification-row
.notification-background
.notification.critical {
box-shadow: inset 0 0 7px 0 @base08;
}
.floating-notifications.background
.notification-row
.notification-background
.notification
.notification-content {
margin: 7px;
}
.floating-notifications.background
.notification-row
.notification-background
.notification
.notification-content
.summary {
color: @base05;
}
.floating-notifications.background
.notification-row
.notification-background
.notification
.notification-content
.time {
color: @base03;
}
.floating-notifications.background
.notification-row
.notification-background
.notification
.notification-content
.body {
color: @base05;
}
.floating-notifications.background
.notification-row
.notification-background
.notification
> *:last-child
> * {
min-height: 3.4em;
}
.floating-notifications.background
.notification-row
.notification-background
.notification
> *:last-child
> *
.notification-action {
border-radius: 7px;
color: @base05;
background-color: @base02;
box-shadow: inset 0 0 0 1px @base03;
margin: 7px;
}
.floating-notifications.background
.notification-row
.notification-background
.notification
> *:last-child
> *
.notification-action:hover {
box-shadow: inset 0 0 0 1px @base03;
background-color: @base02;
color: @base05;
}
.floating-notifications.background
.notification-row
.notification-background
.notification
> *:last-child
> *
.notification-action:active {
box-shadow: inset 0 0 0 1px @base03;
background-color: @base0C;
color: @base05;
}
.floating-notifications.background
.notification-row
.notification-background
.close-button {
margin: 7px;
padding: 2px;
border-radius: 6.3px;
color: @base00;
background-color: @base08;
}
.floating-notifications.background
.notification-row
.notification-background
.close-button:hover {
background-color: @base08;
color: @base00;
}
.floating-notifications.background
.notification-row
.notification-background
.close-button:active {
background-color: @base08;
color: @base00;
}
.control-center {
box-shadow:
0 0 8px 0 rgba(0, 0, 0, 0.8),
inset 0 0 0 1px @base02;
border-radius: 12.6px;
margin: 18px;
background-color: @base00;
color: @base05;
padding: 14px;
}
.control-center .widget-title > label {
color: @base05;
font-size: 1.3em;
}
.control-center .widget-title button {
border-radius: 7px;
color: @base05;
background-color: @base02;
box-shadow: inset 0 0 0 1px @base03;
padding: 8px;
}
.control-center .widget-title button:hover {
box-shadow: inset 0 0 0 1px @base03;
background-color: @base04;
color: @base05;
}
.control-center .widget-title button:active {
box-shadow: inset 0 0 0 1px @base03;
background-color: @base0C;
color: @base00;
}
.control-center .notification-row .notification-background {
border-radius: 7px;
color: @base05;
background-color: @base02;
box-shadow: inset 0 0 0 1px @base03;
margin-top: 14px;
}
.control-center .notification-row .notification-background .notification {
padding: 7px;
border-radius: 7px;
}
.control-center
.notification-row
.notification-background
.notification.critical {
box-shadow: inset 0 0 7px 0 @base08;
}
.control-center
.notification-row
.notification-background
.notification
.notification-content {
margin: 7px;
}
.control-center
.notification-row
.notification-background
.notification
.notification-content
.summary {
color: @base05;
}
.control-center
.notification-row
.notification-background
.notification
.notification-content
.time {
color: @base03;
}
.control-center
.notification-row
.notification-background
.notification
.notification-content
.body {
color: @base05;
}
.control-center
.notification-row
.notification-background
.notification
> *:last-child
> * {
min-height: 3.4em;
}
.control-center
.notification-row
.notification-background
.notification
> *:last-child
> *
.notification-action {
border-radius: 7px;
color: @base05;
background-color: @base00;
box-shadow: inset 0 0 0 1px @base03;
margin: 7px;
}
.control-center
.notification-row
.notification-background
.notification
> *:last-child
> *
.notification-action:hover {
box-shadow: inset 0 0 0 1px @base03;
background-color: @base02;
color: @base05;
}
.control-center
.notification-row
.notification-background
.notification
> *:last-child
> *
.notification-action:active {
box-shadow: inset 0 0 0 1px @base03;
background-color: @base0C;
color: @base05;
}
.control-center .notification-row .notification-background .close-button {
margin: 7px;
padding: 2px;
border-radius: 6.3px;
color: @base00;
background-color: @base08;
}
.control-center .notification-row .notification-background .close-button:hover {
background-color: @base08;
color: @base00;
}
.control-center
.notification-row
.notification-background
.close-button:active {
background-color: @base08;
color: @base00;
}
.control-center .notification-row .notification-background:hover {
box-shadow: inset 0 0 0 1px @base03;
background-color: @base04;
color: @base05;
}
.control-center .notification-row .notification-background:active {
box-shadow: inset 0 0 0 1px @base03;
background-color: @base0C;
color: @base05;
}
.notification.critical progress {
background-color: @base08;
}
.notification.low progress,
.notification.normal progress {
background-color: @base0D;
}
.control-center-dnd {
margin-top: 5px;
border-radius: 8px;
background: @base02;
border: 1px solid @base03;
box-shadow: none;
}
.control-center-dnd:checked {
background: @base0C;
}
.control-center-dnd slider {
background: @base0C;
border-radius: 8px;
}
.widget-dnd {
margin: 0px;
font-size: 1.1rem;
}
.widget-dnd > switch {
font-size: initial;
border-radius: 8px;
background: @base02;
border: 1px solid @base03;
box-shadow: none;
}
.widget-dnd > switch:checked {
background: @base0C;
color: @base00;
}
.widget-dnd > switch slider {
background: @base03;
border-radius: 8px;
border: 1px solid @base03;
}
.widget-mpris .widget-mpris-player {
background: @base02;
padding: 7px;
}
.widget-mpris .widget-mpris-title {
font-size: 1.2rem;
}
.widget-mpris .widget-mpris-subtitle {
font-size: 0.8rem;
}
.widget-menubar > box > .menu-button-bar > button > label {
font-size: 3rem;
padding: 0.5rem 2rem;
}
.widget-menubar > box > .menu-button-bar > :last-child {
color: @base08;
}
.power-buttons button:hover,
.powermode-buttons button:hover,
.screenshot-buttons button:hover {
background: @base02;
}
.control-center .widget-label > label {
color: @base05;
font-size: 2rem;
}
.widget-buttons-grid {
padding-top: 1rem;
}
.widget-buttons-grid > flowbox > flowboxchild > button label {
font-size: 2.5rem;
}
.widget-volume {
padding-top: 1rem;
}
.widget-volume label {
font-size: 1.5rem;
color: @base0C;
}
.widget-volume trough highlight {
background: @base0C;
}
.widget-backlight trough highlight {
background: @base0A;
}
.widget-backlight label {
font-size: 1.5rem;
color: @base0A;
}
.widget-backlight .KB {
padding-bottom: 1rem;
}
.image {
padding-right: 0.5rem;
}

View file

@ -4,6 +4,7 @@
lib,
...
}: let
inherit (lib) mkIf;
in {
programs.foot = {
enable = true;
@ -13,6 +14,33 @@ in {
font = "monospace:size=14";
shell = "${lib.getExe config.programs.fish.package}";
};
colors = mkIf osConfig.theme.enable (let
inherit (lib) mapAttrs;
inherit (lib.strings) removePrefix;
# because someone thought this was a great idea: https://github.com/tinted-theming/schemes/commit/61058a8d2e2bd4482b53d57a68feb56cdb991f0b
palette = mapAttrs (_: color: removePrefix "#" color) osConfig.theme.scheme.palette;
in {
background = palette.base00;
foreground = palette.base05;
regular0 = palette.base01;
regular1 = palette.base08;
regular2 = palette.base0B;
regular3 = palette.base0A;
regular4 = palette.base0D;
regular5 = palette.base0E;
regular6 = palette.base0C;
regular7 = palette.base06;
bright0 = palette.base02;
bright1 = palette.base08;
bright2 = palette.base0B;
bright3 = palette.base0A;
bright4 = palette.base0D;
bright5 = palette.base0E;
bright6 = palette.base0C;
bright7 = palette.base07;
});
};
};
}

View file

@ -1,4 +1,8 @@
_: {
{
config,
inputs,
...
}: {
programs.gnome-terminal = {
enable = true;
showMenubar = true;
@ -10,6 +14,14 @@ _: {
boldIsBright = true;
visibleName = "default";
font = "Intel One Mono 14";
colors = let
inherit (inputs.basix.schemeData.base16.${config.theme.scheme}) palette;
in {
backgroundColor = "#${palette.base00}";
foregroundColor = builtins.trace "#${palette.base05}" "#${palette.base05}";
palette = builtins.attrValues (builtins.mapAttrs (_: color: "#${color}") palette);
};
};
};
};

View file

@ -0,0 +1,37 @@
{
config,
inputs,
pkgs,
...
}: {
programs.konsole = let
inherit (config.theme) scheme;
schemeData = inputs.basix.schemeData.base16.${scheme};
in {
enable = true;
defaultProfile = "default";
profiles = {
default = {
font = {
name = "monospace";
size = 14;
};
colorScheme = schemeData.name;
};
};
extraConfig = {
"MainWindow" = {
"MenuBar" = "Disabled";
"ToolBarsMovable" = "Disabled";
};
"KonsoleWindow" = {
"ShowMenuBarByDefault" = "false";
};
};
customColorSchemes = {
"${schemeData.name}" = pkgs.lib.mkKonsoleColorScheme schemeData;
};
};
}

View file

@ -35,7 +35,6 @@ in {
"${home}/programs/niri"
"${home}/programs/waybar"
"${home}/services/swaync"
"${home}/programs/fuzzel.nix"
"${home}/programs/swaybg.nix"
"${home}/programs/swaylock.nix"

View file

@ -50,11 +50,6 @@ let
''
magick ${path} -gaussian-blur 0x12 "$out"
'';
generateGtkColors = lib: palette: (lib.concatLines
(lib.mapAttrsToList
(name: color: "@define-color ${name} ${color};")
palette));
in {
inherit blurImage generateGtkColors rgba;
inherit blurImage rgba;
}

View file

@ -2,13 +2,11 @@
inputs,
config,
lib,
lib',
pkgs,
...
}: let
inherit (lib) mkEnableOption mkOption mkIf attrNames;
inherit (lib.types) path package enum;
inherit (lib') generateGtkColors;
cfg = config.theme;
in {
imports = [./gtk.nix];
@ -23,6 +21,14 @@ in {
default = "catppuccin-macchiato";
};
scheme = mkOption {
description = ''
Resolved scheme from the tinted-theming library.
'';
readOnly = true;
type = lib.types.attrs;
};
wallpaper = mkOption {
description = ''
Location of the wallpaper that will be used throughout the system.
@ -57,154 +63,7 @@ in {
};
};
};
config = let
config.theme = mkIf cfg.enable {
scheme = inputs.basix.schemeData.base16.${config.theme.schemeName};
in
mkIf cfg.enable
{
home-manager.users.nezia = {
home.pointerCursor = {
inherit (config.theme.cursorTheme) name package size;
};
gtk = {
iconTheme = {
inherit (config.theme.gtk.iconTheme) name package;
};
theme = lib.mkIf (!config.services.xserver.desktopManager.gnome.enable) {
inherit (config.theme.gtk.theme) name package;
};
gtk3.extraConfig = {
gtk-application-prefer-dark-theme = scheme.variant == "dark";
};
};
services.swaync.style =
generateGtkColors lib scheme.palette;
programs = {
niri = {
settings.layout.focus-ring.active.color = scheme.palette.base0E;
};
foot.settings.colors = let
inherit (lib.strings) removePrefix;
# because someone thought this was a great idea: https://github.com/tinted-theming/schemes/commit/61058a8d2e2bd4482b53d57a68feb56cdb991f0b
palette = builtins.mapAttrs (_: color: removePrefix "#" color) scheme.palette;
in {
background = palette.base00;
foreground = palette.base05;
regular0 = palette.base01;
regular1 = palette.base08;
regular2 = palette.base0B;
regular3 = palette.base0A;
regular4 = palette.base0D;
regular5 = palette.base0E;
regular6 = palette.base0C;
regular7 = palette.base06;
bright0 = palette.base02;
bright1 = palette.base08;
bright2 = palette.base0B;
bright3 = palette.base0A;
bright4 = palette.base0D;
bright5 = palette.base0E;
bright6 = palette.base0C;
bright7 = palette.base07;
};
waybar.style =
generateGtkColors lib scheme.palette;
fuzzel.settings.colors = {
background = "${scheme.palette.base00}ff";
text = "${scheme.palette.base05}ff";
input = "${scheme.palette.base05}ff";
selection = "${scheme.palette.base02}ff";
selection-text = "${scheme.palette.base07}ff";
selection-match = "${scheme.palette.base0D}ff";
border = "${scheme.palette.base0E}ff";
};
swaylock.settings = {
inside-color = scheme.palette.base01;
inside-clear-color = scheme.palette.base0C;
inside-caps-lock-color = scheme.palette.base09;
inside-ver-color = scheme.palette.base0D;
inside-wrong-color = scheme.palette.base08;
key-hl-color = scheme.palette.base0B;
layout-bg-color = scheme.palette.base00;
layout-border-color = scheme.palette.base05;
layout-text-color = scheme.palette.base07;
line-color = scheme.palette.base00;
line-clear-color = scheme.palette.base0C;
line-caps-lock-color = scheme.palette.base09;
line-ver-color = scheme.palette.base0D;
line-wrong-color = scheme.palette.base08;
ring-color = scheme.palette.base02;
ring-clear-color = scheme.palette.base0C;
ring-caps-lock-color = scheme.palette.base09;
ring-ver-color = scheme.palette.base0D;
ring-wrong-color = scheme.palette.base08;
separator-color = scheme.palette.base02;
text-color = scheme.palette.base07;
text-clear-color = scheme.palette.base04;
text-caps-lock-color = scheme.palette.base04;
text-ver-color = scheme.palette.base04;
text-wrong-color = scheme.palette.base04;
};
zathura.options = {
default-fg = scheme.palette.base05;
default-bg = scheme.palette.base00;
completion-bg = scheme.palette.base02;
completion-fg = scheme.palette.base05;
completion-highlight-bg = scheme.palette.base03;
completion-highlight-fg = scheme.palette.base05;
completion-group-bg = scheme.palette.base02;
completion-group-fg = scheme.palette.base0D;
statusbar-fg = scheme.palette.base05;
statusbar-bg = scheme.palette.base02;
notification-bg = scheme.palette.base02;
notification-fg = scheme.palette.base05;
notification-error-bg = scheme.palette.base02;
notification-error-fg = scheme.palette.base08;
notification-warning-bg = scheme.palette.base02;
notification-warning-fg = scheme.palette.base0A;
inputbar-fg = scheme.palette.base05;
inputbar-bg = scheme.palette.base02;
recolor = true;
recolor-lightcolor = scheme.palette.base00;
recolor-darkcolor = scheme.palette.base05;
index-fg = scheme.palette.base05;
index-bg = scheme.palette.base00;
index-active-fg = scheme.palette.base05;
index-active-bg = scheme.palette.base02;
render-loading-bg = scheme.palette.base00;
render-loading-fg = scheme.palette.base05;
highlight-color = lib'.rgba lib scheme.palette.base03 ".5";
highlight-fg = lib'.rgba lib scheme.palette.base0E ".5";
highlight-active-color = lib'.rgba lib scheme.palette.base0E ".5";
};
gnome-terminal.profile = {
"4621184a-b921-42cf-80a0-7784516606f2".colors = {
backgroundColor = "#${scheme.palette.base00}";
foregroundColor = "#${scheme.palette.base05}" "#${scheme.palette.base05}";
palette = builtins.attrValues (builtins.mapAttrs (_: color: "#${color}") scheme.palette);
};
};
};
};
};
};
}