From 7280b68f14934afe7d6ccd4531561bf9cc3f1db2 Mon Sep 17 00:00:00 2001 From: kenji Date: Mon, 5 Jan 2026 19:26:30 -0600 Subject: [PATCH] add(fonts): modular fonts --- apps/ghostty/default.nix | 2 + apps/hyprland/hypr/misc.nix | 4 +- apps/hyprlock/default.nix | 3 +- apps/matugen/default.nix | 188 +++++++++++++++++++++++++++++++++++- apps/screenshot/default.nix | 4 +- apps/vicinae/default.nix | 11 +++ apps/waybar/style.nix | 4 +- config.nix | 8 ++ flake.lock | 59 ++++++++++- flake.nix | 24 +++-- modules/nixos/fonts.nix | 8 +- 11 files changed, 293 insertions(+), 22 deletions(-) diff --git a/apps/ghostty/default.nix b/apps/ghostty/default.nix index e8d4fca..5930d76 100644 --- a/apps/ghostty/default.nix +++ b/apps/ghostty/default.nix @@ -1,6 +1,7 @@ { config, pkgs, + myConfig, ... }: { home.packages = [ @@ -54,6 +55,7 @@ enableFishIntegration = true; settings = { + font-family = myConfig.font.monospace; confirm-close-surface = false; app-notifications = false; window-padding-x = 15; diff --git a/apps/hyprland/hypr/misc.nix b/apps/hyprland/hypr/misc.nix index 37066cb..101caaf 100644 --- a/apps/hyprland/hypr/misc.nix +++ b/apps/hyprland/hypr/misc.nix @@ -1,4 +1,4 @@ -{ +{myConfig, ...}: { wayland.windowManager.hyprland.settings = { misc = { disable_hyprland_logo = true; @@ -43,7 +43,7 @@ bar_color = "$surface_container_high"; bar_text_color = "$on_surface"; bar_text_size = 0; - bar_text_font = "Sans"; + bar_text_font = myConfig.font.sans; bar_button_padding = 4; bar_padding = 8; bar_precedence_over_border = true; diff --git a/apps/hyprlock/default.nix b/apps/hyprlock/default.nix index 0a813c7..5add789 100644 --- a/apps/hyprlock/default.nix +++ b/apps/hyprlock/default.nix @@ -1,10 +1,11 @@ { config, pkgs, + myConfig, ... }: let cacheWallpaper = "${config.home.homeDirectory}/.cache/current_wallpaper"; - clockFont = "JetBrains Mono"; + clockFont = myConfig.font.monospace; in { imports = [ ./scripts/typewriter.nix diff --git a/apps/matugen/default.nix b/apps/matugen/default.nix index a3e6e4f..92ecb6a 100644 --- a/apps/matugen/default.nix +++ b/apps/matugen/default.nix @@ -1,6 +1,7 @@ { pkgs, inputs, + myConfig, ... }: { home.packages = with pkgs; [ @@ -11,10 +12,189 @@ source = ./config.toml; }; - home.file.".config/matugen/templates" = { - source = ./templates; - recursive = true; - }; + # Copy static templates + home.file.".config/matugen/templates/cava".source = ./templates/cava; + home.file.".config/matugen/templates/firefox".source = ./templates/firefox; + home.file.".config/matugen/templates/ghostty".source = ./templates/ghostty; + home.file.".config/matugen/templates/gtk3".source = ./templates/gtk3; + home.file.".config/matugen/templates/gtk4".source = ./templates/gtk4; + home.file.".config/matugen/templates/hyprland".source = ./templates/hyprland; + home.file.".config/matugen/templates/hyprlock".source = ./templates/hyprlock; + home.file.".config/matugen/templates/starship".source = ./templates/starship; + home.file.".config/matugen/templates/vicinae".source = ./templates/vicinae; + home.file.".config/matugen/templates/waybar".source = ./templates/waybar; + + # Generate templates with font interpolation + home.file.".config/matugen/templates/walker".text = '' + /* @import "../../../../../../../.config/omarchy/current/theme/walker.css"; */ + + /* Define Matugen Colors */ + @define-color text {{colors.on_surface.default.hex}}; + @define-color base {{colors.surface_container.default.hex}}; + @define-color border {{colors.primary.default.hex}}; + @define-color selected_text {{colors.primary.default.hex}}; + @define-color background {{colors.surface.default.hex}}; + + * { + all: unset; + } + + * { + font-family: ${myConfig.font.monospace}; + font-size: 18px; + color: @text; + } + + scrollbar { + opacity: 0; + } + + .normal-icons { + -gtk-icon-size: 16px; + } + + .large-icons { + -gtk-icon-size: 32px; + } + + .box-wrapper { + background: alpha(@base, 0.95); + padding: 20px; + border: 2px solid @border; + } + + .preview-box { + } + + .box { + } + + .search-container { + background: @base; + padding: 10px; + } + + .input placeholder { + opacity: 0.5; + } + + .input { + } + + .input:focus, + .input:active { + box-shadow: none; + outline: none; + } + + .content-container { + } + + .placeholder { + } + + .scroll { + } + + .list { + } + + child, + child > * { + } + + child:hover .item-box { + } + + child:selected .item-box { + } + + child:selected .item-box * { + color: @selected_text; + } + + .item-box { + padding-left: 14px; + } + + .item-text-box { + all: unset; + padding: 14px 0; + } + + .item-text { + } + + .item-subtext { + font-size: 0px; + min-height: 0px; + margin: 0px; + padding: 0px; + } + + .item-image { + margin-right: 14px; + -gtk-icon-transform: scale(0.9); + } + + .current { + font-style: italic; + } + + .keybind-hints { + background: @background; + padding: 10px; + margin-top: 10px; + } + + .preview { + } + ''; + + home.file.".config/matugen/templates/mako".text = '' + # Mako notification daemon configuration + # Generated by matugen + + # Appearance + font=${myConfig.font.sans} 11 + width=350 + height=150 + margin=10 + padding=15 + border-size=2 + border-radius=8 + + # Behavior + default-timeout=5000 + ignore-timeout=false + layer=overlay + anchor=top-right + + # Interaction + markup=true + actions=true + + # Grouping + group-by=app-name + max-visible=5 + sort=-time + + # Theme colors from matugen + background-color=#{{colors.surface_container_high.default.hex_stripped}} + text-color=#{{colors.on_surface.default.hex_stripped}} + border-color=#{{colors.primary.default.hex_stripped}} + progress-color=over #{{colors.primary_container.default.hex_stripped}} + + [urgency=low] + border-color=#{{colors.tertiary.default.hex_stripped}} + + [urgency=normal] + border-color=#{{colors.primary.default.hex_stripped}} + + [urgency=high] + border-color=#{{colors.error.default.hex_stripped}} + default-timeout=0 + ''; # Qt theming - follow GTK theme qt = { diff --git a/apps/screenshot/default.nix b/apps/screenshot/default.nix index 8a20594..673bb0c 100644 --- a/apps/screenshot/default.nix +++ b/apps/screenshot/default.nix @@ -1,4 +1,4 @@ -{pkgs, ...}: let +{pkgs, myConfig, ...}: let # Screenshot script with swappy integration screenshot = pkgs.writeShellScriptBin "screenshot" '' #!/usr/bin/env bash @@ -54,7 +54,7 @@ in { show_panel=true line_size=5 text_size=20 - text_font=sans-serif + text_font=${myConfig.font.sans} paint_mode=brush early_exit=false fill_shape=false diff --git a/apps/vicinae/default.nix b/apps/vicinae/default.nix index f7fde67..2f29985 100644 --- a/apps/vicinae/default.nix +++ b/apps/vicinae/default.nix @@ -53,6 +53,16 @@ in { "action.new" = "control+N"; "action.save" = "control+S"; }; + theme = { + light = { + name = "matugen"; + icon_theme = "default"; + }; + dark = { + name = "matugen"; + icon_theme = "default"; + }; + }; }; }; @@ -70,6 +80,7 @@ in { "SUPER, SPACE, Open Vicinae, exec, vicinae-toggle" "SUPER, period, Open Emoji Picker, exec, vicinae-toggle deeplink vicinae://extensions/vicinae/core/search-emojis" "SUPER, C, Open Calculator, exec, vicinae-toggle deeplink vicinae://extensions/vicinae/calculator/history" + "SUPER, V, Open Clipboard History, exec, vicinae-toggle deeplink vicinae://extensions/vicinae/clipboard/history" ]; }; } diff --git a/apps/waybar/style.nix b/apps/waybar/style.nix index 7fa7bfa..508515d 100644 --- a/apps/waybar/style.nix +++ b/apps/waybar/style.nix @@ -1,4 +1,4 @@ -{config, ...}: { +{config, myConfig, ...}: { programs.waybar = { style = '' @import "matugen.css"; @@ -9,7 +9,7 @@ border: none; border-radius: 0; min-height: 0; - font-family: 'JetBrainsMono Nerd Font'; + font-family: '${myConfig.font.monospace}'; font-size: 12px; } diff --git a/config.nix b/config.nix index 3bb5fb2..8b84e13 100644 --- a/config.nix +++ b/config.nix @@ -1,6 +1,10 @@ { hakase = { myConfig = { + font = { + monospace = "MonoLisa"; + sans = "Sans"; + }; nixos = { username = "kenji"; hostname = "hakase"; @@ -53,6 +57,10 @@ macbook = { myConfig = { + font = { + monospace = "MonoLisa"; + sans = "Sans"; + }; nixos = { username = "kenji"; hostname = "macbook"; diff --git a/flake.lock b/flake.lock index 9837f86..a978981 100644 --- a/flake.lock +++ b/flake.lock @@ -229,6 +229,24 @@ "url": "https://flakehub.com/f/DeterminateSystems/flake-schemas/%3D0.1.5.tar.gz" } }, + "flake-utils": { + "inputs": { + "systems": "systems_4" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, "gitignore": { "inputs": { "nixpkgs": [ @@ -858,6 +876,7 @@ "nur": "nur", "sops-nix": "sops-nix", "textfox": "textfox", + "unlisted-fonts": "unlisted-fonts", "vicinae": "vicinae", "walker": "walker" } @@ -982,6 +1001,21 @@ } }, "systems_5": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_6": { "locked": { "lastModified": 1689347949, "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", @@ -1017,12 +1051,33 @@ "type": "github" } }, + "unlisted-fonts": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1748987994, + "narHash": "sha256-13QQRwZx9tRDmL79+XBM1YaC4W68mVrVW2NCv2w25WA=", + "ref": "refs/heads/master", + "rev": "468d51f24d3dd22c543e657c359fb333ff4df726", + "revCount": 1, + "type": "git", + "url": "https://git.sakamoto.dev/kenji/nix-fonts.git" + }, + "original": { + "type": "git", + "url": "https://git.sakamoto.dev/kenji/nix-fonts.git" + } + }, "vicinae": { "inputs": { "nixpkgs": [ "nixpkgs" ], - "systems": "systems_4" + "systems": "systems_5" }, "locked": { "lastModified": 1767353605, @@ -1046,7 +1101,7 @@ "nixpkgs": [ "nixpkgs" ], - "systems": "systems_5" + "systems": "systems_6" }, "locked": { "lastModified": 1766324177, diff --git a/flake.nix b/flake.nix index 0a4824b..d51f7b2 100644 --- a/flake.nix +++ b/flake.nix @@ -56,6 +56,10 @@ url = "github:tpwrules/nixos-apple-silicon"; inputs.nixpkgs.follows = "nixpkgs"; }; + unlisted-fonts = { + url = "git+https://git.sakamoto.dev/kenji/nix-fonts.git"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; outputs = { @@ -74,10 +78,12 @@ nixosConfigurations = { hakase = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; - specialArgs = { - inherit inputs; - system = "x86_64-linux"; - } // allConfig.hakase; + specialArgs = + { + inherit inputs; + system = "x86_64-linux"; + } + // allConfig.hakase; modules = [ home-manager.nixosModules.home-manager sops-nix.nixosModules.sops @@ -88,10 +94,12 @@ macbook = nixpkgs.lib.nixosSystem { system = "aarch64-linux"; - specialArgs = { - inherit inputs; - system = "aarch64-linux"; - } // allConfig.macbook; + specialArgs = + { + inherit inputs; + system = "aarch64-linux"; + } + // allConfig.macbook; modules = [ home-manager.nixosModules.home-manager sops-nix.nixosModules.sops diff --git a/modules/nixos/fonts.nix b/modules/nixos/fonts.nix index ea5a8b0..b6a7a14 100644 --- a/modules/nixos/fonts.nix +++ b/modules/nixos/fonts.nix @@ -1,5 +1,11 @@ -{pkgs, ...}: { +{ + pkgs, + inputs, + ... +}: { fonts.packages = with pkgs; [ + inputs.unlisted-fonts.packages.${pkgs.system}.monolisa + nerd-fonts.fira-code nerd-fonts.jetbrains-mono