From d5eb686f7f5b33a79d15f1bdb05437af9ce18f10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thea=20Sch=C3=B6bl?= Date: Wed, 5 Nov 2025 14:13:32 +0100 Subject: [PATCH] update system --- flake.lock | 80 ++++++------- flake.nix | 5 +- hosts/MONSTER/default.nix | 12 +- .../home-manager/modules/nixvim/aerial.nix | 4 +- .../home-manager/modules/nixvim/base/find.nix | 18 +-- .../home-manager/modules/nixvim/base/tree.nix | 34 +++--- modules/home-manager/programs/git.nix | 6 +- modules/home-manager/programs/nixvim.nix | 1 - modules/home-manager/theme/gtk.nix | 101 ++++++++++------- modules/home-manager/theme/md3-evo.nix | 107 ++++++++++++------ modules/home-manager/theme/niri.kdl | 12 ++ modules/home-manager/theme/nvim.vim | 2 +- modules/nixos/desktops/niri.nix | 80 ++++++++----- modules/nixos/shell/firefox-pip.nix | 17 +++ modules/nixos/shell/walker.nix | 1 + modules/nixos/shell/waybar.nix | 39 +++---- modules/nixos/usecases/windows-vm.nix | 20 +++- overlays/matugen/hm-module.nix | 23 ++++ 18 files changed, 350 insertions(+), 212 deletions(-) create mode 100644 modules/home-manager/theme/niri.kdl create mode 100644 overlays/matugen/hm-module.nix diff --git a/flake.lock b/flake.lock index 3200883..b3584cc 100644 --- a/flake.lock +++ b/flake.lock @@ -10,11 +10,11 @@ "quickshell": "quickshell" }, "locked": { - "lastModified": 1760163288, - "narHash": "sha256-SMPeHIC/JGAOL8sOxQ+dN4P4pz1j5wjYLCp80r6voMo=", + "lastModified": 1760932218, + "narHash": "sha256-3vnrrQZPfQuHEzowGB4e7vL5EpTHf5oyzyOS1aKfnig=", "owner": "AvengeMedia", "repo": "DankMaterialShell", - "rev": "362bcb9294aa9317474e217b7d87d91f6788bec1", + "rev": "851d47213cb639a92b9e0dd545e2aa163f12b701", "type": "github" }, "original": { @@ -31,11 +31,11 @@ ] }, "locked": { - "lastModified": 1759769087, - "narHash": "sha256-b4dEAjvIfIkw2/C47aZGDnwhTBEjqptDo8J5PizeTCo=", + "lastModified": 1760238269, + "narHash": "sha256-7CeGZM/Z/5Qt3AYByCRohGYGR1MRuXYzTTbkV/JxyAs=", "owner": "AvengeMedia", "repo": "dgop", - "rev": "ad6ad285e8b882c41eb8994ef7c91e151afb9a97", + "rev": "95acdfce2d323e28fa8f5a4f345160962034f2b5", "type": "github" }, "original": { @@ -52,11 +52,11 @@ ] }, "locked": { - "lastModified": 1759982027, - "narHash": "sha256-4deRT98VwfZWZ685wIGevyYl3CzpuZJPjdjfulABH00=", + "lastModified": 1760241259, + "narHash": "sha256-DlLGn+4M6tIafoDsHr2WhHG2hrHrC24S2IL3+KAvjEU=", "owner": "AvengeMedia", "repo": "danklinux", - "rev": "5cdfeeae2e14089079dcb0d6b61f014ce754021f", + "rev": "dae4c3ff4ce0feb930361c399747edb29d081775", "type": "github" }, "original": { @@ -73,11 +73,11 @@ ] }, "locked": { - "lastModified": 1756770412, - "narHash": "sha256-+uWLQZccFHwqpGqr2Yt5VsW/PbeJVTn9Dk6SHWhNRPw=", + "lastModified": 1759362264, + "narHash": "sha256-wfG0S7pltlYyZTM+qqlhJ7GMw2fTF4mLKCIVhLii/4M=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "4524271976b625a4a605beefd893f270620fd751", + "rev": "758cf7296bee11f1706a574c77d072b8a7baa881", "type": "github" }, "original": { @@ -144,11 +144,11 @@ ] }, "locked": { - "lastModified": 1759172751, - "narHash": "sha256-E8W8sRXfrvkFW26GuuiWq6QfReU7m5+cngwHuRo/3jc=", + "lastModified": 1760929667, + "narHash": "sha256-nZh6uvc71nVNaf/y+wesnjwsmJ6IZZUnP2EzpZe48To=", "owner": "nix-community", "repo": "home-manager", - "rev": "12fa8548feefa9a10266ba65152fd1a787cdde8f", + "rev": "189c21cf879669008ccf06e78a553f17e88d8ef0", "type": "github" }, "original": { @@ -228,16 +228,16 @@ "systems": "systems_2" }, "locked": { - "lastModified": 1716548249, - "narHash": "sha256-9jvSsYOCYpG7JN1YDdptu19EhG+fZuX278IbiTJ7814=", - "owner": "Theaninova", + "lastModified": 1731508795, + "narHash": "sha256-+UibbVz5CTisKMms/5VXGe39FYr56qzaEtX4TWQPkjk=", + "owner": "InioX", "repo": "matugen", - "rev": "f79700eb42e5a6b7062ccdfcec3956e26573fc01", + "rev": "cb9f81eb0150f6253895ea0adb1daa8534c15fc7", "type": "github" }, "original": { - "owner": "Theaninova", - "ref": "add-home-manager-module", + "owner": "InioX", + "ref": "v2.4.1", "repo": "matugen", "type": "github" } @@ -254,11 +254,11 @@ "xwayland-satellite-unstable": "xwayland-satellite-unstable" }, "locked": { - "lastModified": 1760121522, - "narHash": "sha256-8SGgpcZsMZIqFU+J/1OwebC/px8sgx5YYHNw1XkBM98=", + "lastModified": 1760950171, + "narHash": "sha256-E2ySTu/oK7cYBdAI3tlGP9zVjF4mZgWJ1OZInBCMb00=", "owner": "sodiboo", "repo": "niri-flake", - "rev": "17dbedb88a21142c41d120f139e2870bc56bb5f4", + "rev": "f851a923137c0a54719412146fd63d24b3214e60", "type": "github" }, "original": { @@ -287,11 +287,11 @@ "niri-unstable": { "flake": false, "locked": { - "lastModified": 1759395653, - "narHash": "sha256-sv9J1z6CrTPf9lRJLyCN90fZVdQz7LFeX7pIlInH8BQ=", + "lastModified": 1760940149, + "narHash": "sha256-KbM47vD6E0cx+v4jYQZ8mD5N186AKm2CQlyh34TW58U=", "owner": "YaLTeR", "repo": "niri", - "rev": "ba6e5e082a79901dc89b0d49c5da1b769d652aec", + "rev": "b3245b81a6ed8edfaf5388a74d2e0a23c24941e5", "type": "github" }, "original": { @@ -318,11 +318,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1759036355, - "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "lastModified": 1760878510, + "narHash": "sha256-K5Osef2qexezUfs0alLvZ7nQFTGS9DL2oTVsIXsqLgs=", "owner": "nixos", "repo": "nixpkgs", - "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "rev": "5e2a59a5b1a82f89f2c7e598302a9cacebb72a67", "type": "github" }, "original": { @@ -334,11 +334,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1759994382, - "narHash": "sha256-wSK+3UkalDZRVHGCRikZ//CyZUJWDJkBDTQX1+G77Ow=", + "lastModified": 1760862643, + "narHash": "sha256-PXwG0TM7Ek87DNx4LbGWuD93PbFeKAJs4FfALtp7Wo0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "5da4a26309e796daa7ffca72df93dbe53b8164c7", + "rev": "33c6dca0c0cb31d6addcd34e90a63ad61826b28c", "type": "github" }, "original": { @@ -358,11 +358,11 @@ "systems": "systems_4" }, "locked": { - "lastModified": 1759217440, - "narHash": "sha256-qP3wDVcwOMKSIhPKH0m+DmpFXIx9dZNNgw9wyRMz+Dw=", + "lastModified": 1760960598, + "narHash": "sha256-UP1v+sEkHuvD2+qyhxbkQpBR+dl9U0ljml3/dMI2jeU=", "owner": "nix-community", "repo": "nixvim", - "rev": "9faa339d9e930be3eb7d751af35ecfed7c493d14", + "rev": "e3b77e803b2350b72f4d72c8f175ab0fbfe5a642", "type": "github" }, "original": { @@ -402,11 +402,11 @@ ] }, "locked": { - "lastModified": 1759610621, - "narHash": "sha256-P3UPFd95mS/3aNgy40nCXAmyfR2bEEBd+tX6xfkYFb0=", + "lastModified": 1760228179, + "narHash": "sha256-4Z6k7lv3Zcgk3K+4h60LpqB9wCkR+utkYERU735U068=", "ref": "refs/heads/master", - "rev": "c5c438f1cd1a76660a8658ef929a3d19e968e2ce", - "revCount": 689, + "rev": "c9d3ffb6043c5bf3f3009202bad7e0e5132c4a25", + "revCount": 693, "type": "git", "url": "https://git.outfoxxed.me/quickshell/quickshell" }, diff --git a/flake.nix b/flake.nix index 87b2a5b..9f3a697 100644 --- a/flake.nix +++ b/flake.nix @@ -10,7 +10,7 @@ inputs.nixpkgs.follows = "nixpkgs"; }; matugen = { - url = "github:Theaninova/matugen/add-home-manager-module"; + url = "github:InioX/matugen?ref=v2.4.1"; inputs.nixpkgs.follows = "nixpkgs"; }; nixvim = { @@ -141,10 +141,9 @@ inherit username hostname inputs; }; sharedModules = [ - matugen.homeManagerModules.default + ./overlays/matugen/hm-module.nix nix-flatpak.homeManagerModules.nix-flatpak nixvim.homeModules.nixvim - # niri.homeModules.niri dank-material-shell.homeModules.dankMaterialShell.default dank-material-shell.homeModules.dankMaterialShell.niri ./modules/home-manager/modules/nixvim diff --git a/hosts/MONSTER/default.nix b/hosts/MONSTER/default.nix index 4b17fae..bff5f09 100644 --- a/hosts/MONSTER/default.nix +++ b/hosts/MONSTER/default.nix @@ -35,13 +35,13 @@ shell.components = { firefox-pip.enable = true; # grimblast.enable = true; - # gnome-keyring.enable = true; + gnome-keyring.enable = true; # hyprpicker.enable = true; kde-connect.enable = true; kitty.enable = true; - # swaync.enable = true; - # walker.enable = true; - # waybar.enable = true; + swaync.enable = true; + walker.enable = true; + waybar.enable = true; }; desktops.niri.enable = true; locale.preset.theaninova.enable = true; @@ -50,9 +50,9 @@ "127.0.0.1:57461" = [ "ai.local" ]; }; services = { - ollama.enable = true; + ollama.enable = false; open-webui = { - enable = true; + enable = false; port = 57461; environment = { ANONYMIZED_TELEMETRY = "False"; diff --git a/modules/home-manager/modules/nixvim/aerial.nix b/modules/home-manager/modules/nixvim/aerial.nix index 66db0f3..53798f8 100644 --- a/modules/home-manager/modules/nixvim/aerial.nix +++ b/modules/home-manager/modules/nixvim/aerial.nix @@ -24,7 +24,7 @@ in ":AerialNext"; } { - key = "fs"; + key = "fs"; mode = "n"; action = # vim ":Telescope aerial"; @@ -54,7 +54,7 @@ in }; which-key.settings.spec = [ { - __unkeyed-1 = "fs"; + __unkeyed-1 = "fs"; group = "Symbols"; icon = "󰡱"; } diff --git a/modules/home-manager/modules/nixvim/base/find.nix b/modules/home-manager/modules/nixvim/base/find.nix index 25675a8..713e39c 100644 --- a/modules/home-manager/modules/nixvim/base/find.nix +++ b/modules/home-manager/modules/nixvim/base/find.nix @@ -13,19 +13,19 @@ in telescope = { enable = true; keymaps = { - "ff" = { + "ff" = { action = "git_files"; mode = "n"; }; - "fa" = { + "fa" = { action = "find_files"; mode = "n"; }; - "fg" = { + "fg" = { action = "live_grep"; mode = "n"; }; - "fc" = { + "fc" = { action = "buffers"; mode = "n"; }; @@ -33,27 +33,27 @@ in }; which-key.settings.spec = [ { - __unkeyed-1 = "f"; + __unkeyed-1 = "f"; group = "Find"; icon = "󰍉"; } { - __unkeyed-1 = "ff"; + __unkeyed-1 = "ff"; desc = "File"; icon = "󰈢"; } { - __unkeyed-1 = "fa"; + __unkeyed-1 = "fa"; desc = "All Files"; icon = "󱪡"; } { - __unkeyed-1 = "fg"; + __unkeyed-1 = "fg"; desc = "Grep"; icon = "󰑑"; } { - __unkeyed-1 = "fc"; + __unkeyed-1 = "fc"; desc = "Current"; icon = "󰈙"; } diff --git a/modules/home-manager/modules/nixvim/base/tree.nix b/modules/home-manager/modules/nixvim/base/tree.nix index 665cf7d..1a347b9 100644 --- a/modules/home-manager/modules/nixvim/base/tree.nix +++ b/modules/home-manager/modules/nixvim/base/tree.nix @@ -10,7 +10,7 @@ in config = lib.mkIf cfg.enable { keymaps = [ { - key = "ft"; + key = "t"; mode = "n"; action = # vim ":Neotree toggle"; @@ -20,24 +20,28 @@ in web-devicons.enable = true; neo-tree = { enable = true; - filesystem = { - useLibuvFileWatcher = true; - followCurrentFile.enabled = true; - filteredItems.visible = true; + settings = { + event_handlers = [ + { + event = "neo_tree_buffer_leave"; + handler.__raw = '' + function() + require('neo-tree').close_all() + end + ''; + } + ]; + filesystem = { + use_libuv_file_watcher = true; + follow_current_file.enabled = true; + filtered_items.visible = true; + }; + popupBorderStyle = "rounded"; }; - popupBorderStyle = "rounded"; - filesystem.window.mappings.f = "noop"; - window.mappings.f = "noop"; - eventHandlers.neo_tree_buffer_leave = # lua - '' - function() - require('neo-tree').close_all() - end - ''; }; which-key.settings.spec = [ { - __unkeyed-1 = "ft"; + __unkeyed-1 = "t"; desc = "Tree"; icon = "󰙅"; } diff --git a/modules/home-manager/programs/git.nix b/modules/home-manager/programs/git.nix index 218b339..4fbc76b 100644 --- a/modules/home-manager/programs/git.nix +++ b/modules/home-manager/programs/git.nix @@ -2,13 +2,15 @@ { programs.git = { enable = true; - userName = "Thea Schöbl"; - userEmail = "dev@theaninova.de"; signing = { key = "6C9E EFC5 1AE0 0131 78DE B9C8 68FF FB1E C187 88CA"; signByDefault = true; }; extraConfig = { + user = { + email = "dev@theaninova.de"; + name = "Thea Schöbl"; + }; pull.rebase = true; init.defaultBranch = "main"; merge = { diff --git a/modules/home-manager/programs/nixvim.nix b/modules/home-manager/programs/nixvim.nix index c2dd28e..82dbde1 100644 --- a/modules/home-manager/programs/nixvim.nix +++ b/modules/home-manager/programs/nixvim.nix @@ -56,7 +56,6 @@ tree.enable = true; }; languages = { - angular.enable = true; c.enable = true; css = { enable = true; diff --git a/modules/home-manager/theme/gtk.nix b/modules/home-manager/theme/gtk.nix index 4548d22..0487f51 100644 --- a/modules/home-manager/theme/gtk.nix +++ b/modules/home-manager/theme/gtk.nix @@ -2,27 +2,36 @@ let transparent = color: "alpha(${color}, {{custom.transparency}})"; mkBgColor = color: { ${color} = { - background = "{{colors.${color}.default.hex}}"; + background_lift = "{{colors.${color}_dim.default.hex}}"; + background = "{{colors.${color}_dim.default.hex}}"; foreground = "{{colors.on_${color}.default.hex}}"; }; }; mkColor = color: { + ${color} = { + standalone = "{{colors.${color}_fixed_dim.default.hex}}"; + background = "{{colors.${color}_fixed.default.hex}}"; + foreground = "{{colors.on_${color}_fixed.default.hex}}"; + }; + }; + mkSemantic = color: { ${color} = { standalone = "{{colors.${color}.default.hex}}"; - background = "{{colors.${color}_container.default.hex}}"; - foreground = "{{colors.on_${color}_container.default.hex}}"; + background = "{{colors.${color}.default.hex}}"; + foreground = "{{colors.on_${color}.default.hex}}"; }; }; colors = (mkColor "primary") // (mkColor "secondary") // (mkColor "tertiary") - // (mkColor "danger") - // (mkColor "warning") - // (mkColor "success") - // (mkColor "error") - // (mkColor "info") + // (mkSemantic "danger") + // (mkSemantic "warning") + // (mkSemantic "success") + // (mkSemantic "error") + // (mkSemantic "info") // (mkBgColor "background") + // (mkBgColor "surface") // (mkBgColor "surface_variant") // { outline = "{{colors.outline.default.hex}}"; @@ -40,11 +49,33 @@ let }; }; - gtk = { + # https://github.com/AvengeMedia/DankMaterialShell/blob/master/matugen/templates/gtk-colors.css + gtk = rec { accent_color = colors.primary.standalone; accent_bg_color = colors.primary.background; accent_fg_color = colors.primary.foreground; + window_bg_color = transparent colors.surface.background; + window_fg_color = colors.surface.foreground; + + popover_bg_color = transparent colors.surface.background; + popover_fg_color = colors.surface.foreground; + + headerbar_bg_color = transparent colors.surface.background; + headerbar_fg_color = colors.surface.foreground; + + view_bg_color = transparent colors.surface.background_lift; + view_fg_color = colors.surface.foreground; + + card_bg_color = colors.surface.background_lift; + card_fg_color = colors.surface.foreground; + + sidebar_bg_color = window_bg_color; + sidebar_fg_color = window_fg_color; + + sidebar_border_color = colors.surface.background; + sidebar_backdrop_color = window_bg_color; + destructive_color = colors.danger.standalone; destructive_bg_color = colors.danger.background; destructive_fg_color = colors.danger.foreground; @@ -61,45 +92,31 @@ let error_bg_color = colors.error.background; error_fg_color = colors.error.foreground; - window_bg_color = transparent colors.background.background; - window_fg_color = colors.background.foreground; + /* + headerbar_border_color = colors.outline; + headerbar_backdrop_color = transparent colors.background.background; + headerbar_shade_color = colors.shade.default; + headerbar_darker_shade_color = colors.shade.darker; - view_bg_color = transparent colors.background.background; - view_fg_color = colors.background.foreground; + card_shade_color = colors.shade.default; - headerbar_bg_color = transparent colors.background.background; - headerbar_fg_color = colors.background.foreground; - headerbar_border_color = colors.outline; - headerbar_backdrop_color = transparent colors.background.background; - headerbar_shade_color = colors.shade.default; - headerbar_darker_shade_color = colors.shade.darker; + dialog_bg_color = transparent colors.background.background; + dialog_fg_color = colors.background.foreground; + popover_shade_color = colors.shade.default; - card_bg_color = colors.container.default; - card_fg_color = colors.container.foreground; - card_shade_color = colors.shade.default; + shade_color = colors.shade.default; + scrollbar_outline_color = colors.outline; - dialog_bg_color = transparent colors.background.background; - dialog_fg_color = colors.background.foreground; + thumbnail_bg_color = colors.secondary.background; + thumbnail_fg_color = colors.secondary.foreground; - popover_bg_color = transparent colors.background.background; - popover_fg_color = colors.background.foreground; - popover_shade_color = colors.shade.default; + sidebar_shade_color = colors.shade.default; - shade_color = colors.shade.default; - scrollbar_outline_color = colors.outline; - - thumbnail_bg_color = colors.secondary.background; - thumbnail_fg_color = colors.secondary.foreground; - - sidebar_bg_color = transparent colors.background.background; - sidebar_fg_color = colors.background.foreground; - sidebar_backdrop_color = transparent colors.background.background; - sidebar_shade_color = colors.shade.default; - - secondary_sidebar_bg_color = transparent colors.surface_variant.background; - secondary_sidebar_fg_color = colors.surface_variant.foreground; - secondary_sidebar_backdrop_color = transparent colors.surface_variant.background; - secondary_sidebar_shade_color = colors.shade.default; + secondary_sidebar_bg_color = transparent colors.surface_variant.background; + secondary_sidebar_fg_color = colors.surface_variant.foreground; + secondary_sidebar_backdrop_color = transparent colors.surface_variant.background; + secondary_sidebar_shade_color = colors.shade.default; + */ }; in builtins.concatStringsSep "\n" ( diff --git a/modules/home-manager/theme/md3-evo.nix b/modules/home-manager/theme/md3-evo.nix index 7c602ef..9b52098 100644 --- a/modules/home-manager/theme/md3-evo.nix +++ b/modules/home-manager/theme/md3-evo.nix @@ -1,6 +1,7 @@ { pkgs, lib, + osConfig, config, ... }: @@ -241,7 +242,6 @@ in exit 1 fi - THEME_SERVICE_PATH="${config.xdg.configHome}/systemd/user/theme-init.timer" if [ "$MODE" = "auto" ]; then TIME=$(sunwait poll ${builtins.toString cfg.auto-dark.lat}N ${builtins.toString cfg.auto-dark.lon}E || :) @@ -270,29 +270,21 @@ in systemctl --user daemon-reload &> /dev/null || : systemctl --user restart theme-init.timer &> /dev/null || : + if command -v niri &> /dev/null; then + niri msg action do-screen-transition --delay-ms 500 + fi + if [ "$MODE" = "light" ]; then - GTK_THEME="adw-gtk3" + GTK_THEME="adw-gtk3" else - GTK_THEME="adw-gtk3-dark" + GTK_THEME="adw-gtk3-dark" fi matugen image "$WALLPAPER" --type scheme-${cfg.flavour} --contrast ${builtins.toString cfg.contrast} --mode "$MODE" - sed -i "s/set background=dark/set background=$MODE/g" ${config.xdg.configHome}/nvim/colors/md3-evo.vim dconf write /org/gnome/desktop/interface/gtk-theme "'$GTK_THEME'" dconf write /org/gnome/desktop/interface/color-scheme "'prefer-$MODE'" - - if command -v hyprctl &> /dev/null; then - hyprctl reload - fi - - if which swaync-client; then - swaync-client --reload-css - fi - - for i in $(pgrep -u "$USER" -x nvim); do - kill -USR1 "$i" - done + dconf write /org/gnome/desktop/interface/icon-theme "'Adwaita'" ''; } ); @@ -309,6 +301,9 @@ in "@import './theme.css';"; gtk4.extraCss = # css "@import './theme.css';"; + theme = { + name = "Adwaita"; + }; iconTheme = { name = "Tela"; package = pkgs.tela-icon-theme; @@ -379,12 +374,23 @@ in ''; }; - programs = { - kitty = { - extraConfig = '' - include ${config.xdg.configHome}/kitty/theme.conf + # TODO: include is coming in the next release + /* + xdg.configFile.niri-config = { + enable = osConfig.programs.niri.enable; + target = "niri/override.kdl"; + text = '' + include "${config.xdg.configHome}/niri/config.kdl" + include "${config.programs.matugen.settings.templates.niri.output_path}" ''; }; + home.sessionVariables.NIRI_CONFIG = "${config.xdg.configHome}/niri/override.kdl"; + */ + + programs = { + kitty.extraConfig = '' + include ${config.programs.matugen.settings.templates.kitty.output_path} + ''; nixvim = { opts.termguicolors = true; @@ -405,15 +411,14 @@ in enable = true; settings = { config = { - reload_apps = true; + version_check = false; + reload_apps_list = { - kitty = config.programs.kitty.enable; waybar = config.programs.waybar.enable; dunst = config.services.dunst.enable; }; - set_wallpaper = true; - wallpaper_tool = "Swww"; + wallpaper.command = lib.getExe pkgs.swww; custom_colors = let @@ -465,23 +470,17 @@ in templates = let gtk = pkgs.writeText "gtk4.css" (import ./gtk.nix); + signal = + name: signal: + (pkgs.writeShellScript "kill-${name}" '' + pkill -${signal} -u "$USER" -x ${name} || : + ''); in { - kitty = { - input_path = ./kitty.conf; - output_path = "${config.xdg.configHome}/kitty/theme.conf"; - }; nvim = { input_path = ./nvim.vim; output_path = "${config.xdg.configHome}/nvim/colors/md3-evo.vim"; - }; - hyprland = { - input_path = ./hyprland.conf; - output_path = "${config.xdg.configHome}/hypr/theme.conf"; - }; - anyrun = { - input_path = ./anyrun.css; - output_path = "${config.xdg.configHome}/anyrun/theme.css"; + post_hook = signal "nvim" "USR1"; }; gtk3 = { input_path = gtk; @@ -495,15 +494,49 @@ in input_path = ./discord.css; output_path = "${config.xdg.configHome}/vesktop/themes/matugen.theme.css"; }; + } + // (lib.optionalAttrs osConfig.programs.niri.enable { + niri = { + input_path = ./niri.kdl; + output_path = "${config.xdg.configHome}/niri/md3-evo.kdl"; + }; + }) + // (lib.optionalAttrs config.programs.kitty.enable { + kitty = { + input_path = ./kitty.conf; + output_path = "${config.xdg.configHome}/kitty/theme.conf"; + post_hook = signal ".kitty-wrapped" "USR1"; + }; + }) + // (lib.optionalAttrs osConfig.programs.hyprland.enable { + hyprland = { + input_path = ./hyprland.conf; + output_path = "${config.xdg.configHome}/hypr/theme.conf"; + post_hook = pkgs.writeShellScript "reload-hyprland-theme" '' + if command -v hyprctl &> /dev/null; then + hyprctl reload + fi + ''; + }; + }) + // (lib.optionalAttrs config.programs.waybar.enable { waybar = { input_path = ./waybar.css; output_path = "${config.xdg.configHome}/waybar/style.css"; + post_hook = signal "waybar" "USR2"; }; + }) + // (lib.optionalAttrs config.services.swaync.enable { swaync = { input_path = ./swaync.css; output_path = "${config.xdg.configHome}/swaync/style.css"; + post_hook = pkgs.writeShellScript "reload-swaync" '' + if which swaync-client; then + swaync-client --reload-css + fi + ''; }; - }; + }); }; }; }; diff --git a/modules/home-manager/theme/niri.kdl b/modules/home-manager/theme/niri.kdl new file mode 100644 index 0000000..bedd67e --- /dev/null +++ b/modules/home-manager/theme/niri.kdl @@ -0,0 +1,12 @@ +layout { + gaps {{custom.padding}} + struts {{custom.double_padding}} +} + +overview { + backdrop-color "{{colors.surface.default.hex}}" +} + +window-rule { + geometry-corner-radius {{custom.radius}} +} diff --git a/modules/home-manager/theme/nvim.vim b/modules/home-manager/theme/nvim.vim index 6b0d6d9..85771f8 100644 --- a/modules/home-manager/theme/nvim.vim +++ b/modules/home-manager/theme/nvim.vim @@ -37,7 +37,7 @@ let g:terminal_color_14 = "{{colors.cyan.default.hex}}" let g:terminal_color_15 = "{{colors.on_surface_variant.default.hex}}" set termguicolors -set background=dark +set background={{mode | to_lower}} if exists("g:neovide") hi! Normal guibg={{colors.surface.default.hex}} guifg={{colors.on_surface.default.hex}} diff --git a/modules/nixos/desktops/niri.nix b/modules/nixos/desktops/niri.nix index fc7f283..b847b44 100644 --- a/modules/nixos/desktops/niri.nix +++ b/modules/nixos/desktops/niri.nix @@ -22,8 +22,8 @@ in home = { sessionVariables = { NIXOS_OZONE_WL = "1"; - GDK_BACKEND = "wayland,x11,*"; - QT_QPA_PLATFORM = "wayland;xcb"; + GDK_BACKEND = "wayland"; + QT_QPA_PLATFORM = "wayland"; SDL_VIDEODRIVER = "wayland"; }; @@ -32,6 +32,7 @@ in # fonts noto-fonts # gnome packages + qalculate-gtk evince baobab gnome.gvfs @@ -52,13 +53,6 @@ in }; programs = { - dankMaterialShell = { - enable = true; - niri = { - enableSpawn = true; - enableKeybinds = false; - }; - }; niri.settings = { binds = { "Mod+Left".action.focus-column-left = [ ]; @@ -75,29 +69,30 @@ in "Mod+Shift+Down".action.move-window-down-or-to-workspace-down = [ ]; "Mod+C".action.close-window = [ ]; - "Mod+M".action.center-window = [ ]; + /* + "Mod+M".action.spawn = [ + (pkgs.writeShellScript "qalculate" '' + if niri msg --json windows | jq -e 'any(.[]; .app_id == "qalculate-gtk")'; then + pkill qalculate-gtk + else + qalculate-gtk & + fi + '') + ]; + */ "Mod+T".action.spawn = [ "kitty" ]; "Mod+V".action.maximize-column = [ ]; - "Mod+P".action.fullscreen-window = [ ]; + "Mod+D".action.fullscreen-window = [ ]; + "Mod+P".action.toggle-window-floating = [ ]; - "Mod+Space".action.spawn = [ - "dms" - "ipc" - "spotlight" - "toggle" - ]; - "Mod+MouseMiddle".action.toggle-overview = [ ]; + "Mod+Shift+V".action.screenshot = [ ]; + # "Mod+Shift+C".action.pick-color = [ ]; }; + overview.zoom = 0.8; window-rules = [ { - geometry-corner-radius = { - top-left = 24.0; - top-right = 24.0; - bottom-left = 24.0; - bottom-right = 24.0; - }; clip-to-geometry = true; tiled-state = true; } @@ -109,6 +104,17 @@ in matches = [ { app-id = "firefox"; } ]; default-column-width.fixed = 1500; } + { + matches = [ { app-id = "qalculate-gtk"; } ]; + open-floating = true; + default-column-width.fixed = 1000; + default-window-height.fixed = 800; + default-floating-position = { + x = 0; + y = 0; + relative-to = "bottom"; + }; + } ]; layout = { always-center-single-column = true; @@ -128,17 +134,31 @@ in }; }; - programs.dankMaterialShell.greeter = { - enable = true; - compositor.name = "niri"; - configHome = "/home/${username}"; - }; - services = { kmscon = { enable = true; hwRender = true; }; + greetd = { + enable = true; + greeterManagesPlymouth = false; + settings = { + initial_session = { + command = "${pkgs.niri}/bin/niri-session"; + user = username; + }; + default_session = { + command = "${lib.getExe pkgs.tuigreet} --asterisks --remember --user-menu --cmd '${pkgs.niri}/bin/niri-session'"; + user = username; + }; + }; + }; + dbus = { + enable = true; + implementation = "broker"; + }; + pcscd.enable = true; + gvfs.enable = true; }; }; } diff --git a/modules/nixos/shell/firefox-pip.nix b/modules/nixos/shell/firefox-pip.nix index 2a63458..a843244 100644 --- a/modules/nixos/shell/firefox-pip.nix +++ b/modules/nixos/shell/firefox-pip.nix @@ -36,6 +36,23 @@ in "move ${pipPadding} ${pipPadding},${firefoxPipInitial}" ]; }; + programs.niri.settings.window-rules = [ + { + matches = [ + { + app-id = "firefox"; + title = "Picture-in-Picture"; + } + ]; + open-focused = false; + open-floating = true; + default-floating-position = { + x = homeConfig.theme.md3-evo.padding; + y = homeConfig.theme.md3-evo.padding; + relative-to = "top-left"; + }; + } + ]; }; }; } diff --git a/modules/nixos/shell/walker.nix b/modules/nixos/shell/walker.nix index 77655b0..d7e98a4 100644 --- a/modules/nixos/shell/walker.nix +++ b/modules/nixos/shell/walker.nix @@ -25,6 +25,7 @@ in "ignorealpha 0.3, anyrun" ]; }; + programs.niri.settings.binds."Mod+Space".action.spawn = [ (lib.getExe pkgs.walker) ]; home.packages = with pkgs; [ walker wl-clipboard diff --git a/modules/nixos/shell/waybar.nix b/modules/nixos/shell/waybar.nix index ec1fc97..4bca9d3 100644 --- a/modules/nixos/shell/waybar.nix +++ b/modules/nixos/shell/waybar.nix @@ -20,6 +20,8 @@ in enable = true; settings = { mainBar = { + layer = "top"; + height = 24; reload_style_on_change = true; exclusive = true; @@ -35,25 +37,24 @@ in modules-center = [ "clock" ]; - modules-right = - [ - "privacy" - "gamemode" - "tray" - "pulseaudio" - ] - ++ ( - if cfg.mobile then - [ "backlight" ] - else - [ - "custom/brightness" - ] - ) - ++ [ - # "custom/theme" - # "network" - ]; + modules-right = [ + "privacy" + "gamemode" + "tray" + "pulseaudio" + ] + ++ ( + if cfg.mobile then + [ "backlight" ] + else + [ + "custom/brightness" + ] + ) + ++ [ + # "custom/theme" + # "network" + ]; "pulseaudio" = { format = "{icon} {volume}%"; diff --git a/modules/nixos/usecases/windows-vm.nix b/modules/nixos/usecases/windows-vm.nix index 6d75cac..1f6541d 100644 --- a/modules/nixos/usecases/windows-vm.nix +++ b/modules/nixos/usecases/windows-vm.nix @@ -28,6 +28,19 @@ in ]; }; + # WARN: sometimes the VM will place hard-coded/hashed paths in the config, + # which breaks after NixOS updates because hashes change. + # The error might look something like + # "Unable to find efi firmware that is compatible with the current configuration". + # To fix this, manually edit the VM config in the VM manager in the XML tab of the Boot Options. + # Replace + # /nix/store/yd1rlziy0cnjjp78zc7wr9dcv5hah16w-qemu-10.1.0/share/qemu/edk2-x86_64-secure-code.fd + # /var/lib/libvirt/qemu/nvram/win11_VARS.fd + # with + # /run/libvirt/nix-ovmf/edk2-x86_64-secure-code.fd + # /var/lib/libvirt/qemu/nvram/win11_VARS.fd + + environment.systemPackages = with pkgs; [ virt-manager virt-viewer @@ -37,16 +50,13 @@ in win-virtio win-spice adwaita-icon-theme + qemu ]; virtualisation = { libvirtd = { enable = true; - qemu = { - swtpm.enable = true; - ovmf.enable = true; - ovmf.packages = [ pkgs.OVMFFull.fd ]; - }; + qemu.swtpm.enable = true; }; spiceUSBRedirection.enable = true; }; diff --git a/overlays/matugen/hm-module.nix b/overlays/matugen/hm-module.nix new file mode 100644 index 0000000..ba7e877 --- /dev/null +++ b/overlays/matugen/hm-module.nix @@ -0,0 +1,23 @@ +{ + config, + pkgs, + lib, + ... +}: +let + cfg = config.programs.matugen; +in +{ + options.programs.matugen = { + enable = lib.mkEnableOption "matugen"; + package = lib.mkPackageOption pkgs "matugen" { }; + settings = lib.mkOption { type = lib.types.attrs; }; + }; + + config = lib.mkIf cfg.enable { + home.packages = [ cfg.package ]; + xdg.configFile."matugen/config.toml".source = lib.mkIf (cfg.settings != null) ( + (pkgs.formats.toml { }).generate "matugen" cfg.settings + ); + }; +}