mirror of
https://github.com/Theaninova/TheaninovOS.git
synced 2026-09-08 07:54:40 +00:00
feat: update system
This commit is contained in:
Generated
+4
-4
@@ -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"
|
||||
}
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
svelte.enable = true;
|
||||
docker.enable = true;
|
||||
};
|
||||
flatpak.enable = true;
|
||||
windows-vm.enable = true;
|
||||
};
|
||||
|
||||
|
||||
@@ -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" ];
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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" ];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -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 = "╳ ";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@@ -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 <<EOF | tee "$THEME_SERVICE_PATH" > /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 =
|
||||
|
||||
@@ -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}}
|
||||
|
||||
|
||||
@@ -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 <<EOF | tee "$THEME_SERVICE_PATH" >/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'"
|
||||
@@ -29,6 +29,7 @@
|
||||
|
||||
./usecases/3d-printing.nix
|
||||
./usecases/development.nix
|
||||
./usecases/flatpak.nix
|
||||
./usecases/gaming.nix
|
||||
./usecases/localai.nix
|
||||
./usecases/nix-ld.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}";
|
||||
};
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user