flocon/modules/theme/default.nix
Anthony Rodriguez a3c356c3c6
treewide: switch to hyprland
I've decided to switch to Hyprland again, after having issues with Niri,
especially with XWayland apps. It also has better and more widespread integration with other pieces of software that I use/plan to use.

commit 5a42498391
Author: Anthony Rodriguez <anthony@nezia.dev>
Date:   Fri Dec 13 16:59:37 2024 +0100

    modules/theme: update fuzzel selection colors

commit f3386f5b0a
Author: Anthony Rodriguez <anthony@nezia.dev>
Date:   Fri Dec 13 16:53:57 2024 +0100

    system/services/greetd: enable gnome keyring

commit c1caf6d844
Author: Anthony Rodriguez <anthony@nezia.dev>
Date:   Fri Dec 13 16:51:24 2024 +0100

    modules/themes: switch to phinger-cursors, update border colors

commit aa7a00d330
Author: Anthony Rodriguez <anthony@nezia.dev>
Date:   Fri Dec 13 14:54:43 2024 +0100

    hosts/solaire: switch to hyprland

commit 7c7a332a3e
Author: Anthony Rodriguez <anthony@nezia.dev>
Date:   Fri Dec 13 14:54:34 2024 +0100

    modules/theme: set default theme to catppuccin (again)

commit 471c6b5503
Author: Anthony Rodriguez <anthony@nezia.dev>
Date:   Fri Dec 13 14:54:24 2024 +0100

    flake: add hyprwm-contrib for grimslurp

commit 04914eab73
Author: Anthony Rodriguez <anthony@nezia.dev>
Date:   Fri Dec 13 14:54:09 2024 +0100

    system/services/greetd: switch to hyprland as compositor (thanks jacekpoz)

commit d185864012
Author: Anthony Rodriguez <anthony@nezia.dev>
Date:   Fri Dec 13 14:52:56 2024 +0100

    home/services/swaync: remove unused variables

commit 75ff00b2e2
Author: Anthony Rodriguez <anthony@nezia.dev>
Date:   Fri Dec 13 14:52:43 2024 +0100

    home/programs/waybar: add hyprland workspaces

commit b36b3abf53
Author: Anthony Rodriguez <anthony@nezia.dev>
Date:   Fri Dec 13 14:52:31 2024 +0100

    home/programs/hypr: add basic hyprland configuration

commit cdda6bf2bc
Author: Anthony Rodriguez <anthony@nezia.dev>
Date:   Fri Dec 13 12:03:53 2024 +0100

    system/programs: add hyprland module

commit ef36f7be36
Author: Anthony Rodriguez <anthony@nezia.dev>
Date:   Fri Dec 13 12:03:43 2024 +0100

    flake: add hyprland and cachix

commit cdbcd8d1bd
Author: Anthony Rodriguez <anthony@nezia.dev>
Date:   Fri Dec 13 12:03:37 2024 +0100

    system/nix: add wheel to trusted users
2024-12-13 19:02:53 +01:00

297 lines
10 KiB
Nix

{
inputs,
config,
lib,
lib',
pkgs,
...
}: let
inherit (lib) mkEnableOption mkOption mkIf attrNames;
inherit (lib.strings) removePrefix;
inherit (lib.types) path package enum;
inherit (lib') generateGtkColors rgba;
cfg = config.theme;
in {
imports = [
./gtk.nix
inputs.niri.nixosModules.niri
inputs.hyprland.nixosModules.default
];
options.theme = {
enable = mkEnableOption "theme";
schemeName = mkOption {
description = ''
Name of the tinted-theming color scheme to use.
'';
type = enum (attrNames inputs.basix.schemeData.base16);
example = "catppuccin-mocha";
default = "catppuccin-mocha";
};
wallpaper = mkOption {
description = ''
Location of the wallpaper that will be used throughout the system.
'';
type = path;
example = lib.literalExpression "./wallpaper.png";
default = pkgs.fetchurl {
url = "https://raw.githubusercontent.com/NixOS/nixos-artwork/e0cf0eb237dc5baba86661a3572b20a6183c1876/wallpapers/nix-wallpaper-nineish-catppuccin-frappe.png?raw=true";
hash = "sha256-/HAtpGwLxjNfJvX5/4YZfM8jPNStaM3gisK8+ImRmQ4=";
};
};
cursorTheme = {
name = mkOption {
description = ''
Name of the cursor theme.
'';
default = "phinger-cursors-dark";
};
package = mkOption {
type = package;
description = ''
Package providing the cursor theme.
'';
default = pkgs.phinger-cursors;
};
size = mkOption {
description = ''
Size of the cursor.
'';
default = 32;
};
};
};
config = let
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;
x11.enable = true;
gtk.enable = true;
};
services.swaync.style =
generateGtkColors lib scheme.palette;
wayland.windowManager.hyprland.settings = {
env = [
"HYPRCURSOR_THEME,phinger-cursors-light"
"HYPRCURSOR_SIZE,32"
];
general = {
border_size = 4;
"col.active_border" = "rgb(${removePrefix "#" scheme.palette.base0E})";
};
decoration = {
rounding = 10;
blur.enabled = true;
};
};
programs = {
niri = {
settings = {
layout.focus-ring.active.color = scheme.palette.base0D;
cursor = {
inherit (config.theme.cursorTheme) size;
theme = config.theme.cursorTheme.name;
};
};
};
foot.settings.colors = let
# 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.base00;
regular1 = palette.base08;
regular2 = palette.base0B;
regular3 = palette.base0A;
regular4 = palette.base0D;
regular5 = palette.base0E;
regular6 = palette.base0C;
regular7 = palette.base05;
bright0 = palette.base02;
bright1 = palette.base08;
bright2 = palette.base0B;
bright3 = palette.base0A;
bright4 = palette.base0D;
bright5 = palette.base0E;
bright6 = palette.base0C;
bright7 = palette.base07;
"16" = palette.base09;
"17" = palette.base0F;
"18" = palette.base01;
"19" = palette.base02;
"20" = palette.base04;
"21" = palette.base06;
};
waybar.style =
generateGtkColors lib scheme.palette;
fuzzel.settings = {
main = {
font = "sans-serif:size=16";
};
colors = {
background = "${scheme.palette.base01}f2";
text = "${scheme.palette.base05}ff";
match = "${scheme.palette.base0E}ff";
selection = "${scheme.palette.base03}ff";
selection-text = "${scheme.palette.base06}ff";
selection-match = "${scheme.palette.base0E}ff";
border = "${scheme.palette.base0E}ff";
};
};
swaylock.settings = {
inside-color = scheme.palette.base01;
line-color = scheme.palette.base01;
ring-color = scheme.palette.base05;
text-color = scheme.palette.base05;
inside-clear-color = scheme.palette.base0A;
line-clear-color = scheme.palette.base0A;
ring-clear-color = scheme.palette.base00;
text-clear-color = scheme.palette.base00;
inside-caps-lock-color = scheme.palette.base03;
line-caps-lock-color = scheme.palette.base03;
ring-caps-lock-color = scheme.palette.base00;
text-caps-lock-color = scheme.palette.base00;
inside-ver-color = scheme.palette.base0D;
line-ver-color = scheme.palette.base0D;
ring-ver-color = scheme.palette.base00;
text-ver-color = scheme.palette.base00;
inside-wrong-color = scheme.palette.base08;
line-wrong-color = scheme.palette.base08;
ring-wrong-color = scheme.palette.base00;
text-wrong-color = scheme.palette.base00;
caps-lock-bs-hl-color = scheme.palette.base08;
caps-lock-key-hl-color = scheme.palette.base0D;
bs-hl-color = scheme.palette.base08;
key-hl-color = scheme.palette.base0D;
separator-color = "#00000000"; # transparent
layout-bg-color = "#00000050"; # semi-transparent black
};
zathura.options = {
default-fg = scheme.palette.base01;
default-bg = scheme.palette.base00;
completion-bg = scheme.palette.base01;
completion-fg = scheme.palette.base0D;
completion-highlight-bg = scheme.palette.base0D;
completion-highlight-fg = scheme.palette.base07;
statusbar-fg = scheme.palette.base04;
statusbar-bg = scheme.palette.base02;
notification-bg = scheme.palette.base00;
notification-fg = scheme.palette.base07;
notification-error-bg = scheme.palette.base00;
notification-error-fg = scheme.palette.base08;
notification-warning-bg = scheme.palette.base00;
notification-warning-fg = scheme.palette.base0A;
inputbar-fg = scheme.palette.base07;
inputbar-bg = scheme.palette.base00;
recolor = false;
recolor-keephue = false;
recolor-lightcolor = scheme.palette.base00;
recolor-darkcolor = scheme.palette.base06;
highlight-color = scheme.palette.base0A;
highlight-active-color = scheme.palette.base0D;
};
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);
};
};
fish.interactiveShellInit = ''
set fish_cursor_default block blink
set fish_cursor_insert line blink
set fish_cursor_replace_one underscore blink
set fish_cursor_visual block
set -x fish_color_autosuggestion brblack
set -x fish_color_cancel -r
set -x fish_color_command brgreen
set -x fish_color_comment brmagenta
set -x fish_color_cwd green
set -x fish_color_cwd_root red
set -x fish_color_end brmagenta
set -x fish_color_error brred
set -x fish_color_escape brcyan
set -x fish_color_history_current --bold
set -x fish_color_host normal
set -x fish_color_host_remote yellow
set -x fish_color_match --background=brblue
set -x fish_color_normal normal
set -x fish_color_operator cyan
set -x fish_color_param brblue
set -x fish_color_quote yellow
set -x fish_color_redirection bryellow
set -x fish_color_search_match 'bryellow' '--background=brblack'
set -x fish_color_selection 'white' '--bold' '--background=brblack'
set -x fish_color_status red
set -x fish_color_user brgreen
set -x fish_color_valid_path --underline
set -x fish_pager_color_completion normal
set -x fish_pager_color_description yellow
set -x fish_pager_color_prefix 'white' '--bold' '--underline'
set -x fish_pager_color_progress 'brwhite' '--background=cyan'
'';
starship.settings = {
directory = {
style = "bold yellow";
};
character = {
format = "$symbol ";
success_symbol = "[](bold green)";
error_symbol = "[](bold red)";
vicmd_symbol = "[](bold green)";
};
cmd_duration = {
style = "yellow";
format = "[ $duration]($style)";
};
};
nvf.settings.vim.theme = {
enable = true;
name = "base16";
base16-colors = scheme.palette;
};
};
gtk = rec {
gtk3.extraConfig = {
gtk-application-prefer-dark-theme = scheme.variant == "dark";
};
gtk4.extraConfig = gtk3.extraConfig;
};
dconf.settings."org/gnome/desktop/interface".color-scheme = "prefer-${scheme.variant}";
};
};
}