From 7eae6f1678fcf9599108042ccd6a458cd293d936 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thea=20Sch=C3=B6bl?= Date: Sat, 18 Jul 2026 11:55:10 +0200 Subject: [PATCH] feat: update system --- flake.lock | 8 +- flake.nix | 2 +- hosts/MONSTER/default.nix | 1 + .../modules/nixvim/base/formatting.nix | 2 + .../home-manager/modules/nixvim/default.nix | 1 + .../modules/nixvim/languages/typst.nix | 24 +++ modules/home-manager/programs/nixvim.nix | 25 +-- modules/home-manager/theme/md3-evo.nix | 181 +++++------------- modules/home-manager/theme/nvim.vim | 16 +- modules/home-manager/theme/theme.sh | 101 ++++++++++ modules/nixos/default.nix | 1 + modules/nixos/usecases/flatpak.nix | 138 +++++++++++++ 12 files changed, 345 insertions(+), 155 deletions(-) create mode 100644 modules/home-manager/modules/nixvim/languages/typst.nix create mode 100644 modules/home-manager/theme/theme.sh create mode 100644 modules/nixos/usecases/flatpak.nix diff --git a/flake.lock b/flake.lock index 9e0e465..6581df0 100644 --- a/flake.lock +++ b/flake.lock @@ -86,16 +86,16 @@ "systems": "systems_2" }, "locked": { - "lastModified": 1731508795, - "narHash": "sha256-+UibbVz5CTisKMms/5VXGe39FYr56qzaEtX4TWQPkjk=", + "lastModified": 1783421544, + "narHash": "sha256-msVlanBvdLsMeLdXnBQ6f9nRHKmDf7vhKoQMtyYbS8c=", "owner": "InioX", "repo": "matugen", - "rev": "cb9f81eb0150f6253895ea0adb1daa8534c15fc7", + "rev": "cf3c74c231e526121bd8e2ce0f1d04702301c342", "type": "github" }, "original": { "owner": "InioX", - "ref": "v2.4.1", + "ref": "cf3c74c231e526121bd8e2ce0f1d04702301c342", "repo": "matugen", "type": "github" } diff --git a/flake.nix b/flake.nix index 627bffc..02527aa 100644 --- a/flake.nix +++ b/flake.nix @@ -6,7 +6,7 @@ inputs.nixpkgs.follows = "nixpkgs"; }; matugen = { - url = "github:InioX/matugen?ref=v2.4.1"; + url = "github:InioX/matugen?ref=cf3c74c231e526121bd8e2ce0f1d04702301c342"; inputs.nixpkgs.follows = "nixpkgs"; }; nixvim = { diff --git a/hosts/MONSTER/default.nix b/hosts/MONSTER/default.nix index 48862ec..5f98cc8 100644 --- a/hosts/MONSTER/default.nix +++ b/hosts/MONSTER/default.nix @@ -32,6 +32,7 @@ svelte.enable = true; docker.enable = true; }; + flatpak.enable = true; windows-vm.enable = true; }; diff --git a/modules/home-manager/modules/nixvim/base/formatting.nix b/modules/home-manager/modules/nixvim/base/formatting.nix index 7ffe2a7..eb599b4 100644 --- a/modules/home-manager/modules/nixvim/base/formatting.nix +++ b/modules/home-manager/modules/nixvim/base/formatting.nix @@ -18,8 +18,10 @@ in enable = true; settings.formatters_by_ft = lib.mkIf cfg.prettier { javascript = [ "prettierd" ]; + javascriptreact = [ "prettierd" ]; markdown = [ "prettierd" ]; typescript = [ "prettierd" ]; + typescriptreact = [ "prettierd" ]; json = [ "prettierd" ]; yaml = [ "prettierd" ]; html = [ "prettierd" ]; diff --git a/modules/home-manager/modules/nixvim/default.nix b/modules/home-manager/modules/nixvim/default.nix index 3c3c3d9..cfbc720 100644 --- a/modules/home-manager/modules/nixvim/default.nix +++ b/modules/home-manager/modules/nixvim/default.nix @@ -52,6 +52,7 @@ ./languages/shell.nix ./languages/strudel.nix ./languages/svelte.nix + ./languages/typst.nix ./remaps/half-page-scroll.nix ./remaps/no-accidental-macro.nix diff --git a/modules/home-manager/modules/nixvim/languages/typst.nix b/modules/home-manager/modules/nixvim/languages/typst.nix new file mode 100644 index 0000000..7513358 --- /dev/null +++ b/modules/home-manager/modules/nixvim/languages/typst.nix @@ -0,0 +1,24 @@ +{ + lib, + config, + ... +}: +let + cfg = config.presets.languages.typst; +in +{ + options.presets.languages.typst = { + enable = lib.mkEnableOption "Typst"; + }; + + config = lib.mkIf cfg.enable { + lsp.servers.tinymist.enable = true; + plugins.typst-preview = { + enable = true; + lazyLoad = { + enable = true; + settings.ft = [ "typst" ]; + }; + }; + }; +} diff --git a/modules/home-manager/programs/nixvim.nix b/modules/home-manager/programs/nixvim.nix index be3d6a7..7247ad1 100644 --- a/modules/home-manager/programs/nixvim.nix +++ b/modules/home-manager/programs/nixvim.nix @@ -100,6 +100,7 @@ shell.enable = true; strudel.enable = true; svelte.enable = true; + typst.enable = true; }; remaps = { half-page-scroll.enable = true; @@ -131,20 +132,20 @@ }; signs_staged = { - add.text = "██"; - change.text = "🮙🮙"; - delete.text = "▂▂"; - topdelete.text = "🮂🮂"; - changedelete.text = "╲╲"; - untracked.text = "╳╳"; + add.text = "█ "; + change.text = "🮙 "; + delete.text = "▂ "; + topdelete.text = "🮂 "; + changedelete.text = "╲ "; + untracked.text = "╳ "; }; signs = { - add.text = " █"; - change.text = " 🮙"; - delete.text = " ▂"; - topdelete.text = " 🮂"; - changedelete.text = " ╲"; - untracked.text = " ╳"; + add.text = "█ "; + change.text = "🮙 "; + delete.text = "▂ "; + topdelete.text = "🮂 "; + changedelete.text = "╲ "; + untracked.text = "╳ "; }; }; }; diff --git a/modules/home-manager/theme/md3-evo.nix b/modules/home-manager/theme/md3-evo.nix index fb198fe..4f5ce03 100644 --- a/modules/home-manager/theme/md3-evo.nix +++ b/modules/home-manager/theme/md3-evo.nix @@ -23,16 +23,18 @@ in }; flavour = lib.mkOption { type = lib.types.enum [ - "content" - "expressive" - "fidelity" - "fruit-salad" - "monochrome" - "neutral" - "rainbow" - "tonal-spot" + "SchemeContent" + "SchemeExpressive" + "SchemeFidelity" + "SchemeFruitSalad" + "SchemeMonochrome" + "SchemeNeutral" + "SchemeRainbow" + "SchemeTonalSpot" + "SchemeVibrant" + "SchemeSmart" ]; - default = "tonal-spot"; + default = "SchemeSmart"; description = "The flavour of the theme"; }; contrast = lib.mkOption { @@ -189,106 +191,14 @@ in pkgs.zenity pkgs.sunwait ]; - text = - # sh - '' - WALLPAPER=${config.xdg.configHome}/matugen/wallpaper - STATE=${config.xdg.stateHome}/md3-evo - - SCHEME=$(dconf read /org/gnome/desktop/interface/color-scheme) - if [ "$SCHEME" = "'prefer-light'" ]; then - MODE="light" - else - MODE="dark" - fi - - if [ ! -d "$STATE" ]; then - mkdir -p "$STATE" - fi - if [ -f "$STATE/mode" ]; then - MODE=$(cat "$STATE/mode") - fi - - if [ $# -eq 0 ]; then - echo -e "\033[1mUsage:\033[0m mode|light|dark|auto|toggle|wallpaper" - exit 1 - elif [ "$1" = "mode" ]; then - echo -e "$MODE" - exit 0 - elif [ "$1" = "wallpaper" ]; then - if [ $# -eq 1 ]; then - PICKED=$(zenity --file-selection --file-filter='Images | *.png *.jpg *.jpeg *.svg *.bmp *.gif') - cp "$PICKED" "$WALLPAPER" - else - cp "$2" "$WALLPAPER" - fi - elif [ "$1" = "toggle" ]; then - if [ "$MODE" = "light" ]; then - MODE="dark" - else - MODE="light" - fi - echo "$MODE" > "$STATE/mode" - elif [ "$1" = "light" ] || [ "$1" = "dark" ] || [ "$1" == "auto" ]; then - MODE="$1" - echo "$MODE" > "$STATE/mode" - elif [ "$1" = "init" ]; then - echo -e "\033[1mSetting up matugen\033[0m" - else - echo -e "\033[31mInvalid argument\033[0m" - exit 1 - fi - - if [ ! -f $WALLPAPER ]; then - echo -e "\033[31,1mNo wallpaper set\033[0m" - 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 || :) - if [ "$TIME" = "DAY" ]; then - MODE="light" - NEXT=6 - else - MODE="dark" - NEXT=4 - fi - NEXT=$(sunwait report ${builtins.toString cfg.auto-dark.lat}N ${builtins.toString cfg.auto-dark.lon}E | awk "/Daylight:/ {print \$$NEXT}") - cat < /dev/null - [Unit] - Description=Next theme change timer - - [Timer] - OnCalendar=*-*-* $(date -d "$NEXT today + 5 minutes" +'%H:%M'):00 - AccuracySec=1min - - [Install] - WantedBy=timers.target - EOF - else - rm -f "$THEME_SERVICE_PATH" - fi - 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" - else - GTK_THEME="adw-gtk3-dark" - fi - - matugen image "$WALLPAPER" --type scheme-${cfg.flavour} --contrast ${builtins.toString cfg.contrast} --mode "$MODE" - awww img "$WALLPAPER" - - dconf write /org/gnome/desktop/interface/gtk-theme "'$GTK_THEME'" - dconf write /org/gnome/desktop/interface/color-scheme "'prefer-$MODE'" - dconf write /org/gnome/desktop/interface/icon-theme "'Tela'" - ''; + runtimeEnv = { + STATE = "/home/theaninova/.local/state/md3-evo"; + THEME_SERVICE_PATH = "${config.xdg.configHome}/systemd/user/theme-init.timer"; + FLAVOUR = toString cfg.flavour; + LAT = "${toString cfg.auto-dark.lat}N"; + LON = "${toString cfg.auto-dark.lon}E"; + }; + text = builtins.readFile ./theme.sh; } ); in @@ -297,9 +207,12 @@ in pkgs.adw-gtk3 pkgs.awww pkgs.tela-icon-theme + pkgs.adwaita-icon-theme + pkgs.adwaita-icon-theme-legacy + pkgs.bibata-cursors + pkgs.gnome-themes-extra theme-script ]; - gtk = { gtk3.extraCss = # css "@import './theme.css';"; @@ -311,12 +224,10 @@ in theme = { name = "Adwaita"; }; - /* - iconTheme = { - name = "Adwaita"; - package = pkgs.adwaita-icon-theme; - }; - */ + iconTheme = { + name = "Tela"; + package = pkgs.tela-icon-theme; + }; }; qt.platformTheme.name = "qtct"; @@ -401,6 +312,10 @@ in settings = { config = { version_check = false; + source_color_index = 0; + + contrast = cfg.contrast; + type = cfg.flavour; reload_apps_list = { waybar = config.programs.waybar.enable; @@ -438,20 +353,26 @@ in info = mkColor "semantic" "info"; }; - custom_keywords = { - inherit (cfg) flavour; - padding = builtins.toString cfg.padding; - double_padding = builtins.toString (cfg.padding * 2); - radius = builtins.toString cfg.radius; - transparency = builtins.toString cfg.transparency; - blur = builtins.toString cfg.blur; - contrast = builtins.toString cfg.contrast; - transparency_hex = - let - zeroPad = hex: if builtins.stringLength hex == 1 then "0${hex}" else hex; - in - zeroPad (lib.trivial.toHexString (builtins.floor (cfg.transparency * 255))); - }; + import_json_files = [ + (pkgs.writeText "keywords.json" ( + builtins.toJSON { + custom = { + inherit (cfg) flavour; + padding = toString cfg.padding; + double_padding = toString (cfg.padding * 2); + radius = toString cfg.radius; + transparency = toString cfg.transparency; + blur = toString cfg.blur; + contrast = toString cfg.contrast; + transparency_hex = + let + zeroPad = hex: if builtins.stringLength hex == 1 then "0${hex}" else hex; + in + zeroPad (lib.trivial.toHexString (builtins.floor (cfg.transparency * 255))); + }; + } + )) + ]; }; templates = diff --git a/modules/home-manager/theme/nvim.vim b/modules/home-manager/theme/nvim.vim index 69fcdab..1f8abe5 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={{mode | to_lower}} +set background={{mode | lower_case}} if exists("g:neovide") hi! Normal guibg={{colors.surface.default.hex}} guifg={{colors.on_surface.default.hex}} @@ -123,17 +123,17 @@ hi Added guifg={{colors.green.default.hex}} hi Changed guifg={{colors.blue.default.hex}} hi Removed guifg={{colors.red.default.hex}} -hi GitSignsAdd guibg={{colors.green_container.default.hex}} guifg={{colors.green.default.hex}} -hi GitSignsChange guibg={{colors.blue_container.default.hex}} guifg={{colors.blue.default.hex}} -hi GitSignsDelete guibg={{colors.red_container.default.hex}} guifg={{colors.red.default.hex}} -hi GitSignsTopdelete guifg={{colors.red_container.default.hex}} guifg={{colors.red.default.hex}} -hi GitSignsChangedelete guibg={{colors.yellow_container.default.hex}} guifg={{colors.yellow.default.hex}} -hi GitSignsUntracked guibg={{colors.surface.default.hex}} guifg={{colors.on_surface.default.hex}} +hi GitSignsAdd guibg={{colors.green_container.default.hex}} guifg={{colors.green.default.hex | auto_lightness: 40.0}} +hi GitSignsChange guibg={{colors.blue_container.default.hex}} guifg={{colors.blue.default.hex | auto_lightness: 30.0}} +hi GitSignsDelete guibg={{colors.red_container.default.hex}} guifg={{colors.red.default.hex | auto_lightness: 40.0}} +hi GitSignsTopdelete guibg={{colors.red_container.default.hex}} guifg={{colors.red.default.hex | auto_lightness: 40.0}} +hi GitSignsChangedelete guibg={{colors.yellow_container.default.hex}} guifg={{colors.yellow.default.hex | auto_lightness: 30.0}} +hi GitSignsUntracked guibg={{colors.surface.default.hex}} guifg={{colors.on_surface.default.hex | auto_lightness: 30.0}} hi GitSignsStagedAdd guibg={{colors.green_container.default.hex}} guifg={{colors.green.default.hex}} hi GitSignsStagedChange guibg={{colors.blue_container.default.hex}} guifg={{colors.blue.default.hex}} hi GitSignsStagedDelete guibg={{colors.red_container.default.hex}} guifg={{colors.red.default.hex}} -hi GitSignsStagedTopdelete guifg={{colors.red_container.default.hex}} guifg={{colors.red.default.hex}} +hi GitSignsStagedTopdelete guibg={{colors.red_container.default.hex}} guifg={{colors.red.default.hex}} hi GitSignsStagedChangedelete guibg={{colors.yellow_container.default.hex}} guifg={{colors.yellow.default.hex}} hi GitSignsStagedUntracked guibg={{colors.surface.default.hex}} guifg={{colors.on_surface.default.hex}} diff --git a/modules/home-manager/theme/theme.sh b/modules/home-manager/theme/theme.sh new file mode 100644 index 0000000..5db7726 --- /dev/null +++ b/modules/home-manager/theme/theme.sh @@ -0,0 +1,101 @@ +SCHEME=$(dconf read /org/gnome/desktop/interface/color-scheme) +if [ "$SCHEME" = "'prefer-light'" ]; then + MODE="light" +else + MODE="dark" +fi + +if [ ! -d "$STATE" ]; then + mkdir -p "$STATE" +fi +if [ -f "$STATE/mode" ]; then + MODE=$(cat "$STATE/mode") +fi + +if [ $# -eq 0 ]; then + echo -e "\033[1mUsage:\033[0m mode|light|dark|auto|toggle|wallpaper" + exit 1 +elif [ "$1" = "mode" ]; then + echo -e "$MODE" + exit 0 +elif [ "$1" = "wallpaper" ]; then + if [ $# -eq 1 ]; then + PICKED=$(zenity --file-selection --file-filter='Images | *.png *.jpg *.jpeg *.svg *.bmp *.gif') + else + dconf write /org/gnome/desktop/background/picture-uri "'file://$2'" + fi + dconf write /org/gnome/desktop/background/picture-uri "'file://$PICKED'" +elif [ "$1" = "wallpaper-dark" ]; then + if [ $# -eq 1 ]; then + PICKED=$(zenity --file-selection --file-filter='Images | *.png *.jpg *.jpeg *.svg *.bmp *.gif') + else + dconf write /org/gnome/desktop/background/picture-uri-dark "'file://$2'" + fi + dconf write /org/gnome/desktop/background/picture-uri-dark "'file://$PICKED'" +elif [ "$1" = "toggle" ]; then + if [ "$MODE" = "light" ]; then + MODE="dark" + else + MODE="light" + fi + echo "$MODE" >"$STATE/mode" +elif [ "$1" = "light" ] || [ "$1" = "dark" ] || [ "$1" == "auto" ]; then + MODE="$1" + echo "$MODE" >"$STATE/mode" +elif [ "$1" = "init" ]; then + echo -e "\033[1mSetting up matugen\033[0m" +else + echo -e "\033[31mInvalid argument\033[0m" + exit 1 +fi + +if [ "$MODE" = "auto" ]; then + TIME=$(sunwait poll "$LAT" "$LON" || :) + if [ "$TIME" = "DAY" ]; then + MODE="light" + NEXT=6 + else + MODE="dark" + NEXT=4 + fi + NEXT=$(sunwait report "$LAT" "$LON" | awk "/Daylight:/ {print \$$NEXT}") + cat </dev/null +[Unit] +Description=Next theme change timer + +[Timer] +OnCalendar=*-*-* $(date -d "$NEXT today + 5 minutes" +'%H:%M'):00 +AccuracySec=1min + +[Install] +WantedBy=timers.target +EOF +else + rm -f "$THEME_SERVICE_PATH" +fi +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" + WALLPAPER=$(dconf read /org/gnome/desktop/background/picture-uri | sed "s/'file:\/\///;s/'//g") +else + GTK_THEME="adw-gtk3-dark" + WALLPAPER=$(dconf read /org/gnome/desktop/background/picture-uri-dark | sed "s/'file:\/\///;s/'//g") +fi + +if [ ! -f "$WALLPAPER" ]; then + echo -e "\033[31,1mNo wallpaper set\033[0m" + exit 1 +fi + +matugen image "$WALLPAPER" --mode "$MODE" +awww img "$WALLPAPER" + +dconf write /org/gnome/desktop/interface/gtk-theme "'$GTK_THEME'" +dconf write /org/gnome/desktop/interface/color-scheme "'prefer-$MODE'" +dconf write /org/gnome/desktop/interface/icon-theme "'Tela'" diff --git a/modules/nixos/default.nix b/modules/nixos/default.nix index 8afc613..df698ff 100644 --- a/modules/nixos/default.nix +++ b/modules/nixos/default.nix @@ -29,6 +29,7 @@ ./usecases/3d-printing.nix ./usecases/development.nix + ./usecases/flatpak.nix ./usecases/gaming.nix ./usecases/localai.nix ./usecases/nix-ld.nix diff --git a/modules/nixos/usecases/flatpak.nix b/modules/nixos/usecases/flatpak.nix new file mode 100644 index 0000000..a5cbc64 --- /dev/null +++ b/modules/nixos/usecases/flatpak.nix @@ -0,0 +1,138 @@ +{ + config, + lib, + pkgs, + username, + ... +}: + +with lib; + +let + cfg = config.usecases.flatpak; + + home-path = "${config.home-manager.users.${username}.home.path}"; + home-files = "${config.home-manager.users.${username}.home-files}"; + icon_theme_name = "${config.home-manager.users.${username}.gtk.iconTheme.name}"; + theme_name = "${config.home-manager.users.${username}.gtk.theme.name}"; + cursor_theme_name = "${config.home-manager.users.${username}.gtk.cursorTheme.name}"; +in +let + gawk = "${pkgs.gawk}/bin/gawk"; + flatpak = "${pkgs.flatpak}/bin/flatpak"; + su = "${pkgs.su}/bin/su"; + cursor_theme_path = "${home-files}/.local/share/icons/${cursor_theme_name}"; + icon_theme_path = "${home-files}/.local/share/icons/${icon_theme_name}"; + theme_path = "${home-files}/.local/share/themes/${theme_name}"; + icon_theme_path_1 = "${home-path}/share/icons/${icon_theme_name}"; + theme_path_1 = "${home-path}/share/themes/${theme_name}"; +in +let + workaround = + # sh + '' + if [ ! -f /var/lib/flatpak/overrides/global ]; then + touch /var/lib/flatpak/overrides/global + fi + ${gawk} -i inplace '{gsub(/\/nix\/store[^;]*;|!\/nix\/store[^;]*;/,""); print}' /var/lib/flatpak/overrides/global + ${gawk} -i inplace '{gsub(/filesystems=/,"filesystems=${icon_theme_path};${theme_path};${cursor_theme_path};"); print}' /var/lib/flatpak/overrides/global + ${gawk} -i inplace '{gsub(/\/nix\/store[^;]*;|!\/nix\/store[^;]*;/,""); print}' "/home/${username}/.local/share/flatpak/overrides/global" + ${gawk} -i inplace '{gsub(/filesystems=/,"filesystems=${icon_theme_path};${theme_path};${cursor_theme_path};"); print}' "/home/${username}/.local/share/flatpak/overrides/global" + ${flatpak} override --env=GTK_THEME=${theme_name} + ${su} "${username}" -c '${flatpak} override --user --env=GTK_THEME=${theme_name}' + ''; +in +{ + options.usecases.flatpak = { + enable = mkEnableOption "Enable flatpak stuff"; + }; + + config = mkIf cfg.enable { + fonts.fontDir.enable = true; + + # Need to run + # flatpak --user override --filesystem=$HOME/.local/share/fonts:ro + # flatpak --user override --filesystem=$HOME/.icons:ro + # flatpak --user override --filesystem=/nix/store:ro + # flatpak --user override --filesystem=/run/current-system/sw/share/X11/fonts:ro + + system.fsPackages = [ pkgs.bindfs ]; + fileSystems = + let + mkRoSymBind = path: { + device = path; + fsType = "fuse.bindfs"; + options = [ + "ro" + "resolve-symlinks" + "x-gvfs-hide" + ]; + }; + fontsPkgs = + config.fonts.packages + ++ (with pkgs; [ + # Add your cursor themes and icon packages here + bibata-cursors + gnome-themes-extra + adwaita-icon-theme + tela-icon-theme + # etc. + ]); + x11Fonts = + pkgs.runCommand "X11-fonts" + { + preferLocalBuild = true; + nativeBuildInputs = with pkgs; [ + gzip + mkfontdir + ]; + } + ( + '' + mkdir -p "$out/share/fonts" + font_regexp='.*\.\(ttf\|ttc\|otb\|otf\|pcf\|pfa\|pfb\|bdf\)\(\.gz\)?' + '' + + (builtins.concatStringsSep "\n" ( + builtins.map (pkg: '' + find ${toString pkg} -regex "$font_regexp" \ + -exec ln -sf -t "$out/share/fonts" '{}' \; + '') fontsPkgs + )) + + '' + cd "$out/share/fonts" + mkfontscale + mkfontdir + cat $(find ${pkgs.font-alias}/ -name fonts.alias) >fonts.alias + '' + ); + aggregatedIcons = pkgs.buildEnv { + name = "system-icons"; + paths = fontsPkgs; + pathsToLink = [ + "/share/icons" + ]; + }; + in + { + "/usr/share/icons" = mkRoSymBind (aggregatedIcons + "/share/icons"); + "/usr/share/fonts" = mkRoSymBind (x11Fonts + "/share/fonts"); + }; + + services.flatpak.enable = true; + ##workaround for themes and icons + systemd.services.workaround-for-theme-and-icons = { + wantedBy = [ "multi-user.target" ]; + after = [ "systemd-user-sessions.service" ]; + before = [ "getty.target" ]; + script = workaround; + }; + home-manager.users.${username}.home.file = { + ".local/share/icons/${icon_theme_name}".source = + config.home-manager.users.${username}.lib.file.mkOutOfStoreSymlink + "${icon_theme_path_1}"; + ".local/share/themes/${theme_name}".source = + config.home-manager.users.${username}.lib.file.mkOutOfStoreSymlink + "${theme_path_1}"; + }; + }; +}