mirror of
https://github.com/elwrcl/copnix.git
synced 2026-10-31 06:18:03 +03:00
Compare commits
11
Commits
a8a34044dc
...
b3e875d876
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b3e875d876 | ||
|
|
0f83e5841e | ||
|
|
7beff3b25f | ||
|
|
9c3f671acf | ||
|
|
b2c3e75171 | ||
|
|
22100c3af9 | ||
|
|
a8ab95f5a0 | ||
|
|
c5caa9e9c5 | ||
|
|
3e318279b5 | ||
|
|
019f49a95d | ||
|
|
5734dd21b0 |
No files matched your search
@@ -1,2 +1,2 @@
|
|||||||
pocl 844a8c5b9d19 gen7: find libgbe and beignet's library in ../beignet next to the installed driver (relocatable install)
|
pocl 40a0f3c94206 gen7: report the GPU's real maximum clock (i915 gt_RP0_freq_mhz of the card with this PCI id) instead of a fixed 1000 MHz
|
||||||
libgbe 79c0fa63bccb backend: llvm.minnum/maxnum/minimum/maximum as compare + select (LLVM folds fmin/fmax into them; DaVinci Resolve)
|
libgbe 4db13eafb096 backend: keep the MAD bank conflict hint (any non-ternary use reset it, so both MAD sources landed in the same GRF bank: +28% float4 MAD throughput on IVB, 166 -> 212 GFLOPS); OCL_OUTPUT_KERNEL_STATS prints per-kernel SIMD width, spill strategy and code size
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Generated
+17
@@ -614,6 +614,7 @@
|
|||||||
"noctalia": "noctalia",
|
"noctalia": "noctalia",
|
||||||
"nyi": "nyi",
|
"nyi": "nyi",
|
||||||
"scx_soryu": "scx_soryu",
|
"scx_soryu": "scx_soryu",
|
||||||
|
"sidechery": "sidechery",
|
||||||
"theme-assets": "theme-assets",
|
"theme-assets": "theme-assets",
|
||||||
"themes": "themes",
|
"themes": "themes",
|
||||||
"valw": "valw",
|
"valw": "valw",
|
||||||
@@ -639,6 +640,22 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"sidechery": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1789219073,
|
||||||
|
"narHash": "sha256-cSLIxv+oJNQNIP754ZELih7UN62dIFbXfI68bhX6lWQ=",
|
||||||
|
"owner": "teidesu",
|
||||||
|
"repo": "sidechery",
|
||||||
|
"rev": "e015b37b16eaef6a6655dd34a46512c8b376b4dc",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "teidesu",
|
||||||
|
"repo": "sidechery",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"systems": {
|
"systems": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1681028828,
|
"lastModified": 1681028828,
|
||||||
|
|||||||
@@ -55,6 +55,10 @@
|
|||||||
url = "github:elwrcl/heliux";
|
url = "github:elwrcl/heliux";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
sidechery = {
|
||||||
|
url = "github:teidesu/sidechery";
|
||||||
|
flake = false;
|
||||||
|
};
|
||||||
theme-assets = {
|
theme-assets = {
|
||||||
url = "github:elwrcl/copland-theme";
|
url = "github:elwrcl/copland-theme";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
|||||||
@@ -58,12 +58,16 @@ in
|
|||||||
config.flake.homeModules.home-theme-kemuri
|
config.flake.homeModules.home-theme-kemuri
|
||||||
config.flake.homeModules.home-theme-gtk
|
config.flake.homeModules.home-theme-gtk
|
||||||
config.flake.homeModules.home-theme-qt
|
config.flake.homeModules.home-theme-qt
|
||||||
|
config.flake.homeModules.home-theme-mode-switch
|
||||||
config.flake.homeModules.home-theme-ghostty
|
config.flake.homeModules.home-theme-ghostty
|
||||||
config.flake.homeModules.home-theme-helix
|
config.flake.homeModules.home-theme-helix
|
||||||
config.flake.homeModules.home-theme-zellij
|
config.flake.homeModules.home-theme-zellij
|
||||||
config.flake.homeModules.home-theme-nushell
|
config.flake.homeModules.home-theme-nushell
|
||||||
config.flake.homeModules.home-theme-discord
|
config.flake.homeModules.home-theme-discord
|
||||||
config.flake.homeModules.home-theme-vscode
|
config.flake.homeModules.home-theme-vscode
|
||||||
|
config.flake.homeModules.home-theme-stylus
|
||||||
|
config.flake.homeModules.home-theme-sidechery
|
||||||
|
config.flake.homeModules.home-theme-obsidian
|
||||||
config.flake.homeModules.home-direnv
|
config.flake.homeModules.home-direnv
|
||||||
config.flake.homeModules.home-jujutsu
|
config.flake.homeModules.home-jujutsu
|
||||||
config.flake.homeModules.home-jujutsu-difftastic
|
config.flake.homeModules.home-jujutsu-difftastic
|
||||||
@@ -80,6 +84,7 @@ in
|
|||||||
config.flake.homeModules.home-icons
|
config.flake.homeModules.home-icons
|
||||||
config.flake.homeModules.home-browser-zen
|
config.flake.homeModules.home-browser-zen
|
||||||
config.flake.homeModules.home-browser-helium
|
config.flake.homeModules.home-browser-helium
|
||||||
|
config.flake.homeModules.home-browser-helium-sidechery
|
||||||
config.flake.homeModules.home-mimeapps
|
config.flake.homeModules.home-mimeapps
|
||||||
config.flake.homeModules.home-file-manager
|
config.flake.homeModules.home-file-manager
|
||||||
config.flake.homeModules.home-file-manager-actions
|
config.flake.homeModules.home-file-manager-actions
|
||||||
@@ -88,6 +93,8 @@ in
|
|||||||
config.flake.homeModules.home-nyi
|
config.flake.homeModules.home-nyi
|
||||||
config.flake.homeModules.home-valw
|
config.flake.homeModules.home-valw
|
||||||
config.flake.homeModules.home-discord
|
config.flake.homeModules.home-discord
|
||||||
|
config.flake.homeModules.home-thunderbird
|
||||||
|
config.flake.homeModules.home-obsidian
|
||||||
config.flake.homeModules.home-mpv
|
config.flake.homeModules.home-mpv
|
||||||
config.flake.homeModules.home-mpv-intel-hard
|
config.flake.homeModules.home-mpv-intel-hard
|
||||||
config.flake.homeModules.home-mpv-svp
|
config.flake.homeModules.home-mpv-svp
|
||||||
@@ -123,8 +130,11 @@ in
|
|||||||
config.flake.nixosModules.hw-intel-hard
|
config.flake.nixosModules.hw-intel-hard
|
||||||
config.flake.nixosModules.hw-ivb-drivers
|
config.flake.nixosModules.hw-ivb-drivers
|
||||||
config.flake.nixosModules.hw-udev
|
config.flake.nixosModules.hw-udev
|
||||||
|
config.flake.nixosModules.hw-keychron
|
||||||
config.flake.nixosModules.net-network-manager
|
config.flake.nixosModules.net-network-manager
|
||||||
config.flake.nixosModules.net-dpi-evasion
|
config.flake.nixosModules.net-dpi-evasion
|
||||||
|
config.flake.nixosModules.net-uxplay
|
||||||
|
config.flake.nixosModules.net-localsend
|
||||||
config.flake.nixosModules.service-appimage
|
config.flake.nixosModules.service-appimage
|
||||||
config.flake.nixosModules.service-flatpak
|
config.flake.nixosModules.service-flatpak
|
||||||
config.flake.nixosModules.service-fwupd
|
config.flake.nixosModules.service-fwupd
|
||||||
|
|||||||
@@ -0,0 +1,100 @@
|
|||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
# sidechery "sidebery" ported to chromium for helium built from source and side-loaded.
|
||||||
|
flake.homeModules.home-browser-helium-sidechery =
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
sidechery = pkgs.stdenv.mkDerivation (finalAttrs: {
|
||||||
|
pname = "sidechery";
|
||||||
|
version = (builtins.fromJSON (builtins.readFile "${inputs.sidechery}/package.json")).version;
|
||||||
|
src = inputs.sidechery;
|
||||||
|
|
||||||
|
pnpmDeps = pkgs.fetchPnpmDeps {
|
||||||
|
inherit (finalAttrs) pname version src;
|
||||||
|
pnpm = pkgs.pnpm_10;
|
||||||
|
fetcherVersion = 4;
|
||||||
|
hash = "sha256-c05e5Wchb3mq45cHcjjiUCAzi9RrhtKWunYJ7QK30wM=";
|
||||||
|
};
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
pkgs.nodejs
|
||||||
|
pkgs.pnpm_10
|
||||||
|
pkgs.pnpmConfigHook
|
||||||
|
];
|
||||||
|
|
||||||
|
buildPhase = ''
|
||||||
|
runHook preBuild
|
||||||
|
pnpm run build:chrome
|
||||||
|
runHook postBuild
|
||||||
|
'';
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
cp -r .output/chrome-mv3 $out
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
});
|
||||||
|
|
||||||
|
panelColors = [
|
||||||
|
"red"
|
||||||
|
"orange"
|
||||||
|
"yellow"
|
||||||
|
"green"
|
||||||
|
"cyan"
|
||||||
|
"purple"
|
||||||
|
"pink"
|
||||||
|
];
|
||||||
|
|
||||||
|
sidechery-styled = pkgs.runCommand "sidechery-styled" { } ''
|
||||||
|
cp -r ${sidechery} $out
|
||||||
|
chmod -R u+w $out
|
||||||
|
cat ${pkgs.writeText "sidechery-extra.css" config.elars.sidechery.extraCss} >> $out/styles/sidebar.css
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.elars.sidechery.extraCss = lib.mkOption {
|
||||||
|
type = lib.types.lines;
|
||||||
|
default = "";
|
||||||
|
description = ''
|
||||||
|
CSS appended to sidechery's sidebar stylesheet at build time, so
|
||||||
|
styling doesn't depend on the in-extension styles editor.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
config.xdg.configFile."sidechery/panels.json".text = builtins.toJSON {
|
||||||
|
ver = sidechery.version;
|
||||||
|
sidebar = {
|
||||||
|
panels = lib.genAttrs panelColors (color: {
|
||||||
|
type = 2; # PanelType.tabs
|
||||||
|
id = color;
|
||||||
|
name = color;
|
||||||
|
inherit color;
|
||||||
|
iconSVG = "icon_circle";
|
||||||
|
});
|
||||||
|
nav = panelColors ++ [
|
||||||
|
"collapse"
|
||||||
|
"settings"
|
||||||
|
"create_snapshot"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config.programs.helium = {
|
||||||
|
extraFlags = [ "--load-extension=${sidechery-styled}" ];
|
||||||
|
|
||||||
|
preferences = {
|
||||||
|
helium.browser.layout = 2;
|
||||||
|
extensions.commands."linux:Ctrl+S" = {
|
||||||
|
command_name = "_execute_action";
|
||||||
|
extension = "napehjbogfncaoogcckddbidjgcapclg";
|
||||||
|
global = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -11,6 +11,10 @@
|
|||||||
package = inputs.helium.packages.${system}.helium-widevine;
|
package = inputs.helium.packages.${system}.helium-widevine;
|
||||||
|
|
||||||
extensions = [
|
extensions = [
|
||||||
|
{
|
||||||
|
id = "clngdbkpkpeebahjckkjfobafhncgmne";
|
||||||
|
hash = "sha256-82toCWp5v/Crf35et50ISOw2Q66ZhJrCx59rhDVTRPk=";
|
||||||
|
}
|
||||||
{
|
{
|
||||||
id = "dkdnancajokhfclpjpplkhlkbhaeejob";
|
id = "dkdnancajokhfclpjpplkhlkbhaeejob";
|
||||||
hash = "sha256-hkEGW2JVQzeRmTpoPrWFoVG3sbCgHohnsr2b12rfeMg=";
|
hash = "sha256-hkEGW2JVQzeRmTpoPrWFoVG3sbCgHohnsr2b12rfeMg=";
|
||||||
@@ -57,7 +61,6 @@
|
|||||||
|
|
||||||
preferences = {
|
preferences = {
|
||||||
helium.browser = {
|
helium.browser = {
|
||||||
layout = 2;
|
|
||||||
zen_mode = true;
|
zen_mode = true;
|
||||||
zen_mode_sidebar_pinned = true;
|
zen_mode_sidebar_pinned = true;
|
||||||
zen_mode_top_chrome_pinned = true;
|
zen_mode_top_chrome_pinned = true;
|
||||||
@@ -65,7 +68,6 @@
|
|||||||
minimal_location_bar = true;
|
minimal_location_bar = true;
|
||||||
rounded_frame = false;
|
rounded_frame = false;
|
||||||
new_tab_next_to_active = false;
|
new_tab_next_to_active = false;
|
||||||
vertical_right_aligned = false;
|
|
||||||
show_back_button = true;
|
show_back_button = true;
|
||||||
show_extensions_button = true;
|
show_extensions_button = true;
|
||||||
show_media_button = true;
|
show_media_button = true;
|
||||||
|
|||||||
@@ -0,0 +1,39 @@
|
|||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
flake.homeModules.home-obsidian =
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
programs.obsidian = {
|
||||||
|
enable = true;
|
||||||
|
defaultSettings = {
|
||||||
|
app = {
|
||||||
|
promptDelete = false;
|
||||||
|
alwaysUpdateLinks = true;
|
||||||
|
newFileLocation = "current";
|
||||||
|
attachmentFolderPath = "attachments";
|
||||||
|
vimMode = false;
|
||||||
|
};
|
||||||
|
corePlugins = [
|
||||||
|
"file-explorer"
|
||||||
|
"global-search"
|
||||||
|
"switcher"
|
||||||
|
"graph"
|
||||||
|
"backlink"
|
||||||
|
"outgoing-link"
|
||||||
|
"tag-pane"
|
||||||
|
"page-preview"
|
||||||
|
"daily-notes"
|
||||||
|
"templates"
|
||||||
|
"note-composer"
|
||||||
|
"command-palette"
|
||||||
|
"editor-status"
|
||||||
|
"bookmarks"
|
||||||
|
"outline"
|
||||||
|
"word-count"
|
||||||
|
"file-recovery"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
vaults.notes.target = "Documents/Obsidian";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
flake.homeModules.home-thunderbird =
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
programs.thunderbird = {
|
||||||
|
enable = true;
|
||||||
|
profiles.default = {
|
||||||
|
isDefault = true;
|
||||||
|
settings = {
|
||||||
|
"mail.shell.checkDefaultClient" = false;
|
||||||
|
"mailnews.start_page.enabled" = false;
|
||||||
|
"mail.provider.enabled" = false;
|
||||||
|
"mailnews.message_display.disable_remote_image" = true;
|
||||||
|
"privacy.donottrackheader.enabled" = true;
|
||||||
|
"datareporting.healthreport.uploadEnabled" = false;
|
||||||
|
"datareporting.policy.dataSubmissionEnabled" = false;
|
||||||
|
"toolkit.telemetry.enabled" = false;
|
||||||
|
"app.update.auto" = false;
|
||||||
|
"intl.date_time.pattern_override.date_short" = "dd.MM.yyyy";
|
||||||
|
"ui.systemUsesDarkTheme" = 1;
|
||||||
|
"font.name.monospace.x-western" = "JetBrainsMono Nerd Font Mono";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -27,5 +27,29 @@
|
|||||||
|
|
||||||
accent = "cabaaa";
|
accent = "cabaaa";
|
||||||
};
|
};
|
||||||
|
elars.theme.paletteLight = inputs.themes.custom {
|
||||||
|
name = "Kemuri Susu Light";
|
||||||
|
author = "elars";
|
||||||
|
|
||||||
|
base00 = "d4c1a8"; # mSurface
|
||||||
|
base01 = "c5b29a"; # mSurfaceVariant
|
||||||
|
base02 = "a89682"; # mOutline
|
||||||
|
base03 = "736c5f"; # mShadow
|
||||||
|
base04 = "736b5e"; # mSecondary
|
||||||
|
base05 = "262524"; # mOnSurface
|
||||||
|
base06 = "3a3734";
|
||||||
|
base07 = "1e1d1b";
|
||||||
|
|
||||||
|
base08 = "b84242"; # red / mError
|
||||||
|
base09 = "9c7a4a"; # orange
|
||||||
|
base0A = "8a7140"; # yellow
|
||||||
|
base0B = "5e7a5c"; # green
|
||||||
|
base0C = "4f7a70"; # cyan
|
||||||
|
base0D = "4f6875"; # blue
|
||||||
|
base0E = "85606b"; # magenta
|
||||||
|
base0F = "594f46"; # brown
|
||||||
|
|
||||||
|
accent = "262524"; # mPrimary
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
flake.homeModules.home-theme-mode-switch =
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
variants = "${config.xdg.configHome}/elars-theme";
|
||||||
|
current = "${config.xdg.stateHome}/elars-theme/current";
|
||||||
|
|
||||||
|
switch = pkgs.writeShellScript "elars-theme-mode" ''
|
||||||
|
mode="''${1:-''${NOCTALIA_THEME_MODE:-dark}}"
|
||||||
|
[ "$mode" = light ] || mode=dark
|
||||||
|
${lib.getExe' pkgs.coreutils "mkdir"} -p "$(${lib.getExe' pkgs.coreutils "dirname"} ${lib.escapeShellArg current})"
|
||||||
|
${lib.getExe' pkgs.coreutils "ln"} -sfn ${lib.escapeShellArg variants}/"$mode" ${lib.escapeShellArg current}
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.elars.theme.currentVariantDir = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
readOnly = true;
|
||||||
|
default = current;
|
||||||
|
description = ''
|
||||||
|
Directory holding the active variant's files; point configs here
|
||||||
|
instead of at a fixed dark/light file.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
config = {
|
||||||
|
programs.noctalia.settings.hooks.theme_mode_changed = "${switch}";
|
||||||
|
|
||||||
|
home.activation.elarsThemeMode = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
|
||||||
|
if [ ! -e ${lib.escapeShellArg current} ]; then
|
||||||
|
run ${switch} ${config.programs.noctalia.settings.theme.mode or "dark"}
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
flake.homeModules.home-theme-obsidian =
|
||||||
|
{ config, ... }:
|
||||||
|
let
|
||||||
|
p = config.elars.theme.palette.withHashtag;
|
||||||
|
accent = p.accent or p.base06;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
programs.obsidian.defaultSettings = {
|
||||||
|
appearance = {
|
||||||
|
theme = "obsidian";
|
||||||
|
accentColor = accent;
|
||||||
|
baseFontSize = 15;
|
||||||
|
monospaceFontFamily = "JetBrainsMono Nerd Font Mono";
|
||||||
|
enabledCssSnippets = [ "kemuri" ];
|
||||||
|
};
|
||||||
|
cssSnippets = [
|
||||||
|
{
|
||||||
|
name = "kemuri";
|
||||||
|
text = ''
|
||||||
|
/* generated from elars.theme.palette */
|
||||||
|
.theme-dark {
|
||||||
|
--background-primary: ${p.base00};
|
||||||
|
--background-primary-alt: ${p.base01};
|
||||||
|
--background-secondary: ${p.base01};
|
||||||
|
--background-secondary-alt: ${p.base02};
|
||||||
|
--background-modifier-border: ${p.base02};
|
||||||
|
--background-modifier-hover: ${p.base02};
|
||||||
|
--text-normal: ${p.base05};
|
||||||
|
--text-muted: ${p.base04};
|
||||||
|
--text-faint: ${p.base03};
|
||||||
|
--text-accent: ${accent};
|
||||||
|
--text-on-accent: ${p.base00};
|
||||||
|
--interactive-accent: ${accent};
|
||||||
|
--text-selection: ${p.base02};
|
||||||
|
--color-red: ${p.base08};
|
||||||
|
--color-orange: ${p.base09};
|
||||||
|
--color-yellow: ${p.base0A};
|
||||||
|
--color-green: ${p.base0B};
|
||||||
|
--color-cyan: ${p.base0C};
|
||||||
|
--color-blue: ${p.base0D};
|
||||||
|
--color-purple: ${p.base0E};
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
--radius-s: 0px;
|
||||||
|
--radius-m: 0px;
|
||||||
|
--radius-l: 0px;
|
||||||
|
--radius-xl: 0px;
|
||||||
|
--input-radius: 0px;
|
||||||
|
--button-radius: 0px;
|
||||||
|
--checkbox-radius: 0px;
|
||||||
|
--tab-radius: 0px;
|
||||||
|
--shadow-s: none;
|
||||||
|
--shadow-l: none;
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -8,109 +8,206 @@
|
|||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
p = config.elars.theme.palette;
|
|
||||||
h = p.withHashtag;
|
|
||||||
rgb = hex: lib.concatMapStringsSep "," toString (config.elars.theme.hexToRgb hex);
|
rgb = hex: lib.concatMapStringsSep "," toString (config.elars.theme.hexToRgb hex);
|
||||||
accent = p.accent or p.base06;
|
|
||||||
foregrounds = {
|
|
||||||
Normal = p.base05;
|
|
||||||
Inactive = p.base04;
|
|
||||||
Active = accent;
|
|
||||||
Link = p.base0C;
|
|
||||||
Visited = p.base0E;
|
|
||||||
Negative = p.base08;
|
|
||||||
Neutral = p.base0A;
|
|
||||||
Positive = p.base0B;
|
|
||||||
};
|
|
||||||
|
|
||||||
colorSet =
|
|
||||||
name:
|
|
||||||
{
|
|
||||||
background,
|
|
||||||
alternate,
|
|
||||||
normal ? foregrounds.Normal,
|
|
||||||
inactive ? foregrounds.Inactive,
|
|
||||||
}:
|
|
||||||
let
|
|
||||||
fg = foregrounds // {
|
|
||||||
Normal = normal;
|
|
||||||
Inactive = inactive;
|
|
||||||
};
|
|
||||||
in
|
|
||||||
''
|
|
||||||
[Colors:${name}]
|
|
||||||
BackgroundNormal=${rgb background}
|
|
||||||
BackgroundAlternate=${rgb alternate}
|
|
||||||
DecorationFocus=${rgb accent}
|
|
||||||
DecorationHover=${rgb p.base03}
|
|
||||||
ForegroundActive=${rgb fg.Active}
|
|
||||||
ForegroundInactive=${rgb fg.Inactive}
|
|
||||||
ForegroundLink=${rgb fg.Link}
|
|
||||||
ForegroundNegative=${rgb fg.Negative}
|
|
||||||
ForegroundNeutral=${rgb fg.Neutral}
|
|
||||||
ForegroundNormal=${rgb fg.Normal}
|
|
||||||
ForegroundPositive=${rgb fg.Positive}
|
|
||||||
ForegroundVisited=${rgb fg.Visited}
|
|
||||||
'';
|
|
||||||
|
|
||||||
qtctColors =
|
|
||||||
{
|
|
||||||
text,
|
|
||||||
window,
|
|
||||||
base,
|
|
||||||
alternateBase,
|
|
||||||
button,
|
|
||||||
buttonText,
|
|
||||||
bright,
|
|
||||||
shadow,
|
|
||||||
}:
|
|
||||||
builtins.concatStringsSep ", " [
|
|
||||||
text # WindowText
|
|
||||||
button # Button
|
|
||||||
h.base03 # Light
|
|
||||||
h.base02 # Midlight
|
|
||||||
shadow # Dark
|
|
||||||
h.base03 # Mid
|
|
||||||
buttonText # Text
|
|
||||||
bright # BrightText
|
|
||||||
buttonText # ButtonText
|
|
||||||
base # Base
|
|
||||||
window # Window
|
|
||||||
shadow # Shadow
|
|
||||||
h.base03 # Highlight
|
|
||||||
bright # HighlightedText
|
|
||||||
h.base0C # Link
|
|
||||||
h.base0E # LinkVisited
|
|
||||||
alternateBase # AlternateBase
|
|
||||||
h.base01 # NoRole
|
|
||||||
h.base01 # ToolTipBase
|
|
||||||
text # ToolTipText
|
|
||||||
h.base04 # PlaceholderText
|
|
||||||
];
|
|
||||||
|
|
||||||
active = qtctColors {
|
|
||||||
text = h.base05;
|
|
||||||
window = h.base01;
|
|
||||||
base = h.base00;
|
|
||||||
alternateBase = h.base01;
|
|
||||||
button = h.base02;
|
|
||||||
buttonText = h.base05;
|
|
||||||
bright = h.base07;
|
|
||||||
shadow = h.base00;
|
|
||||||
};
|
|
||||||
|
|
||||||
disabled = qtctColors {
|
|
||||||
text = h.base04;
|
|
||||||
window = h.base01;
|
|
||||||
base = h.base00;
|
|
||||||
alternateBase = h.base01;
|
|
||||||
button = h.base01;
|
|
||||||
buttonText = h.base04;
|
|
||||||
bright = h.base06;
|
|
||||||
shadow = h.base00;
|
|
||||||
};
|
|
||||||
|
|
||||||
font = "JetBrainsMono Nerd Font,11,-1,5,50,0,0,0,0,0";
|
font = "JetBrainsMono Nerd Font,11,-1,5,50,0,0,0,0,0";
|
||||||
|
|
||||||
|
# qt6ct colour scheme + kdeglobals for one palette.
|
||||||
|
variant =
|
||||||
|
p:
|
||||||
|
let
|
||||||
|
h = p.withHashtag;
|
||||||
|
selection = if p.isLight then p.base02 else p.base03;
|
||||||
|
accent = p.accent or p.base06;
|
||||||
|
foregrounds = {
|
||||||
|
Normal = p.base05;
|
||||||
|
Inactive = p.base04;
|
||||||
|
Active = accent;
|
||||||
|
Link = p.base0C;
|
||||||
|
Visited = p.base0E;
|
||||||
|
Negative = p.base08;
|
||||||
|
Neutral = p.base0A;
|
||||||
|
Positive = p.base0B;
|
||||||
|
};
|
||||||
|
|
||||||
|
colorSet =
|
||||||
|
name:
|
||||||
|
{
|
||||||
|
background,
|
||||||
|
alternate,
|
||||||
|
normal ? foregrounds.Normal,
|
||||||
|
inactive ? foregrounds.Inactive,
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
fg = foregrounds // {
|
||||||
|
Normal = normal;
|
||||||
|
Inactive = inactive;
|
||||||
|
};
|
||||||
|
in
|
||||||
|
''
|
||||||
|
[Colors:${name}]
|
||||||
|
BackgroundNormal=${rgb background}
|
||||||
|
BackgroundAlternate=${rgb alternate}
|
||||||
|
DecorationFocus=${rgb accent}
|
||||||
|
DecorationHover=${rgb p.base03}
|
||||||
|
ForegroundActive=${rgb fg.Active}
|
||||||
|
ForegroundInactive=${rgb fg.Inactive}
|
||||||
|
ForegroundLink=${rgb fg.Link}
|
||||||
|
ForegroundNegative=${rgb fg.Negative}
|
||||||
|
ForegroundNeutral=${rgb fg.Neutral}
|
||||||
|
ForegroundNormal=${rgb fg.Normal}
|
||||||
|
ForegroundPositive=${rgb fg.Positive}
|
||||||
|
ForegroundVisited=${rgb fg.Visited}
|
||||||
|
'';
|
||||||
|
|
||||||
|
qtctColors =
|
||||||
|
{
|
||||||
|
text,
|
||||||
|
window,
|
||||||
|
base,
|
||||||
|
alternateBase,
|
||||||
|
button,
|
||||||
|
buttonText,
|
||||||
|
bright,
|
||||||
|
shadow,
|
||||||
|
}:
|
||||||
|
builtins.concatStringsSep ", " [
|
||||||
|
text # WindowText
|
||||||
|
button # Button
|
||||||
|
h.base03 # Light
|
||||||
|
h.base02 # Midlight
|
||||||
|
shadow # Dark
|
||||||
|
h.base03 # Mid
|
||||||
|
buttonText # Text
|
||||||
|
bright # BrightText
|
||||||
|
buttonText # ButtonText
|
||||||
|
base # Base
|
||||||
|
window # Window
|
||||||
|
shadow # Shadow
|
||||||
|
"#${selection}" # Highlight
|
||||||
|
bright # HighlightedText
|
||||||
|
h.base0C # Link
|
||||||
|
h.base0E # LinkVisited
|
||||||
|
alternateBase # AlternateBase
|
||||||
|
h.base01 # NoRole
|
||||||
|
h.base01 # ToolTipBase
|
||||||
|
text # ToolTipText
|
||||||
|
h.base04 # PlaceholderText
|
||||||
|
];
|
||||||
|
|
||||||
|
active = qtctColors {
|
||||||
|
text = h.base05;
|
||||||
|
window = h.base01;
|
||||||
|
base = h.base00;
|
||||||
|
alternateBase = h.base01;
|
||||||
|
button = h.base02;
|
||||||
|
buttonText = h.base05;
|
||||||
|
bright = h.base07;
|
||||||
|
shadow = h.base00;
|
||||||
|
};
|
||||||
|
|
||||||
|
disabled = qtctColors {
|
||||||
|
text = h.base04;
|
||||||
|
window = h.base01;
|
||||||
|
base = h.base00;
|
||||||
|
alternateBase = h.base01;
|
||||||
|
button = h.base01;
|
||||||
|
buttonText = h.base04;
|
||||||
|
bright = h.base06;
|
||||||
|
shadow = h.base00;
|
||||||
|
};
|
||||||
|
|
||||||
|
in
|
||||||
|
{
|
||||||
|
qt6ctColors = ''
|
||||||
|
[ColorScheme]
|
||||||
|
active_colors=${active}
|
||||||
|
inactive_colors=${active}
|
||||||
|
disabled_colors=${disabled}
|
||||||
|
'';
|
||||||
|
|
||||||
|
kdeglobals = ''
|
||||||
|
[General]
|
||||||
|
ColorScheme=${p.name}
|
||||||
|
Name=${p.name}
|
||||||
|
font=${font}
|
||||||
|
fixed=${font}
|
||||||
|
menuFont=${font}
|
||||||
|
toolBarFont=${font}
|
||||||
|
smallestReadableFont=JetBrainsMono Nerd Font,9,-1,5,50,0,0,0,0,0
|
||||||
|
|
||||||
|
[Icons]
|
||||||
|
Theme=int_nord
|
||||||
|
|
||||||
|
[KDE]
|
||||||
|
widgetStyle=Fusion
|
||||||
|
contrast=4
|
||||||
|
|
||||||
|
${colorSet "Window" {
|
||||||
|
background = p.base01;
|
||||||
|
alternate = p.base02;
|
||||||
|
}}
|
||||||
|
${colorSet "View" {
|
||||||
|
background = p.base00;
|
||||||
|
alternate = p.base01;
|
||||||
|
}}
|
||||||
|
${colorSet "Button" {
|
||||||
|
background = p.base02;
|
||||||
|
alternate = p.base01;
|
||||||
|
}}
|
||||||
|
${colorSet "Header" {
|
||||||
|
background = p.base01;
|
||||||
|
alternate = p.base02;
|
||||||
|
}}
|
||||||
|
${colorSet "Header][Inactive" {
|
||||||
|
background = p.base00;
|
||||||
|
alternate = p.base01;
|
||||||
|
normal = p.base04;
|
||||||
|
}}
|
||||||
|
${colorSet "Tooltip" {
|
||||||
|
background = p.base01;
|
||||||
|
alternate = p.base02;
|
||||||
|
}}
|
||||||
|
${colorSet "Complementary" {
|
||||||
|
background = p.base00;
|
||||||
|
alternate = p.base01;
|
||||||
|
}}
|
||||||
|
${colorSet "Selection" {
|
||||||
|
background = selection;
|
||||||
|
alternate = selection;
|
||||||
|
normal = p.base07;
|
||||||
|
inactive = p.base06;
|
||||||
|
}}
|
||||||
|
|
||||||
|
[WM]
|
||||||
|
activeBackground=${rgb p.base02}
|
||||||
|
activeBlend=${rgb p.base02}
|
||||||
|
activeForeground=${rgb p.base05}
|
||||||
|
inactiveBackground=${rgb p.base01}
|
||||||
|
inactiveBlend=${rgb p.base01}
|
||||||
|
inactiveForeground=${rgb p.base04}
|
||||||
|
|
||||||
|
[ColorEffects:Disabled]
|
||||||
|
Color=${rgb p.base01}
|
||||||
|
ColorAmount=0
|
||||||
|
ColorEffect=0
|
||||||
|
ContrastAmount=0.65
|
||||||
|
ContrastEffect=1
|
||||||
|
IntensityAmount=0.1
|
||||||
|
IntensityEffect=2
|
||||||
|
|
||||||
|
[ColorEffects:Inactive]
|
||||||
|
ChangeSelectionColor=true
|
||||||
|
Color=${rgb p.base02}
|
||||||
|
ColorAmount=0.025
|
||||||
|
ColorEffect=2
|
||||||
|
ContrastAmount=0.1
|
||||||
|
ContrastEffect=2
|
||||||
|
IntensityAmount=0
|
||||||
|
IntensityEffect=0
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
dir = config.elars.theme.currentVariantDir;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
qt = {
|
qt = {
|
||||||
@@ -122,104 +219,33 @@
|
|||||||
pkgs.qt6Packages.qt6ct
|
pkgs.qt6Packages.qt6ct
|
||||||
];
|
];
|
||||||
|
|
||||||
xdg.configFile."qt6ct/colors/kemuri.conf".text = ''
|
# Both variants are generated; home-theme-mode-switch picks one.
|
||||||
[ColorScheme]
|
xdg.configFile = lib.mkMerge [
|
||||||
active_colors=${active}
|
(lib.concatMapAttrs
|
||||||
inactive_colors=${active}
|
(mode: palette: {
|
||||||
disabled_colors=${disabled}
|
"elars-theme/${mode}/qt6ct-colors.conf".text = (variant palette).qt6ctColors;
|
||||||
'';
|
"elars-theme/${mode}/kdeglobals".text = (variant palette).kdeglobals;
|
||||||
|
})
|
||||||
|
{
|
||||||
|
dark = config.elars.theme.palette;
|
||||||
|
light = config.elars.theme.paletteLight;
|
||||||
|
}
|
||||||
|
)
|
||||||
|
{
|
||||||
|
"kdeglobals".source = config.lib.file.mkOutOfStoreSymlink "${dir}/kdeglobals";
|
||||||
|
"qt6ct/qt6ct.conf".text = ''
|
||||||
|
[Appearance]
|
||||||
|
style=Fusion
|
||||||
|
custom_palette=true
|
||||||
|
color_scheme_path=${dir}/qt6ct-colors.conf
|
||||||
|
standard_dialogs=default
|
||||||
|
|
||||||
xdg.configFile."qt6ct/qt6ct.conf".text = ''
|
[Fonts]
|
||||||
[Appearance]
|
fixed="${font}"
|
||||||
style=Fusion
|
general="${font}"
|
||||||
custom_palette=true
|
'';
|
||||||
color_scheme_path=${config.xdg.configHome}/qt6ct/colors/kemuri.conf
|
}
|
||||||
standard_dialogs=default
|
];
|
||||||
|
|
||||||
[Fonts]
|
|
||||||
fixed="${font}"
|
|
||||||
general="${font}"
|
|
||||||
'';
|
|
||||||
|
|
||||||
xdg.configFile."kdeglobals".text = ''
|
|
||||||
[General]
|
|
||||||
ColorScheme=${p.name}
|
|
||||||
Name=${p.name}
|
|
||||||
font=${font}
|
|
||||||
fixed=${font}
|
|
||||||
menuFont=${font}
|
|
||||||
toolBarFont=${font}
|
|
||||||
smallestReadableFont=JetBrainsMono Nerd Font,9,-1,5,50,0,0,0,0,0
|
|
||||||
|
|
||||||
[Icons]
|
|
||||||
Theme=int_nord
|
|
||||||
|
|
||||||
[KDE]
|
|
||||||
widgetStyle=Fusion
|
|
||||||
contrast=4
|
|
||||||
|
|
||||||
${colorSet "Window" {
|
|
||||||
background = p.base01;
|
|
||||||
alternate = p.base02;
|
|
||||||
}}
|
|
||||||
${colorSet "View" {
|
|
||||||
background = p.base00;
|
|
||||||
alternate = p.base01;
|
|
||||||
}}
|
|
||||||
${colorSet "Button" {
|
|
||||||
background = p.base02;
|
|
||||||
alternate = p.base01;
|
|
||||||
}}
|
|
||||||
${colorSet "Header" {
|
|
||||||
background = p.base01;
|
|
||||||
alternate = p.base02;
|
|
||||||
}}
|
|
||||||
${colorSet "Header][Inactive" {
|
|
||||||
background = p.base00;
|
|
||||||
alternate = p.base01;
|
|
||||||
normal = p.base04;
|
|
||||||
}}
|
|
||||||
${colorSet "Tooltip" {
|
|
||||||
background = p.base01;
|
|
||||||
alternate = p.base02;
|
|
||||||
}}
|
|
||||||
${colorSet "Complementary" {
|
|
||||||
background = p.base00;
|
|
||||||
alternate = p.base01;
|
|
||||||
}}
|
|
||||||
${colorSet "Selection" {
|
|
||||||
background = p.base03;
|
|
||||||
alternate = p.base03;
|
|
||||||
normal = p.base07;
|
|
||||||
inactive = p.base06;
|
|
||||||
}}
|
|
||||||
|
|
||||||
[WM]
|
|
||||||
activeBackground=${rgb p.base02}
|
|
||||||
activeBlend=${rgb p.base02}
|
|
||||||
activeForeground=${rgb p.base05}
|
|
||||||
inactiveBackground=${rgb p.base01}
|
|
||||||
inactiveBlend=${rgb p.base01}
|
|
||||||
inactiveForeground=${rgb p.base04}
|
|
||||||
|
|
||||||
[ColorEffects:Disabled]
|
|
||||||
Color=${rgb p.base01}
|
|
||||||
ColorAmount=0
|
|
||||||
ColorEffect=0
|
|
||||||
ContrastAmount=0.65
|
|
||||||
ContrastEffect=1
|
|
||||||
IntensityAmount=0.1
|
|
||||||
IntensityEffect=2
|
|
||||||
|
|
||||||
[ColorEffects:Inactive]
|
|
||||||
ChangeSelectionColor=true
|
|
||||||
Color=${rgb p.base02}
|
|
||||||
ColorAmount=0.025
|
|
||||||
ColorEffect=2
|
|
||||||
ContrastAmount=0.1
|
|
||||||
ContrastEffect=2
|
|
||||||
IntensityAmount=0
|
|
||||||
IntensityEffect=0
|
|
||||||
'';
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
# Baked into the sidechery build (see home-browser-helium-sidechery).
|
||||||
|
flake.homeModules.home-theme-sidechery =
|
||||||
|
{ config, ... }:
|
||||||
|
let
|
||||||
|
p = config.elars.theme.palette.withHashtag;
|
||||||
|
accent = p.accent or p.base06;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
elars.sidechery.extraCss = ''
|
||||||
|
/* generated from elars.theme.palette */
|
||||||
|
#root.root {
|
||||||
|
--frame-bg: ${p.base00};
|
||||||
|
--toolbar-bg: ${p.base01};
|
||||||
|
--s-accent: ${accent};
|
||||||
|
|
||||||
|
--nav-btn-active-shadow: inset 0 0 0 1px ${accent};
|
||||||
|
--nav-btn-len-margin: 2px;
|
||||||
|
--tabs-border-radius: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-color=red] { --color: ${p.base08}; }
|
||||||
|
[data-color=orange] { --color: ${p.base09}; }
|
||||||
|
[data-color=yellow] { --color: ${p.base0A}; }
|
||||||
|
[data-color=green] { --color: ${p.base0B}; }
|
||||||
|
[data-color=cyan],
|
||||||
|
[data-color=turquoise] { --color: ${p.base0C}; }
|
||||||
|
[data-color=blue] { --color: ${p.base0D}; }
|
||||||
|
[data-color=purple] { --color: ${p.base0E}; }
|
||||||
|
[data-color=pink] { --color: color-mix(in oklab, white 25%, ${p.base0E}); }
|
||||||
|
[data-color=gray] { --color: ${p.base04}; }
|
||||||
|
|
||||||
|
.Tab[data-pin=false] .fav {
|
||||||
|
margin: 0 var(--tabs-inner-gap) 0 var(--tabs-inner-gap);
|
||||||
|
}
|
||||||
|
|
||||||
|
.NavigationBar,
|
||||||
|
.NavigationBar .nav-item {
|
||||||
|
border-radius: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.top-horizontal-box {
|
||||||
|
margin-bottom: 2px;
|
||||||
|
margin-left: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.NavigationBar .nav-item .len {
|
||||||
|
font-size: .5rem;
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
flake.homeModules.home-theme-stylus =
|
||||||
|
{ config, ... }:
|
||||||
|
let
|
||||||
|
p = config.elars.theme.palette.withHashtag;
|
||||||
|
accent = p.accent or p.base06;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
xdg.configFile."stylus/kemuri.user.css".text = ''
|
||||||
|
/* ==UserStyle==
|
||||||
|
@name Kemuri (square)
|
||||||
|
@namespace copland
|
||||||
|
@version 1.0.0
|
||||||
|
@description Square corners, no shadows, kemuri palette. Generated from elars.theme.palette.
|
||||||
|
@author elars
|
||||||
|
==/UserStyle== */
|
||||||
|
|
||||||
|
@-moz-document regexp(".*") {
|
||||||
|
* {
|
||||||
|
border-radius: 0px !important;
|
||||||
|
box-shadow: none !important;
|
||||||
|
|
||||||
|
--dt-black: ${p.base00};
|
||||||
|
--dt-gray-0: ${p.base00};
|
||||||
|
--dt-gray-1: ${p.base01};
|
||||||
|
--dt-gray-2: ${p.base02};
|
||||||
|
--dt-gray-3: ${p.base03};
|
||||||
|
--dt-gray-4: ${p.base0F};
|
||||||
|
--dt-gray-5: ${p.base04};
|
||||||
|
--dt-gray-6: ${p.base04};
|
||||||
|
--dt-gray-7: ${p.base06};
|
||||||
|
--dt-gray-8: ${p.base06};
|
||||||
|
--dt-gray-9: ${p.base05};
|
||||||
|
--dt-gray-10: ${p.base05};
|
||||||
|
--dt-white: ${p.base07};
|
||||||
|
--dt-red-6: ${p.base08};
|
||||||
|
--dt-red-7: ${p.base08};
|
||||||
|
--dt-orange-6: ${p.base09};
|
||||||
|
--dt-orange-7: ${p.base09};
|
||||||
|
--dt-yellow: ${p.base0A};
|
||||||
|
--dt-green-6: ${p.base0B};
|
||||||
|
--dt-green-7: ${p.base0B};
|
||||||
|
--dt-cyan-6: ${p.base0C};
|
||||||
|
--dt-cyan-7: ${p.base0C};
|
||||||
|
--dt-blue-6: ${p.base0D};
|
||||||
|
--dt-blue-7: ${p.base0D};
|
||||||
|
--dt-blue-8: ${p.base0D};
|
||||||
|
--dt-magenta-7: ${p.base0E};
|
||||||
|
--dt-magenta-8: ${p.base0E};
|
||||||
|
}
|
||||||
|
|
||||||
|
html {
|
||||||
|
accent-color: ${accent};
|
||||||
|
caret-color: ${accent};
|
||||||
|
scrollbar-color: ${p.base03} transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
::selection {
|
||||||
|
background: ${accent};
|
||||||
|
color: ${p.base00};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -39,6 +39,14 @@
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
options.elars.theme.paletteLight = lib.mkOption {
|
||||||
|
type = lib.types.raw;
|
||||||
|
description = ''
|
||||||
|
Light variant of `elars.theme.palette`, used by consumers that
|
||||||
|
follow the noctalia light/dark mode (see home-theme-mode-switch).
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
options.elars.theme.hexToRgb = lib.mkOption {
|
options.elars.theme.hexToRgb = lib.mkOption {
|
||||||
type = lib.types.raw;
|
type = lib.types.raw;
|
||||||
default =
|
default =
|
||||||
|
|||||||
@@ -7,28 +7,19 @@
|
|||||||
system,
|
system,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
let
|
|
||||||
uxplay-fixed = pkgs.uxplay.override {
|
|
||||||
avahi = pkgs.avahi.override { withLibdnssdCompat = true; };
|
|
||||||
};
|
|
||||||
in
|
|
||||||
{
|
{
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
# apps
|
# apps
|
||||||
onlyoffice-desktopeditors
|
onlyoffice-desktopeditors
|
||||||
kdePackages.kdenlive
|
|
||||||
telegram-desktop
|
telegram-desktop
|
||||||
prismlauncher
|
prismlauncher
|
||||||
davinci-resolve
|
|
||||||
gparted-full
|
gparted-full
|
||||||
moonlight-qt
|
moonlight-qt
|
||||||
qbittorrent
|
qbittorrent
|
||||||
obs-studio
|
obs-studio
|
||||||
spotifast
|
spotifast
|
||||||
localsend
|
|
||||||
picotool
|
picotool
|
||||||
sunshine
|
sunshine
|
||||||
zapzap
|
|
||||||
loupe
|
loupe
|
||||||
gimp
|
gimp
|
||||||
wine
|
wine
|
||||||
@@ -64,7 +55,6 @@
|
|||||||
# phone
|
# phone
|
||||||
libimobiledevice
|
libimobiledevice
|
||||||
android-tools
|
android-tools
|
||||||
uxplay-fixed
|
|
||||||
usbmuxd
|
usbmuxd
|
||||||
libmtp
|
libmtp
|
||||||
scrcpy
|
scrcpy
|
||||||
|
|||||||
@@ -6,15 +6,12 @@
|
|||||||
programs.niri.enable = true;
|
programs.niri.enable = true;
|
||||||
nixpkgs.overlays = [
|
nixpkgs.overlays = [
|
||||||
(final: prev: {
|
(final: prev: {
|
||||||
xwayland-satellite =
|
xwayland-satellite = prev.xwayland-satellite.overrideAttrs (old: {
|
||||||
if prev.lib.versionOlder prev.xwayland-satellite.version "0.8.3" then
|
patches =
|
||||||
prev.xwayland-satellite.overrideAttrs (old: {
|
(old.patches or [ ])
|
||||||
patches = (old.patches or [ ]) ++ [
|
++ prev.lib.optional (prev.lib.versionOlder old.version "0.8.3") ./xwayland-satellite-no-focus-override-redirect.patch
|
||||||
./xwayland-satellite-no-focus-override-redirect.patch
|
++ prev.lib.optional (prev.lib.versionOlder old.version "0.8.4") ./xwayland-satellite-resizable-dialog-toplevel.patch;
|
||||||
];
|
});
|
||||||
})
|
|
||||||
else
|
|
||||||
prev.xwayland-satellite;
|
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,49 @@
|
|||||||
|
--- a/src/xstate/mod.rs 2026-10-10 02:55:59.663368893 +0300
|
||||||
|
+++ b/src/xstate/mod.rs 2026-10-10 02:55:59.699369500 +0300
|
||||||
|
@@ -1189,7 +1189,9 @@
|
||||||
|
match ty {
|
||||||
|
x if x == window_atoms.normal => return WindowRole::Toplevel,
|
||||||
|
x if x == window_atoms.dialog => {
|
||||||
|
- return WindowRole::new_basic(self.has_transient_for && motif_no_decor);
|
||||||
|
+ return WindowRole::new_basic(
|
||||||
|
+ self.has_transient_for && motif_no_decor && forced_size,
|
||||||
|
+ );
|
||||||
|
}
|
||||||
|
x if x == window_atoms.utility => {
|
||||||
|
return WindowRole::new_basic(motif_no_decor && forced_size);
|
||||||
|
--- a/src/xstate/tests.rs 2026-10-10 02:55:59.665368927 +0300
|
||||||
|
+++ b/src/xstate/tests.rs 2026-10-10 02:56:08.382515889 +0300
|
||||||
|
@@ -473,6 +473,33 @@
|
||||||
|
assert_eq!(win.guess_window_role(&win_types), WindowRole::Popup);
|
||||||
|
}
|
||||||
|
|
||||||
|
+ // https://github.com/Supreeeme/xwayland-satellite/issues/470
|
||||||
|
+ // A DIALOG with TRANSIENT_FOR and no Motif decorations which is resizable
|
||||||
|
+ // (min_size != max_size) should be a top-level, mirroring the UTILITY fix in #383.
|
||||||
|
+ // Otherwise the popup parent resolves to a hidden WM_CLIENT_LEADER and the
|
||||||
|
+ // window never appears (e.g. DaVinci Resolve's Project Manager).
|
||||||
|
+ // Window attributes are taken from the full xprop posted in #470 (DIALOG +
|
||||||
|
+ // NORMAL window types, _MOTIF_WM_HINTS decorations=0, resizable normal hints).
|
||||||
|
+ #[test]
|
||||||
|
+ fn davinci_resolve_project_manager() {
|
||||||
|
+ let win_types = WindowTypes::new();
|
||||||
|
+ let wm_normal_hints = WmNormalHints::new()
|
||||||
|
+ .user_pos(978, 270)
|
||||||
|
+ .user_size(1884, 1620)
|
||||||
|
+ .min_size(910, 640)
|
||||||
|
+ .max_size(2880, 1620)
|
||||||
|
+ .win_gravity(Gravity::Static);
|
||||||
|
+ let win = WindowRoleHeuristics {
|
||||||
|
+ has_transient_for: true,
|
||||||
|
+ motif_wm_hints: Some(motif::Hints::from([0x2_u32, 0x1, 0, 0, 0].as_slice())),
|
||||||
|
+ window_types: vec![win_types.dialog, win_types.normal],
|
||||||
|
+ wm_normal_hints: Some(wm_normal_hints.into()),
|
||||||
|
+ wm_class: Some("resolve".into()),
|
||||||
|
+ ..Default::default()
|
||||||
|
+ };
|
||||||
|
+ assert_eq!(win.guess_window_role(&win_types), WindowRole::Toplevel);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
// https://github.com/Supreeeme/xwayland-satellite/pull/390
|
||||||
|
// With Motif decorations, even a dialog with TRANSIENT_FOR is better treated as a top-level
|
||||||
|
#[test]
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
flake.nixosModules.hw-keychron =
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
services.udev.packages = [
|
||||||
|
(pkgs.writeTextDir "lib/udev/rules.d/70-keychron.rules" ''
|
||||||
|
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="3434", MODE="0660", TAG+="uaccess"
|
||||||
|
'')
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -14,9 +14,5 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
'';
|
'';
|
||||||
services.udev.extraRules = ''
|
|
||||||
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="3434", ATTRS{idProduct}=="d030", MODE="0660", TAG+="uaccess", TAG+="udev-acl"
|
|
||||||
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="3434", ATTRS{idProduct}=="0b11", MODE="0660", TAG+="uaccess", TAG+="udev-acl"
|
|
||||||
'';
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
flake.nixosModules.net-localsend =
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
programs.localsend = {
|
||||||
|
enable = true;
|
||||||
|
openFirewall = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
flake.nixosModules.net-uxplay =
|
||||||
|
{ pkgs, ... }:
|
||||||
|
let
|
||||||
|
uxplay = pkgs.uxplay.override {
|
||||||
|
avahi = pkgs.avahi.override { withLibdnssdCompat = true; };
|
||||||
|
};
|
||||||
|
uxplay-fixed-ports = pkgs.symlinkJoin {
|
||||||
|
name = "uxplay-fixed-ports";
|
||||||
|
paths = [ uxplay ];
|
||||||
|
nativeBuildInputs = [ pkgs.makeWrapper ];
|
||||||
|
postBuild = ''
|
||||||
|
wrapProgram $out/bin/uxplay --add-flags "-p"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
environment.systemPackages = [ uxplay-fixed-ports ];
|
||||||
|
|
||||||
|
services.avahi = {
|
||||||
|
enable = true;
|
||||||
|
nssmdns4 = true;
|
||||||
|
openFirewall = true;
|
||||||
|
publish = {
|
||||||
|
enable = true;
|
||||||
|
userServices = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
networking.firewall = {
|
||||||
|
allowedTCPPorts = [
|
||||||
|
7000
|
||||||
|
7001
|
||||||
|
7100
|
||||||
|
];
|
||||||
|
allowedUDPPorts = [
|
||||||
|
6000
|
||||||
|
6001
|
||||||
|
7011
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
Reference in new issue
Block a user