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)
|
||||
libgbe 79c0fa63bccb backend: llvm.minnum/maxnum/minimum/maximum as compare + select (LLVM folds fmin/fmax into them; DaVinci Resolve)
|
||||
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 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",
|
||||
"nyi": "nyi",
|
||||
"scx_soryu": "scx_soryu",
|
||||
"sidechery": "sidechery",
|
||||
"theme-assets": "theme-assets",
|
||||
"themes": "themes",
|
||||
"valw": "valw",
|
||||
@@ -639,6 +640,22 @@
|
||||
"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": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
|
||||
@@ -55,6 +55,10 @@
|
||||
url = "github:elwrcl/heliux";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
sidechery = {
|
||||
url = "github:teidesu/sidechery";
|
||||
flake = false;
|
||||
};
|
||||
theme-assets = {
|
||||
url = "github:elwrcl/copland-theme";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
|
||||
@@ -58,12 +58,16 @@ in
|
||||
config.flake.homeModules.home-theme-kemuri
|
||||
config.flake.homeModules.home-theme-gtk
|
||||
config.flake.homeModules.home-theme-qt
|
||||
config.flake.homeModules.home-theme-mode-switch
|
||||
config.flake.homeModules.home-theme-ghostty
|
||||
config.flake.homeModules.home-theme-helix
|
||||
config.flake.homeModules.home-theme-zellij
|
||||
config.flake.homeModules.home-theme-nushell
|
||||
config.flake.homeModules.home-theme-discord
|
||||
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-jujutsu
|
||||
config.flake.homeModules.home-jujutsu-difftastic
|
||||
@@ -80,6 +84,7 @@ in
|
||||
config.flake.homeModules.home-icons
|
||||
config.flake.homeModules.home-browser-zen
|
||||
config.flake.homeModules.home-browser-helium
|
||||
config.flake.homeModules.home-browser-helium-sidechery
|
||||
config.flake.homeModules.home-mimeapps
|
||||
config.flake.homeModules.home-file-manager
|
||||
config.flake.homeModules.home-file-manager-actions
|
||||
@@ -88,6 +93,8 @@ in
|
||||
config.flake.homeModules.home-nyi
|
||||
config.flake.homeModules.home-valw
|
||||
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-intel-hard
|
||||
config.flake.homeModules.home-mpv-svp
|
||||
@@ -123,8 +130,11 @@ in
|
||||
config.flake.nixosModules.hw-intel-hard
|
||||
config.flake.nixosModules.hw-ivb-drivers
|
||||
config.flake.nixosModules.hw-udev
|
||||
config.flake.nixosModules.hw-keychron
|
||||
config.flake.nixosModules.net-network-manager
|
||||
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-flatpak
|
||||
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;
|
||||
|
||||
extensions = [
|
||||
{
|
||||
id = "clngdbkpkpeebahjckkjfobafhncgmne";
|
||||
hash = "sha256-82toCWp5v/Crf35et50ISOw2Q66ZhJrCx59rhDVTRPk=";
|
||||
}
|
||||
{
|
||||
id = "dkdnancajokhfclpjpplkhlkbhaeejob";
|
||||
hash = "sha256-hkEGW2JVQzeRmTpoPrWFoVG3sbCgHohnsr2b12rfeMg=";
|
||||
@@ -57,7 +61,6 @@
|
||||
|
||||
preferences = {
|
||||
helium.browser = {
|
||||
layout = 2;
|
||||
zen_mode = true;
|
||||
zen_mode_sidebar_pinned = true;
|
||||
zen_mode_top_chrome_pinned = true;
|
||||
@@ -65,7 +68,6 @@
|
||||
minimal_location_bar = true;
|
||||
rounded_frame = false;
|
||||
new_tab_next_to_active = false;
|
||||
vertical_right_aligned = false;
|
||||
show_back_button = true;
|
||||
show_extensions_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";
|
||||
};
|
||||
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
|
||||
p = config.elars.theme.palette;
|
||||
h = p.withHashtag;
|
||||
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";
|
||||
|
||||
# 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
|
||||
{
|
||||
qt = {
|
||||
@@ -122,104 +219,33 @@
|
||||
pkgs.qt6Packages.qt6ct
|
||||
];
|
||||
|
||||
xdg.configFile."qt6ct/colors/kemuri.conf".text = ''
|
||||
[ColorScheme]
|
||||
active_colors=${active}
|
||||
inactive_colors=${active}
|
||||
disabled_colors=${disabled}
|
||||
'';
|
||||
# Both variants are generated; home-theme-mode-switch picks one.
|
||||
xdg.configFile = lib.mkMerge [
|
||||
(lib.concatMapAttrs
|
||||
(mode: palette: {
|
||||
"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 = ''
|
||||
[Appearance]
|
||||
style=Fusion
|
||||
custom_palette=true
|
||||
color_scheme_path=${config.xdg.configHome}/qt6ct/colors/kemuri.conf
|
||||
standard_dialogs=default
|
||||
[Fonts]
|
||||
fixed="${font}"
|
||||
general="${font}"
|
||||
'';
|
||||
}
|
||||
];
|
||||
|
||||
[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 {
|
||||
type = lib.types.raw;
|
||||
default =
|
||||
|
||||
@@ -7,28 +7,19 @@
|
||||
system,
|
||||
...
|
||||
}:
|
||||
let
|
||||
uxplay-fixed = pkgs.uxplay.override {
|
||||
avahi = pkgs.avahi.override { withLibdnssdCompat = true; };
|
||||
};
|
||||
in
|
||||
{
|
||||
environment.systemPackages = with pkgs; [
|
||||
# apps
|
||||
onlyoffice-desktopeditors
|
||||
kdePackages.kdenlive
|
||||
telegram-desktop
|
||||
prismlauncher
|
||||
davinci-resolve
|
||||
gparted-full
|
||||
moonlight-qt
|
||||
qbittorrent
|
||||
obs-studio
|
||||
spotifast
|
||||
localsend
|
||||
picotool
|
||||
sunshine
|
||||
zapzap
|
||||
loupe
|
||||
gimp
|
||||
wine
|
||||
@@ -64,7 +55,6 @@
|
||||
# phone
|
||||
libimobiledevice
|
||||
android-tools
|
||||
uxplay-fixed
|
||||
usbmuxd
|
||||
libmtp
|
||||
scrcpy
|
||||
|
||||
@@ -6,15 +6,12 @@
|
||||
programs.niri.enable = true;
|
||||
nixpkgs.overlays = [
|
||||
(final: prev: {
|
||||
xwayland-satellite =
|
||||
if prev.lib.versionOlder prev.xwayland-satellite.version "0.8.3" then
|
||||
prev.xwayland-satellite.overrideAttrs (old: {
|
||||
patches = (old.patches or [ ]) ++ [
|
||||
./xwayland-satellite-no-focus-override-redirect.patch
|
||||
];
|
||||
})
|
||||
else
|
||||
prev.xwayland-satellite;
|
||||
xwayland-satellite = prev.xwayland-satellite.overrideAttrs (old: {
|
||||
patches =
|
||||
(old.patches or [ ])
|
||||
++ prev.lib.optional (prev.lib.versionOlder old.version "0.8.3") ./xwayland-satellite-no-focus-override-redirect.patch
|
||||
++ prev.lib.optional (prev.lib.versionOlder old.version "0.8.4") ./xwayland-satellite-resizable-dialog-toplevel.patch;
|
||||
});
|
||||
})
|
||||
];
|
||||
|
||||
|
||||
@@ -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