253 lines
9.1 KiB
Nix
253 lines
9.1 KiB
Nix
{
|
|
pkgs,
|
|
self,
|
|
nixpkgs,
|
|
lib,
|
|
config,
|
|
system,
|
|
...
|
|
}:
|
|
let
|
|
sfw-bgs = [
|
|
"2020-07-24-urbankitsune-bna-ych.jxl"
|
|
"2021-09-15-cloverhare-lotteplush.jxl"
|
|
"2022-05-02-anonfurryartist-giftart.jxl"
|
|
"2022-06-21-sammythetanuki-lotteplushpride.jxl"
|
|
"2022-11-15-wolfsifi-maff-me-leashed.jxl"
|
|
];
|
|
nsfw-bgs = [
|
|
"2020-07-24-urbankitsune-bna-ych.jxl"
|
|
"2021-09-15-cloverhare-lotteplush.jxl"
|
|
"2021-10-29-butterskunk-lotte-scat-buffet.jxl"
|
|
"2021-11-27-theroguez-lottegassyvore1.jxl"
|
|
"2021-12-12-baltnwolf-christmas-diaper-messy.jxl"
|
|
"2021-12-12-baltnwolf-christmas-diaper.jxl"
|
|
"2022-04-20-cloverhare-mxbatty-maffsie-train-plush.jxl"
|
|
"2022-04-20-cloverhare-mxbatty-me-train-maffsie-plush.jxl"
|
|
"2022-05-02-anonfurryartist-giftart.jxl"
|
|
"2022-06-21-sammythetanuki-lotteplushpride.jxl"
|
|
"2022-08-12-deathtoaster-funpit-scat.jxl"
|
|
"2022-08-15-deathtoaster-funpit-mud.jxl"
|
|
"2022-11-15-wolfsifi-maff-me-leashed.jxl"
|
|
"2022-12-27-rexyi-scatych.jxl"
|
|
"2023-03-09-rexyi-voredisposal-ych.jxl"
|
|
"2023-08-09-coldquarantine-lotte-eating-trash.jxl"
|
|
"2023-08-10-coldquarantine-lotte-eating-trash-diapers.jxl"
|
|
"2023-08-20-coldquarantine-lotte-eating-trash-clean.jxl"
|
|
];
|
|
mod = a: b: a - (a / b * b);
|
|
choose =
|
|
l: rand:
|
|
let
|
|
len = builtins.length l;
|
|
in
|
|
builtins.elemAt l (mod rand len);
|
|
hexToIntList = {
|
|
"0" = 0;
|
|
"1" = 1;
|
|
"2" = 2;
|
|
"3" = 3;
|
|
"4" = 4;
|
|
"5" = 5;
|
|
"6" = 6;
|
|
"7" = 7;
|
|
"8" = 8;
|
|
"9" = 9;
|
|
"a" = 10;
|
|
"b" = 11;
|
|
"c" = 12;
|
|
"d" = 13;
|
|
"e" = 14;
|
|
"f" = 15;
|
|
"A" = 10;
|
|
"B" = 11;
|
|
"C" = 12;
|
|
"D" = 13;
|
|
"E" = 14;
|
|
"F" = 15;
|
|
};
|
|
hexToInt =
|
|
s: lib.foldl (state: new: state * 16 + hexToIntList.${new}) 0 (lib.strings.stringToCharacters s);
|
|
seed = hexToInt (self.shortRev or nixpkgs.shortRev);
|
|
bg = choose (if config.isNSFW then nsfw-bgs else sfw-bgs) seed;
|
|
bgPng = pkgs.stdenv.mkDerivation {
|
|
name = "bg.png";
|
|
src = pkgs.emptyDirectory;
|
|
nativeBuildInputs = [ pkgs.imagemagick ];
|
|
buildPhase = ''
|
|
magick ${pkgs.art-lotte}/${bg} $out
|
|
'';
|
|
installPhase = "true";
|
|
};
|
|
qtctPalette = pkgs.writeText "colors.conf" (
|
|
with config.lib.stylix.colors;
|
|
''
|
|
[ColorScheme]
|
|
active_colors=#ff{{ base0C-hex }}, #ff${base01}, #ff${base01}, #ff${base05}, #ff${base03}, #ff${base04}, #ff{{ base0E-hex }}, #ff${base06}, #ff${base05}, #ff${base01}, #ff${base00}, #ff${base03}, #ff${base02}, #ff{{ base0E-hex }}, #ff${base09}, #ff${base08}, #ff${base02}, #ff${base05}, #ff${base01}, #ff{{ base0E-hex }}, #8f{{ base0E-hex }}
|
|
disabled_colors=#ff{{ base0F-hex }}, #ff${base01}, #ff${base01}, #ff${base05}, #ff${base03}, #ff${base04}, #ff{{ base0F-hex }}, #ff{{ base0F-hex }}, #ff{{ base0F-hex }}, #ff${base01}, #ff${base00}, #ff${base03}, #ff${base02}, #ff{{ base0E-hex }}, #ff${base09}, #ff${base08}, #ff${base02}, #ff${base05}, #ff${base01}, #ff{{ base0F-hex }}, #8f{{ base0F-hex }}
|
|
inactive_colors=#ff{{ base0C-hex }}, #ff${base01}, #ff${base01}, #ff${base05}, #ff${base03}, #ff${base04}, #ff{{ base0E-hex }}, #ff${base06}, #ff${base05}, #ff${base01}, #ff${base00}, #ff${base03}, #ff${base02}, #ff{{ base0E-hex }}, #ff${base09}, #ff${base08}, #ff${base02}, #ff${base05}, #ff${base01}, #ff{{ base0E-hex }}, #8f{{ base0E-hex }}
|
|
''
|
|
);
|
|
in
|
|
{
|
|
home-manager.users.root.stylix.targets.kde.enable = lib.mkForce false;
|
|
home-manager.users.darkkirb.imports = [
|
|
{
|
|
xdg.configFile = {
|
|
"qt5ct/qt5ct.conf".text = lib.generators.toINI { } {
|
|
Appearance = {
|
|
custom_palette = true;
|
|
color_scheme_path = "${qtctPalette}";
|
|
standard_dialogs = "xdgdesktopportal";
|
|
};
|
|
};
|
|
"qt6ct/qt6ct.conf".text = lib.generators.toINI { } {
|
|
Appearance = {
|
|
custom_palette = true;
|
|
color_scheme_path = "${qtctPalette}";
|
|
standard_dialogs = "xdgdesktopportal";
|
|
};
|
|
};
|
|
};
|
|
}
|
|
{
|
|
stylix.targets.kde.enable = lib.mkForce (config.isGraphical && !config.isSway);
|
|
}
|
|
(
|
|
if config.isGraphical && !config.isSway then
|
|
{ config, lib, ... }:
|
|
{
|
|
home.activation.konsolerc = lib.hm.dag.entryAfter [ "stylixLookAndFeel" ] ''
|
|
PATH="${config.home.path}/bin:$PATH:${pkgs.jq}"
|
|
palette=$HOME/.config/stylix/palette.json
|
|
scheme=$HOME/.local/share/konsole/Stylix.colorscheme
|
|
|
|
if ! [ -f $palette ]; then
|
|
echo "Palette doesn't exist"
|
|
else
|
|
json=$( cat $palette )
|
|
|
|
hex_to_rgb() {
|
|
hex=$1
|
|
r=$((16#''${hex:0:2}))
|
|
g=$((16#''${hex:2:2}))
|
|
b=$((16#''${hex:4:2}))
|
|
echo "$r,$g,$b"
|
|
}
|
|
|
|
for base in base00 base01 base02 base03 base04 base05 base06 base07 base08 base09 base0A base0B base0C base0D base0E base0F; do
|
|
hex=$(echo "$json" | jq -r ".$base")
|
|
rgb=$(hex_to_rgb "$hex")
|
|
declare "''${base}_rgb=$rgb"
|
|
done
|
|
|
|
mustache_template="
|
|
[Background]
|
|
Color={{base00-rgb-r}},{{base00-rgb-g}},{{base00-rgb-b}}
|
|
[BackgroundIntense]
|
|
Color={{base03-rgb-r}},{{base03-rgb-g}},{{base03-rgb-b}}
|
|
[Color0]
|
|
Color={{base00-rgb-r}},{{base00-rgb-g}},{{base00-rgb-b}}
|
|
[Color0Intense]
|
|
Color={{base03-rgb-r}},{{base03-rgb-g}},{{base03-rgb-b}}
|
|
[Color1]
|
|
Color={{base08-rgb-r}},{{base08-rgb-g}},{{base08-rgb-b}}
|
|
[Color1Intense]
|
|
Color={{base08-rgb-r}},{{base08-rgb-g}},{{base08-rgb-b}}
|
|
[Color2]
|
|
Color={{base0B-rgb-r}},{{base0B-rgb-g}},{{base0B-rgb-b}}
|
|
[Color2Intense]
|
|
Color={{base0B-rgb-r}},{{base0B-rgb-g}},{{base0B-rgb-b}}
|
|
[Color3]
|
|
Color={{base0A-rgb-r}},{{base0A-rgb-g}},{{base0A-rgb-b}}
|
|
[Color3Intense]
|
|
Color={{base0A-rgb-r}},{{base0A-rgb-g}},{{base0A-rgb-b}}
|
|
[Color4]
|
|
Color={{base0D-rgb-r}},{{base0D-rgb-g}},{{base0D-rgb-b}}
|
|
[Color4Intense]
|
|
Color={{base0D-rgb-r}},{{base0D-rgb-g}},{{base0D-rgb-b}}
|
|
[Color5]
|
|
Color={{base0E-rgb-r}},{{base0E-rgb-g}},{{base0E-rgb-b}}
|
|
[Color5Intense]
|
|
Color={{base0E-rgb-r}},{{base0E-rgb-g}},{{base0E-rgb-b}}
|
|
[Color6]
|
|
Color={{base0C-rgb-r}},{{base0C-rgb-g}},{{base0C-rgb-b}}
|
|
[Color6Intense]
|
|
Color={{base0C-rgb-r}},{{base0C-rgb-g}},{{base0C-rgb-b}}
|
|
[Color7]
|
|
Color={{base05-rgb-r}},{{base05-rgb-g}},{{base05-rgb-b}}
|
|
[Color7Intense]
|
|
Color={{base07-rgb-r}},{{base07-rgb-g}},{{base07-rgb-b}}
|
|
[Foreground]
|
|
Color={{base05-rgb-r}},{{base05-rgb-g}},{{base05-rgb-b}}
|
|
[ForegroundIntense]
|
|
Color={{base07-rgb-r}},{{base07-rgb-g}},{{base07-rgb-b}}
|
|
[General]
|
|
Description=Stylix
|
|
Opacity=0.75
|
|
Wallpaper=
|
|
"
|
|
populated_template=$(echo "$mustache_template" \
|
|
| sed "s/{{base00-rgb-r}},{{base00-rgb-g}},{{base00-rgb-b}}/$base00_rgb/g" \
|
|
| sed "s/{{base03-rgb-r}},{{base03-rgb-g}},{{base03-rgb-b}}/$base03_rgb/g" \
|
|
| sed "s/{{base08-rgb-r}},{{base08-rgb-g}},{{base08-rgb-b}}/$base08_rgb/g" \
|
|
| sed "s/{{base0B-rgb-r}},{{base0B-rgb-g}},{{base0B-rgb-b}}/$base0B_rgb/g" \
|
|
| sed "s/{{base0A-rgb-r}},{{base0A-rgb-g}},{{base0A-rgb-b}}/$base0A_rgb/g" \
|
|
| sed "s/{{base0D-rgb-r}},{{base0D-rgb-g}},{{base0D-rgb-b}}/$base0D_rgb/g" \
|
|
| sed "s/{{base0E-rgb-r}},{{base0E-rgb-g}},{{base0E-rgb-b}}/$base0E_rgb/g" \
|
|
| sed "s/{{base0C-rgb-r}},{{base0C-rgb-g}},{{base0C-rgb-b}}/$base0C_rgb/g" \
|
|
| sed "s/{{base05-rgb-r}},{{base05-rgb-g}},{{base05-rgb-b}}/$base05_rgb/g" \
|
|
| sed "s/{{base07-rgb-r}},{{base07-rgb-g}},{{base07-rgb-b}}/$base07_rgb/g")
|
|
echo "$populated_template" > $scheme
|
|
fi
|
|
|
|
'';
|
|
}
|
|
else
|
|
{ }
|
|
)
|
|
];
|
|
|
|
stylix = {
|
|
enable = system != "riscv64-linux";
|
|
image = bgPng;
|
|
polarity = "dark";
|
|
fonts = {
|
|
serif = {
|
|
package = pkgs.noto-fonts;
|
|
name = "Noto Serif";
|
|
};
|
|
sansSerif = {
|
|
package = pkgs.noto-fonts;
|
|
name = "Noto Sans";
|
|
};
|
|
monospace = {
|
|
package = pkgs.nerdfonts.override {
|
|
fonts = [
|
|
"FiraCode"
|
|
"Noto"
|
|
];
|
|
};
|
|
name = "FiraCode Nerd Font Mono";
|
|
};
|
|
emoji = {
|
|
package = pkgs.noto-fonts-emoji;
|
|
name = "Noto Color Emoji";
|
|
};
|
|
};
|
|
};
|
|
home-manager.sharedModules = [
|
|
{
|
|
stylix.targets = {
|
|
kde.enable = config.isGraphical && !config.isSway;
|
|
};
|
|
}
|
|
];
|
|
environment.systemPackages = [
|
|
(pkgs.writeTextDir "share/sddm/themes/breeze/theme.conf.user" ''
|
|
[General]
|
|
background=${bgPng}
|
|
type=image
|
|
'')
|
|
];
|
|
}
|