Merge branch 'master' into treewide-init-maintainers

This commit is contained in:
NAHO 2025-04-13 19:59:13 +02:00
commit 6d16807fc5
No known key found for this signature in database
GPG key ID: 229CB671D09B95F5
185 changed files with 5077 additions and 3623 deletions

113
.github/ISSUE_TEMPLATE/bug.yml vendored Normal file
View file

@ -0,0 +1,113 @@
---
description: Report a bug
labels: [bug]
name: Bug
title: "<SCOPE>: <SUMMARY>"
body:
- type: checkboxes
attributes:
label: I assert that this issue is relevant for Stylix
description: >-
If you need help or are unsure whether this is a Stylix bug, please
consider reading the [documentation](https://stylix.danth.me) or asking
for help in a [GitHub
Discussion](https://github.com/danth/stylix/discussions) or the [Stylix
Matrix Room](https://matrix.to/#/#stylix:danth.me) before opening an
issue.
options:
- label: >-
I assert that this is a bug and not a user error or support
request.
required: true
- label: >-
I assert that this is not a duplicate of an [existing
issue](https://github.com/danth/stylix/issues).
required: true
- type: textarea
attributes:
description: >-
Describe the issue in detail. Consider including a minimal reproducible
example, logs, or screenshots.
label: Description
placeholder: Type your description here…
validations:
required: true
- type: textarea
attributes:
description: >-
Copy-paste the `flake.lock` file. If flakes are not used, remove the
prefilled content and provide the locked input versions.
label: flake.lock
value: |-
<details>
<summary><code>flake.lock</code></summary>
<!-- Copy-paste the flake.lock file inside the following code block -->
```json
```
</details>
validations:
required: true
- type: dropdown
attributes:
description: How is Stylix installed?
label: Installation Method
options:
- NixOS
- Home Manager
- nix-darwin
- Nix-on-Droid
- Other
validations:
required: true
- type: textarea
attributes:
description: "`nix-info --markdown` output."
label: System Information
placeholder: |-
- system:
- host os:
- multi-user?:
- sandbox:
- version:
- nixpkgs:
validations:
required: true
- type: textarea
attributes:
label: Notify maintainers
description: >-
If this bug is module-specific, consider pinging its maintainers. Each
module lists its maintainers in the
[documentation](https://stylix.danth.me).
placeholder: "@danth, @trueNAHO"

View file

@ -0,0 +1,43 @@
---
description: Request a change to an existing option
labels: [change-option]
name: Change option
title: "<SCOPE>: <DESCRIPTION>"
body:
- type: checkboxes
attributes:
label: I assert that this feature request is relevant for Stylix
options:
- label: >-
I assert that this is not a duplicate of an [existing feature
request](https://github.com/danth/stylix/issues).
required: true
- type: textarea
attributes:
label: Description
description: >-
Describe the change and its potential breaking changes, and demonstrate
the use case it improves.
placeholder: Type your description here…
validations:
required: true
- type: textarea
attributes:
label: Notify maintainers
description: >-
Consider pinging the module maintainers. Each module lists its
maintainers in the [documentation](https://stylix.danth.me).
placeholder: "@danth, @trueNAHO"

View file

@ -0,0 +1,43 @@
---
description: Request a change to an existing target
labels: [change-target]
name: Change target
title: "<TARGET>: <DESCRIPTION>"
body:
- type: checkboxes
attributes:
label: I assert that this feature request is relevant for Stylix
options:
- label: >-
I assert that this is not a duplicate of an [existing feature
request](https://github.com/danth/stylix/issues).
required: true
- type: textarea
attributes:
label: Description
description: >-
Describe the change. Consider including links to potentially useful
NixOS, Home Manager, nix-darwin, or Nix-on-Droid options.
placeholder: Type your description here…
validations:
required: true
- type: textarea
attributes:
label: Notify maintainers
description: >-
Consider pinging the module maintainers. Each module lists its
maintainers in the [documentation](https://stylix.danth.me).
placeholder: "@danth, @trueNAHO"

11
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View file

@ -0,0 +1,11 @@
---
blank_issues_enabled: true
contact_links:
- name: Ask on GitHub Discussions
url: https://github.com/danth/stylix/discussions/new/choose
about: For questions or informal discussions
- name: Ask on Matrix
url: https://matrix.to/#/#stylix:danth.me
about: For questions or informal discussions

43
.github/ISSUE_TEMPLATE/new_option.yml vendored Normal file
View file

@ -0,0 +1,43 @@
---
description: Request the addition of a new option
labels: [new-option]
name: New option
title: "<SCOPE>: add <OPTION> option"
body:
- type: checkboxes
attributes:
label: I assert that this feature request is relevant for Stylix
options:
- label: >-
I assert that this is not a duplicate of an [existing feature
request](https://github.com/danth/stylix/issues).
required: true
- type: textarea
attributes:
label: Description
description: >-
Describe the option and explain its use case. Consider including
pseudocode demonstrating its integration with the existing architecture.
placeholder: Type your description here…
validations:
required: true
- type: textarea
attributes:
label: Notify maintainers
description: >-
Consider pinging the module maintainers. Each module lists its
maintainers in the [documentation](https://stylix.danth.me).
placeholder: "@danth, @trueNAHO"

32
.github/ISSUE_TEMPLATE/new_target.yml vendored Normal file
View file

@ -0,0 +1,32 @@
---
description: Request the addition of a new target
labels: [new-target]
name: New target
title: "<TARGET>: add target"
body:
- type: checkboxes
attributes:
label: I assert that this feature request is relevant for Stylix
options:
- label: >-
I assert that this is not a duplicate of an [existing feature
request](https://github.com/danth/stylix/issues).
required: true
- type: textarea
attributes:
label: Description
description: >-
Describe the feature. Consider including links to existing themes, like
a [tinted-theming repository](https://github.com/tinted-theming).
placeholder: Type your description here…
validations:
required: true

26
.github/PULL_REQUEST_TEMPLATE.md vendored Normal file
View file

@ -0,0 +1,26 @@
<!--
^ Please summarise the changes you have done and explain why they are necessary here ^
Please also link any relevant issues or pull requests e.g. `Closes: #<ISSUE-ID>`
-->
## Things done
<!--
Please check what applies. Note that these are not hard requirements but merely
serve as information for reviewers.
-->
- [ ] Tested locally
- [ ] Tested in [testbed](https://stylix.danth.me/testbeds.html)
- [ ] Commit message follows [commit convention](https://stylix.danth.me/commit_convention.html)
- [ ] Fits [style guide](https://stylix.danth.me/styling.html)
- [ ] Respects license of any existing code used
## Notify maintainers
<!---
If you are editing an existing target, consider pinging relevant
module maintainers from `modules/<module>/meta.nix`.
-->

View file

@ -26,11 +26,13 @@ jobs:
steps:
# Use a GitHub App rather than the default token so that GitHub Actions
# workflows may run on the created pull request.
- uses: actions/create-github-app-token@v1
- uses: actions/create-github-app-token@v2
id: app-token
with:
app-id: ${{ vars.BACKPORT_APP_ID }}
private-key: ${{ secrets.BACKPORT_PRIVATE_KEY }}
app-id: ${{ vars.APP_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }}
permission-contents: write
permission-pull-requests: write
- uses: actions/checkout@v4
with:

View file

@ -12,83 +12,29 @@ permissions:
contents: read
jobs:
get-derivations:
runs-on: ubuntu-24.04
steps:
- uses: DeterminateSystems/nix-installer-action@v16
- uses: cachix/cachix-action@v16
with:
name: stylix
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
continue-on-error: true
- id: get-derivations
run: |
set -o pipefail
nix flake show --json \
github:${{
github.repository
}}/${{
github.event.pull_request.head.sha || github.sha
}} |
jq --raw-output '
def format_output($arch; $type):
{
arch: $arch,
key: .,
os: (
if $arch == "x86_64-linux" then
"ubuntu-24.04"
else
"macos-14"
end
),
type: $type
};
[
["x86_64-linux", "x86_64-darwin"][] as $arch |
(.checks[$arch] | keys) as $checks |
(.packages[$arch] | keys) as $packages |
(($checks - $packages)[] | format_output($arch; "checks")),
($packages[] | format_output($arch; "packages"))
] |
"derivations=\(.)"
' \
>>"$GITHUB_OUTPUT" || {
rm "$GITHUB_OUTPUT"
false
}
outputs:
derivations: ${{ steps.get-derivations.outputs.derivations }}
check:
runs-on: ${{ matrix.check.os }}
name: ${{ matrix.check.key }} on ${{ matrix.check.arch }}
needs: get-derivations
name: ${{ matrix.name }}
runs-on: ${{ matrix.runs-on }}
# https://docs.github.com/en/actions/writing-workflows/choosing-where-your-workflow-runs/choosing-the-runner-for-a-job#choosing-github-hosted-runners
strategy:
fail-fast: false
matrix:
check: ${{ fromJSON(needs.get-derivations.outputs.derivations) }}
include:
- name: aarch64-linux
runs-on: ubuntu-24.04-arm
- name: aarch64-darwin
runs-on: macos-15
- name: x86_64-linux
runs-on: ubuntu-24.04
- name: x86_64-darwin
runs-on: macos-13
steps:
- uses: DeterminateSystems/nix-installer-action@v16
- uses: actions/checkout@v4
with:
extra-conf: |-
allow-import-from-derivation = ${{
startsWith(matrix.check.key, 'testbed:') &&
contains(matrix.check.key, ':schemeless') &&
'true' ||
'false'
}}
persist-credentials: false
- uses: DeterminateSystems/nix-installer-action@v16
- uses: cachix/cachix-action@v16
with:
@ -96,16 +42,4 @@ jobs:
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
continue-on-error: true
- run: |
nix build --no-update-lock-file --print-build-logs \
github:${{
github.repository
}}/${{
github.event.pull_request.head.sha || github.sha
}}#${{
matrix.check.type
}}.${{
matrix.check.arch
}}.${{
matrix.check.key
}}
- run: nix develop --command stylix-check --no-nom

View file

@ -25,6 +25,8 @@ jobs:
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- uses: DeterminateSystems/nix-installer-action@v16

44
.github/workflows/update-flake.yml vendored Normal file
View file

@ -0,0 +1,44 @@
---
name: Update flake inputs
on: # yamllint disable-line rule:truthy
schedule:
- cron: "0 0 1 * *"
workflow_dispatch:
jobs:
flake-update:
runs-on: ubuntu-latest
if: github.repository_owner == 'danth'
strategy:
matrix:
branch: [master, release-24.11]
steps:
- uses: actions/checkout@v4
with:
ref: ${{ matrix.branch }}
- uses: DeterminateSystems/nix-installer-action@v16
- id: generate-token
uses: actions/create-github-app-token@v2
with:
app-id: ${{ vars.APP_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }}
permission-contents: write
permission-pull-requests: write
- uses: DeterminateSystems/update-flake-lock@v24
with:
token: ${{ steps.generate-token.outputs.token }}
branch: update_flake_lock_action_${{ matrix.branch }}
commit-msg: "stylix: update all flake inputs"
pr-title: "${{ contains('release', ${{ matrix.branch }}) && '[${{ matrix.branch }}] ' || '' }}stylix: update all flake inputs" # yamllint disable-line rule:line-length
pr-labels: dependencies
# yamllint disable rule:line-length
pr-body: |
Automated changes by the [update-flake-lock](https://github.com/DeterminateSystems/update-flake-lock) GitHub Action.
```
{{ env.GIT_COMMIT_MESSAGE }}
```
# yamllint enable rule:line-length

View file

@ -40,7 +40,7 @@ philosophy.
Try a live demo of this dark theme by running:
```console
nix run github:danth/stylix#testbed:gnome:default:dark:image:scheme
nix run github:danth/stylix#testbed:gnome:default:dark:image:scheme:cursor
```
### KDE Plasma 5

View file

@ -3,7 +3,7 @@
lib,
inputs,
...
}:
}@args:
let
nixosConfiguration = lib.nixosSystem {
@ -43,13 +43,20 @@ let
};
};
metadata = import "${inputs.self}/stylix/meta.nix" args;
# We construct an index of all Stylix options, using the following format:
#
# {
# "src/options/modules/«module».md" = {
# referenceSection = "Modules";
# readme = "modules/«module»/README.md";
# defaultReadme = "note about the path above not existing";
# readme = ''
# Content of modules/«module»/README.md, or a default title
# followed by a note about that file not existing.
#
# Summary of module maintainers, or a warning that the module
# is unmaintained.
# '';
# optionsByPlatform = {
# home_manager = [ ... ];
# nixos = [ ... ];
@ -58,8 +65,10 @@ let
#
# "src/options/platforms/«platform».md" = {
# referenceSection = "Platforms";
# readme = "docs/src/options/platforms/«platform».md";
# defaultReadme = "note about the path above not existing";
# readme = ''
# Content of docs/src/options/platforms/«platform».md, or a default
# title followed by a note about that file not existing.
# '';
# optionsByPlatform.«platform» = [ ... ];
# };
# }
@ -119,13 +128,93 @@ let
page = "src/options/modules/${module}.md";
emptyPage = {
referenceSection = "Modules";
readme = "${inputs.self}/modules/${module}/README.md";
defaultReadme = ''
# ${module}
> [!NOTE]
> This module doesn't include any additional documentation. You
> can browse the options it provides below.
'';
readme =
let
path = "${inputs.self}/modules/${module}/README.md";
# This doesn't count as IFD because ${inputs.self} is a flake input
#
# In addition, this checks that the README.md starts with an
# appropriate title
mainText =
let
name = lib.throwIfNot (
metadata ? ${module}.name
) "stylix: ${module} is missing `meta.name`" metadata.${module}.name;
in
if builtins.pathExists path then
let
text = builtins.readFile path;
in
lib.throwIfNot (
(builtins.head (lib.splitString "\n" text)) == "# ${name}"
) "README.md of ${name} must have a title which matches its `meta.name`" text
else
''
# ${name}
> [!NOTE]
> This module doesn't include any additional documentation.
> You can browse the options it provides below.
'';
maintainers =
lib.throwIfNot (metadata ? ${module}.maintainers)
"stylix: ${module} is missing `meta.maintainers`"
metadata.${module}.maintainers;
# Render a maintainer's name and a link to the best contact
# information we have for them.
#
# The reasoning behind the order of preference is as follows:
#
# - GitHub:
# - May link to multiple contact methods
# - More likely to have up-to-date information than the
# maintainers list
# - Protects the email address from crawlers
# - Email:
# - Very commonly used
# - Matrix:
# - Only other contact method in the schema
# (as of March 2025)
# - Name:
# - If no other information is available, then just show
# the maintainer's name without a link
renderMaintainer =
maintainer:
if maintainer ? github then
"[${maintainer.name}](https://github.com/${maintainer.github})"
else if maintainer ? email then
"[${maintainer.name}](mailto:${maintainer.email})"
else if maintainer ? matrix then
"[${maintainer.name}](https://matrix.to/#/${maintainer.matrix})"
else
maintainer.name;
joinItems =
items:
if builtins.length items <= 2 then
builtins.concatStringsSep " and " items
else
builtins.concatStringsSep ", " (
lib.dropEnd 1 items ++ [ "and ${lib.last items}" ]
);
renderedMaintainers = joinItems (map renderMaintainer maintainers);
maintainersText =
if maintainers == [ ] then
"This module has no [dedicated maintainers](../../modules.md#maintainers)."
else
"This module is maintained by ${renderedMaintainers}.";
in
lib.concatLines [
mainText
"## Module information"
maintainersText
];
# Module pages initialise all platforms to an empty list, so that
# '*None provided.*' indicates platforms where the module isn't
# available.
@ -138,13 +227,25 @@ let
page = "src/options/platforms/${platform}.md";
emptyPage = {
referenceSection = "Platforms";
readme = "${inputs.self}/docs/src/options/platforms/${platform}.md";
defaultReadme = ''
# ${platform.name}
> Documentation is not available for this platform. Its main
> options are listed below, and you may find more specific options
> in the documentation for each module.
'';
readme =
let
path = "${inputs.self}/docs/src/options/platforms/${platform}.md";
# This doesn't count as IFD because ${inputs.self} is a flake input
mainText =
if builtins.pathExists path then
builtins.readFile path
else
''
# ${platform.name}
> [!NOTE]
> Documentation is not available for this platform. Its
> main options are listed below, and you may find more
> specific options in the documentation for each module.
'';
in
mainText;
# Platform pages only initialise that platform, since showing other
# platforms here would be nonsensical.
optionsByPlatform.${platform} = [ ];
@ -220,8 +321,9 @@ let
builtins.throw "declaration not in ${declarationPrefix}: ${declarationString}";
# You can embed HTML inside a Markdown document, but to render further
# Markdown within that HTML, it must be surrounded by blank lines.
# This function helps with that.
# Markdown between the HTML tags, it must be surrounded by blank lines:
# see https://spec.commonmark.org/0.31.2/#html-blocks. This function
# helps with that.
#
# In the following functions, we use concatStrings to build embedded HTML,
# rather than ${} and multiline strings, because Markdown is sensitive to
@ -328,18 +430,12 @@ let
renderPage =
_path: page:
let
readme =
# This doesn't count as IFD because ${inputs.self} is a flake input
if builtins.pathExists page.readme then
builtins.readFile page.readme
else
page.defaultReadme;
options = lib.concatStrings (
lib.mapAttrsToList renderPlatform page.optionsByPlatform
);
in
lib.concatLines [
readme
page.readme
options
];

View file

@ -2,7 +2,7 @@
## Enable
To enable the Stylix module, declare:
Stylix must be enabled before it will apply any changes to your system:
```nix
{
@ -10,12 +10,6 @@ To enable the Stylix module, declare:
}
```
> [!NOTE]
>
> The global enable option was recently added, so you may come across old
> examples which don't include it. No other settings will take effect unless
> `stylix.enable` is set to `true`.
## Color scheme
### Handmade schemes
@ -212,16 +206,19 @@ extension of it.
For example:
```nix
{ inputs, config, pkgs, ... }:
{
inputs,
config,
pkgs,
...
}:
let
inherit (pkgs.stdenv.hostPlatform) system;
nixvim-package = inputs.nixvim-config.packages.${system}.default;
extended-nixvim = nixvim-package.extend config.lib.stylix.nixvim.config;
in
{
environment.systemPackages = [
extended-nixvim
];
environment.systemPackages = [ extended-nixvim ];
}
```

View file

@ -4,34 +4,56 @@
To enter the developer shell, run:
```console
```sh
nix develop
```
To automatically enter the developer shell upon entering the project directory
with [`direnv`](https://direnv.net), run:
```console
```sh
direnv allow
```
## pre-commit
## `pre-commit`
The default developer shell leverages [`pre-commit`](https://pre-commit.com)
hooks to simplify the process of reaching minimum quality standards for casual
contributors.
contributors. This means applying code formatters, and scanning for things like
unused variables which should be removed.
By default, `pre-commit` only runs on staged files. To manually run
[`pre-commit`](https://pre-commit.com) against all files, run:
By default, once you have entered the developer shell, `pre-commit` runs
automatically just before you create a commit. This will only look at the
files which are about to be committed.
```console
You can also run it manually against all files:
```sh
pre-commit run --all-files
```
This is useful when submitting a patchset and `pre-commit` was not used on all
commits. For example, suppose the first commit was created without `pre-commit`
and touches `/flake.nix`. Installing `pre-commit` and then creating a second
commit that touches `/README.md` will not run any hooks on `/flake.nix`.
This is useful if a commit was created outside of the developer shell, and
you need to apply `pre-commit` to your previous changes.
Note that the `outputs.checks.${system}.git-hooks` output always runs against
all files.
Note that there is also a flake output, `.#checks.«system».git-hooks`, which
always runs against all files but does not have access to apply changes. This
is used in GitHub Actions to ensure that `pre-commit` has been applied.
## `stylix-check`
When a pull request is opened, we use GitHub Actions to build everything under
`.#checks`. This includes the previously mentioned `.#checks.«system».git-hooks`,
and every [testbed](./testbeds.md).
You might sometimes find it useful to run these same checks locally. The built
in `nix flake check` command does this, however it can be quite slow compared
to the script we use on GitHub Actions.
To use the same script that we use, you can run this command within the
developer shell:
```sh
stylix-check
```
This is based on [`nix-fast-build`](https://github.com/Mic92/nix-fast-build#readme).

View file

@ -13,12 +13,17 @@ screens, and display managers.
stylix.url = "github:danth/stylix";
};
outputs = { nixpkgs, stylix, ... }: {
nixosConfigurations."«hostname»" = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [ stylix.nixosModules.stylix ./configuration.nix ];
outputs =
{ nixpkgs, stylix, ... }:
{
nixosConfigurations."«hostname»" = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
stylix.nixosModules.stylix
./configuration.nix
];
};
};
};
}
```
<small>Minimal `flake.nix` for a NixOS configuration.</small>
@ -64,12 +69,21 @@ to NixOS via [Flakes][nix-flakes].
stylix.url = "github:danth/stylix";
};
outputs = { darwin, nixpkgs, stylix, ... }: {
darwinConfigurations."«hostname»" = darwin.lib.darwinSystem {
system = "aarch64-darwin";
modules = [ stylix.darwinModules.stylix ./configuration.nix ];
outputs =
{
darwin,
stylix,
...
}:
{
darwinConfigurations."«hostname»" = darwin.lib.darwinSystem {
system = "aarch64-darwin";
modules = [
stylix.darwinModules.stylix
./configuration.nix
];
};
};
};
}
```
<small>Minimal `flake.nix` for a nix-darwin configuration.</small>
@ -95,12 +109,22 @@ a similar fashion to NixOS via [Flakes][nix-flakes].
stylix.url = "github:danth/stylix";
};
outputs = { nix-on-droid, nixpkgs, stylix, ... }: {
nixOnDroidConfigurations.default = nix-on-droid.lib.nixOnDroidConfiguration {
pkgs = nixpkgs.legacyPackages."aarch64-linux";
modules = [ stylix.nixOnDroidModules.stylix ./nix-on-droid.nix ];
outputs =
{
nix-on-droid,
nixpkgs,
stylix,
...
}:
{
nixOnDroidConfigurations.default = nix-on-droid.lib.nixOnDroidConfiguration {
pkgs = nixpkgs.legacyPackages."aarch64-linux";
modules = [
stylix.nixOnDroidModules.stylix
./nix-on-droid.nix
];
};
};
};
}
```
<small>Minimal `flake.nix` for a Nix-on-Droid configuration.</small>
@ -127,12 +151,22 @@ is managed by someone else.
stylix.url = "github:danth/stylix";
};
outputs = { nixpkgs, home-manager, stylix, ... }: {
homeConfigurations."«username»" = home-manager.lib.homeManagerConfiguration {
pkgs = nixpkgs.legacyPackages.x86_64-linux;
modules = [ stylix.homeManagerModules.stylix ./home.nix ];
outputs =
{
nixpkgs,
home-manager,
stylix,
...
}:
{
homeConfigurations."«username»" = home-manager.lib.homeManagerConfiguration {
pkgs = nixpkgs.legacyPackages.x86_64-linux;
modules = [
stylix.homeManagerModules.stylix
./home.nix
];
};
};
};
}
```
<small>Minimal `flake.nix` for a Home Manager configuration.</small>
@ -164,20 +198,20 @@ module as the `homeManagerModules.stylix` attribute.
```nix
let
stylix = pkgs.fetchFromGitHub {
owner = "danth";
repo = "stylix";
rev = "...";
sha256 = "...";
owner = "danth";
repo = "stylix";
rev = "...";
sha256 = "...";
};
in {
imports = [ (import stylix).homeManagerModules.stylix ];
in
{
imports = [ (import stylix).homeManagerModules.stylix ];
stylix = {
enable = true;
image = ./wallpaper.jpg;
};
stylix = {
enable = true;
image = ./wallpaper.jpg;
};
}
```
<small>Example usage of the Home Manager module without flakes.</small>

View file

@ -46,14 +46,15 @@ A general format for modules is shown below.
```nix
{ config, lib, ... }:
{
options.stylix.targets.«name».enable =
config.lib.stylix.mkEnableTarget "«human readable name»" true;
config = lib.mkIf (config.stylix.enable && config.stylix.targets.«name».enable) {
programs.«name».backgroundColor = config.lib.stylix.colors.base00;
};
config =
lib.mkIf (config.stylix.enable && config.stylix.targets.«name».enable)
{
programs.«name».backgroundColor = config.lib.stylix.colors.base00;
};
}
```
@ -72,6 +73,34 @@ one of the following applies:
- There is no reliable way to detect whether the target is installed, *and*
enabling it unconditionally would cause problems.
### Overlays
If your module is provided as an overlay it uses a special format, where config
is transparently passed to the platform (e.g. nixos) and overlay is a function
taking two arguments and returning an attrset:
```nix
{
lib,
config,
...
}:
{
options.stylix.targets.«name».enable =
config.lib.stylix.mkEnableTarget "«human readable name»" true;
overlay =
final: prev:
lib.optionalAttrs
(config.stylix.enable && config.stylix.targets.«name».enable)
{
«name» = prev.«name».overrideAttrs (oldAttrs: {
});
};
}
```
## How to apply colors
Refer to the [style guide](./styling.md) to see how colors are named,
@ -94,11 +123,13 @@ it as a function. This returns a derivation which builds the template.
```nix
{
environment.variables.MY_APPLICATION_CONFIG_FILE =
let configFile = config.lib.stylix.colors {
template = ./config.toml.mustache;
extension = ".toml";
};
in "${configFile}";
let
configFile = config.lib.stylix.colors {
template = ./config.toml.mustache;
extension = ".toml";
};
in
"${configFile}";
}
```
@ -114,10 +145,17 @@ slow and should be avoided.
For everything else, like fonts and wallpapers, you can just take option values
directly from `config`. See the reference pages for a list of options.
## Maintainers
## Metadata
New modules must have at least one maintainer defined in
`/modules/«module»/meta.nix`.
Metadata is stored in `/modules/«module»/meta.nix`. The following attributes are
available under `meta`:
- `maintainers`: required list of maintainers. See [Maintainers](#maintainers) section.
- `name`: required human-readable string name.
### Maintainers
New modules must have at least one maintainer.
If you are not already listed in the Nixpkgs `/maintainers/maintainer-list.nix`
maintainer list, add yourself to `/stylix/maintainers.nix`.
@ -135,7 +173,10 @@ number of maintainers:
- ```nix
{ lib, ... }:
{
maintainers = with lib.maintainers; [ danth naho ];
maintainers = with lib.maintainers; [
danth
naho
];
}
```
@ -167,3 +208,11 @@ This will be inserted before the automatically generated list of options.
Adding [testbeds](./testbeds.md) for new modules is encouraged, but not
mandatory.
## Common Mistakes
### `home.activation` Scripts
Any script run by `home.activation` must be preceded by `run` if the script is
to produce any permanent changes. Without this `run` wrapper, the script is run
in dry-run mode.

View file

@ -6,9 +6,11 @@ If you combined Home Manager with your NixOS configuration, write these
options within a Home Manager section, either for all users:
```nix
home-manager.sharedModules = [{
stylix.targets.xyz.enable = false;
}];
home-manager.sharedModules = [
{
stylix.targets.xyz.enable = false;
}
];
```
Or for a specific user:

View file

@ -27,9 +27,11 @@ Home Manager module within the NixOS module using the following format:
```nix
{
home-manager.sharedModules = [{
# Write Home Manager options here
}];
home-manager.sharedModules = [
{
# Write Home Manager options here
}
];
}
```
@ -52,10 +54,16 @@ github:danth/stylix
└───x86_64-linux
├───docs: package 'stylix-book'
├───palette-generator: package 'palette-generator'
├───testbed:gnome:default:dark: package 'testbed:gnome:default:dark'
├───testbed:gnome:default:light: package 'testbed:gnome:default:light'
├───testbed:kde:default:dark: package 'testbed:kde:default:dark'
└───testbed:kde:default:light: package 'testbed:kde:default:light'
├───"testbed:gnome:default:dark:image:scheme:cursor": package 'testbed-gnome-default-dark-image-scheme-cursor'
├───"testbed:gnome:default:dark:image:scheme:cursorless": package 'testbed-gnome-default-dark-image-scheme-cursorless'
├───"testbed:gnome:default:dark:image:schemeless:cursorless": package 'testbed-gnome-default-dark-image-schemeless-cursorless'
├───"testbed:gnome:default:dark:imageless:scheme:cursorless": package 'testbed-gnome-default-dark-imageless-scheme-cursorless'
├───"testbed:gnome:default:light:image:scheme:cursorless": package 'testbed-gnome-default-light-image-scheme-cursorless'
├───"testbed:kde:default:dark:image:scheme:cursor": package 'testbed-kde-default-dark-image-scheme-cursor'
├───"testbed:kde:default:dark:image:scheme:cursorless": package 'testbed-kde-default-dark-image-scheme-cursorless'
├───"testbed:kde:default:dark:image:schemeless:cursorless": package 'testbed-kde-default-dark-image-schemeless-cursorless'
├───"testbed:kde:default:dark:imageless:scheme:cursorless": package 'testbed-kde-default-dark-imageless-scheme-cursorless'
└───"testbed:kde:default:light:image:scheme:cursorless": package 'testbed-kde-default-light-image-scheme-cursorless'
```
(This has been edited down to only the relevant parts.)
@ -64,7 +72,7 @@ To start a testbed, each of which is named in the format
`testbed:«module»:«testbed»:«polarity»`, run the following command:
```console
user@host:~$ nix run .#testbed:«module»:«testbed»:«polarity»
user@host:~$ nix run .#testbed:«module»:«testbed»:«polarity»:«image»:«scheme»:«cursor»
```
Any package with a name not fitting the given format is not a testbed,

View file

@ -8,12 +8,11 @@ Here's an example Nix expression that takes an input image, applies a brightness
```nix
{ pkgs, ... }:
let
inputImage = ./path/to/image.jpg;
brightness = -30;
contrast = 0;
fillColor = "black"
fillColor = "black";
in
{
stylix.image = pkgs.runCommand "dimmed-background.png" { } ''
@ -29,14 +28,14 @@ Similarly, you can use a template image and repaint it for the current theme.
```nix
{ pkgs, ... }:
let
theme = "${pkgs.base16-schemes}/share/themes/catppuccin-latte.yaml";
wallpaper = pkgs.runCommand "image.png" {} ''
COLOR=$(${pkgs.yq}/bin/yq -r .palette.base00 ${theme})
${pkgs.imagemagick}/bin/magick -size 1920x1080 xc:$COLOR $out
wallpaper = pkgs.runCommand "image.png" { } ''
COLOR=$(${pkgs.yq}/bin/yq -r .palette.base00 ${theme})
${pkgs.imagemagick}/bin/magick -size 1920x1080 xc:$COLOR $out
'';
in {
in
{
stylix = {
image = wallpaper;
base16Scheme = theme;
@ -48,7 +47,6 @@ Which is neatly implemented as a single function in `lib.stylix.pixel`:
```nix
{ pkgs, config, ... }:
{
stylix = {
image = config.lib.stylix.pixel "base0A";
@ -78,3 +76,27 @@ itself:
imports = [ flake.inputs.stylix.nixosModules.stylix ];
disabledModules = [ "${flake.inputs.stylix}/modules/<some-module>/nixos.nix" ];
```
## Extending CSS options
When trying to extend an attrset option, the order does not matter because a
declaration can only exist once. This is not the case for an option with the
type of `lines` (most commonly `style` options in Home Manager). For these options,
the order does matter and Nix cannot guarantee that there aren't conflicting
definitions. Nix will still merge these options, but it will not warn you if
there are conflicting declaration. In order to get around this, you can make sure
Nix puts your CSS at the end - and thus prioritizes it - by using `lib.mkAfter`:
```nix
{ lib, ... }:
{
programs.waybar = {
enable = true;
style = lib.mkAfter ''
#workspaces button {
background: @base01;
}
'';
};
}
```

42
flake.lock generated
View file

@ -70,11 +70,11 @@
"firefox-gnome-theme": {
"flake": false,
"locked": {
"lastModified": 1741628778,
"narHash": "sha256-RsvHGNTmO2e/eVfgYK7g+eYEdwwh7SbZa+gZkT24MEA=",
"lastModified": 1743774811,
"narHash": "sha256-oiHLDHXq7ymsMVYSg92dD1OLnKLQoU/Gf2F1GoONLCE=",
"owner": "rafaelmardojai",
"repo": "firefox-gnome-theme",
"rev": "5a81d390bb64afd4e81221749ec4bffcbeb5fa80",
"rev": "df53a7a31872faf5ca53dd0730038a62ec63ca9e",
"type": "github"
},
"original": {
@ -166,11 +166,11 @@
]
},
"locked": {
"lastModified": 1741379162,
"narHash": "sha256-srpAbmJapkaqGRE3ytf3bj4XshspVR5964OX5LfjDWc=",
"lastModified": 1742649964,
"narHash": "sha256-DwOTp7nvfi8mRfuL1escHDXabVXFGT1VlPD1JHrtrco=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "b5a62751225b2f62ff3147d0a334055ebadcd5cc",
"rev": "dcf5072734cb576d2b0c59b2ac44f5050b5eac82",
"type": "github"
},
"original": {
@ -224,11 +224,11 @@
]
},
"locked": {
"lastModified": 1741635347,
"narHash": "sha256-2aYfV44h18alHXopyfL4D9GsnpE5XlSVkp4MGe586VU=",
"lastModified": 1743869639,
"narHash": "sha256-Xhe3whfRW/Ay05z9m1EZ1/AkbV1yo0tm1CbgjtCi4rQ=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "7fb8678716c158642ac42f9ff7a18c0800fea551",
"rev": "d094c6763c6ddb860580e7d3b4201f8f496a6836",
"type": "github"
},
"original": {
@ -239,11 +239,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1743315132,
"narHash": "sha256-6hl6L/tRnwubHcA4pfUUtk542wn2Om+D4UnDhlDW9BE=",
"lastModified": 1743583204,
"narHash": "sha256-F7n4+KOIfWrwoQjXrL2wD9RhFYLs2/GGe/MQY1sSdlE=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "52faf482a3889b7619003c0daec593a1912fddc1",
"rev": "2c8d3f48d33929642c1c12cd243df4cc7d2ce434",
"type": "github"
},
"original": {
@ -262,11 +262,11 @@
"treefmt-nix": "treefmt-nix"
},
"locked": {
"lastModified": 1741693509,
"narHash": "sha256-emkxnsZstiJWmGACimyAYqIKz2Qz5We5h1oBVDyQjLw=",
"lastModified": 1743884191,
"narHash": "sha256-foVcginhVvjg8ZnTzY5wwMeZ4wjJ8yX66PW5kgyivPE=",
"owner": "nix-community",
"repo": "NUR",
"rev": "5479646b2574837f1899da78bdf9a48b75a9fb27",
"rev": "fde90f5f52e13eed110a0e53a2818a2b09e4d37c",
"type": "github"
},
"original": {
@ -349,11 +349,11 @@
"tinted-schemes": {
"flake": false,
"locked": {
"lastModified": 1741468895,
"narHash": "sha256-YKM1RJbL68Yp2vESBqeZQBjTETXo8mCTTzLZyckCfZk=",
"lastModified": 1742851696,
"narHash": "sha256-sR4K+OVFKeUOvNIqcCr5Br7NLxOBEwoAgsIyjsZmb8s=",
"owner": "tinted-theming",
"repo": "schemes",
"rev": "47c8c7726e98069cade5827e5fb2bfee02ce6991",
"rev": "c37771c4ae8ff1667e27ddcf24991ebeb94a4e77",
"type": "github"
},
"original": {
@ -365,11 +365,11 @@
"tinted-tmux": {
"flake": false,
"locked": {
"lastModified": 1740877430,
"narHash": "sha256-zWcCXgdC4/owfH/eEXx26y5BLzTrefjtSLFHWVD5KxU=",
"lastModified": 1743296873,
"narHash": "sha256-8IQulrb1OBSxMwdKijO9fB70ON//V32dpK9Uioy7FzY=",
"owner": "tinted-theming",
"repo": "tinted-tmux",
"rev": "d48ee86394cbe45b112ba23ab63e33656090edb4",
"rev": "af5152c8d7546dfb4ff6df94080bf5ff54f64e3a",
"type": "github"
},
"original": {

View file

@ -132,6 +132,7 @@
git-hooks = inputs.git-hooks.lib.${system}.run {
hooks = {
deadnix.enable = true;
editorconfig-checker.enable = true;
hlint.enable = true;
nixfmt-rfc-style = {
@ -147,17 +148,41 @@
src = ./.;
};
maintainers-sorted = (import ./stylix/check-maintainers-sorted.nix) pkgs;
} self.packages.${system};
devShells = {
default = pkgs.mkShell {
inherit (self.checks.${system}.git-hooks) shellHook;
default =
let
check = pkgs.writeShellApplication {
name = "stylix-check";
runtimeInputs = with pkgs; [
nix
nix-fast-build
];
text = ''
cores="$(nproc)"
system="$(nix eval --expr builtins.currentSystem --impure --raw)"
nix-fast-build \
--eval-max-memory-size 512 \
--eval-workers "$cores" \
--flake ".#checks.$system" \
--no-link \
--skip-cached \
"$@"
'';
};
in
pkgs.mkShell {
inherit (self.checks.${system}.git-hooks) shellHook;
packages = [
inputs.home-manager.packages.${system}.default
self.checks.${system}.git-hooks.enabledPackages
];
};
packages = [
check
inputs.home-manager.packages.${system}.default
self.checks.${system}.git-hooks.enabledPackages
];
};
ghc = pkgs.mkShell {
inputsFrom = [ self.devShells.${system}.default ];
@ -169,38 +194,6 @@
let
universalPackages = {
docs = import ./docs { inherit pkgs inputs lib; };
nix-flake-check = pkgs.writeShellApplication {
meta.description = "A parallelized alternative to 'nix flake check'";
name = "nix-flake-check";
runtimeInputs = with pkgs; [
nix
jq
parallel
];
text = ''
nix flake show --json --no-update-lock-file ${self} |
jq --raw-output '
((.checks."${system}" // {}) | keys) as $checks |
((.packages."${system}" // {}) | keys) as $packages |
(($checks - $packages)[] | "checks.${system}.\(.)"),
($packages[] | "packages.${system}.\(.)")
' |
parallel \
--bar \
--color \
--color-failed \
--halt now,fail=1 \
--tagstring '{}' \
'
nix build --no-update-lock-file --print-build-logs \
${self}#{}
'
'';
};
palette-generator = pkgs.callPackage ./palette-generator { };
};
@ -209,8 +202,19 @@
testbedPackages = lib.optionalAttrs (lib.hasSuffix "-linux" system) (
import ./stylix/testbed.nix { inherit pkgs inputs lib; }
);
# Discord is not available on arm64. This workaround filters out
# testbeds using that package, until we have a better way to handle
# this.
testbedPackages' =
if system == "aarch64-linux" then
lib.filterAttrs (
name: _: !lib.hasPrefix "testbed:discord:vencord" name
) testbedPackages
else
testbedPackages;
in
universalPackages // testbedPackages;
universalPackages // testbedPackages';
}
)
// {
@ -222,7 +226,8 @@
{
stylix = {
inherit inputs;
paletteGenerator = self.packages.${pkgs.system}.palette-generator;
paletteGenerator =
self.packages.${pkgs.stdenv.hostPlatform.system}.palette-generator;
base16 = base16.lib args;
homeManagerIntegration.module = self.homeManagerModules.stylix;
};
@ -238,7 +243,8 @@
{
stylix = {
inherit inputs;
paletteGenerator = self.packages.${pkgs.system}.palette-generator;
paletteGenerator =
self.packages.${pkgs.stdenv.hostPlatform.system}.palette-generator;
base16 = base16.lib args;
};
}
@ -253,7 +259,8 @@
{
stylix = {
inherit inputs;
paletteGenerator = self.packages.${pkgs.system}.palette-generator;
paletteGenerator =
self.packages.${pkgs.stdenv.hostPlatform.system}.palette-generator;
base16 = base16.lib args;
homeManagerIntegration.module = self.homeManagerModules.stylix;
};
@ -268,7 +275,8 @@
(import ./stylix/droid inputs)
{
stylix = {
paletteGenerator = self.packages.${pkgs.system}.palette-generator;
paletteGenerator =
self.packages.${pkgs.stdenv.hostPlatform.system}.palette-generator;
base16 = base16.lib args;
homeManagerIntegration.module = self.homeManagerModules.stylix;
};

View file

@ -21,7 +21,7 @@ in
};
size = sizes.terminal;
};
window.opacity = with config.stylix.opacity; terminal;
window.opacity = config.stylix.opacity.terminal;
colors = with colors; {
primary = {
foreground = base05;

View file

@ -1,3 +1,4 @@
{
maintainers = [ ];
name = "Alacritty";
}

View file

@ -4,12 +4,6 @@
options,
...
}:
with config.lib.stylix.colors;
with config.stylix.fonts;
let
aviOpacity = toString config.stylix.opacity.popups;
in
{
options.stylix.targets.avizo.enable =
config.lib.stylix.mkEnableTarget "Avizo" true;
@ -19,13 +13,18 @@ in
lib.mkIf (config.stylix.enable && config.stylix.targets.avizo.enable) {
services.avizo = {
settings = {
default = {
background = "rgba(${base01-rgb-r}, ${base01-rgb-g}, ${base01-rgb-b}, ${aviOpacity})";
border-color = "rgba(${base0D-rgb-r}, ${base0D-rgb-g}, ${base0D-rgb-b}, ${aviOpacity})";
bar-fg-color = "rgba(${base05-rgb-r}, ${base05-rgb-g}, ${base05-rgb-b}, ${aviOpacity})";
bar-bg-color = "rgba(${base01-rgb-r}, ${base01-rgb-g}, ${base01-rgb-b}, ${aviOpacity})";
image-opacity = aviOpacity;
};
default =
with config.lib.stylix.colors;
let
aviOpacity = toString config.stylix.opacity.popups;
in
{
background = "rgba(${base01-rgb-r}, ${base01-rgb-g}, ${base01-rgb-b}, ${aviOpacity})";
border-color = "rgba(${base0D-rgb-r}, ${base0D-rgb-g}, ${base0D-rgb-b}, ${aviOpacity})";
bar-fg-color = "rgba(${base05-rgb-r}, ${base05-rgb-g}, ${base05-rgb-b}, ${aviOpacity})";
bar-bg-color = "rgba(${base01-rgb-r}, ${base01-rgb-g}, ${base01-rgb-b}, ${aviOpacity})";
image-opacity = aviOpacity;
};
};
};
}

View file

@ -1,3 +1,4 @@
{
maintainers = [ ];
name = "Avizo";
}

View file

@ -1,5 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<!-- Original template: https://github.com/sharkdp/bat/blob/master/assets/themes/base16.tmTheme -->
<!-- Copyright (c) 2018-2023 bat-developers (https://github.com/sharkdp/bat). -->
<plist version="1.0">
<dict>
<key>author</key>

View file

@ -1,4 +1,5 @@
{ lib, ... }:
{
maintainers = [ lib.maintainers.naho ];
name = "bat";
}

View file

@ -0,0 +1,20 @@
{ lib, pkgs, ... }:
let
package = pkgs.bat;
in
{
environment = {
loginShellInit = "${lib.getExe package} example.md";
systemPackages = [ package ];
};
home-manager.sharedModules = [
{
home.file."example.md" = {
source = pkgs.fetchurl {
url = "https://raw.githubusercontent.com/sharkdp/bat/refs/heads/master/tests/syntax-tests/source/Markdown/example.md";
hash = "sha256-VYYwgRFY1c2DPY7yGM8oF3zG4rtEpBWyqfPwmGZIkcA=";
};
};
}
];
}

View file

@ -1,12 +1,4 @@
{ config, lib, ... }:
with config.lib.stylix.colors.withHashtag;
with config.stylix.fonts;
let
bemenuOpacity = lib.toHexString (
((builtins.ceil (config.stylix.opacity.popups * 100)) * 255) / 100
);
in
{
options.stylix.targets.bemenu = {
enable = config.lib.stylix.mkEnableTarget "bemenu" true;
@ -16,7 +8,7 @@ in
Font size used for bemenu.
'';
type = with lib.types; nullOr int;
default = sizes.popups;
default = config.stylix.fonts.sizes.popups;
}; # optional argument
alternate = lib.mkOption {
@ -31,28 +23,36 @@ in
config =
lib.mkIf (config.stylix.enable && config.stylix.targets.bemenu.enable)
{
programs.bemenu.settings = with config.stylix.targets.bemenu; {
tb = "${base01}${bemenuOpacity}"; # Title bg
nb = "${base01}${bemenuOpacity}"; # Normal bg
fb = "${base01}${bemenuOpacity}"; # Filter bg
hb = "${base03}${bemenuOpacity}"; # Highlighted bg
sb = "${base03}${bemenuOpacity}"; # Selected bg
scb = "${base01}"; # Scrollbar bg
programs.bemenu.settings =
with config.lib.stylix.colors.withHashtag;
let
inherit (config.stylix.targets.bemenu) alternate fontSize;
bemenuOpacity = lib.toHexString (
((builtins.ceil (config.stylix.opacity.popups * 100)) * 255) / 100
);
in
{
tb = "${base01}${bemenuOpacity}"; # Title bg
nb = "${base01}${bemenuOpacity}"; # Normal bg
fb = "${base01}${bemenuOpacity}"; # Filter bg
hb = "${base03}${bemenuOpacity}"; # Highlighted bg
sb = "${base03}${bemenuOpacity}"; # Selected bg
scb = "${base01}"; # Scrollbar bg
hf = "${base0A}"; # Highlighted fg
sf = "${base0B}"; # Selected fg
tf = "${base05}"; # Title fg
ff = "${base05}"; # Filter fg
nf = "${base05}"; # Normal fg
scf = "${base03}"; # Scrollbar fg
hf = "${base0A}"; # Highlighted fg
sf = "${base0B}"; # Selected fg
tf = "${base05}"; # Title fg
ff = "${base05}"; # Filter fg
nf = "${base05}"; # Normal fg
scf = "${base03}"; # Scrollbar fg
ab = "${if alternate then base00 else base01}"; # Alternate bg
af = "${if alternate then base04 else base05}"; # Alternate fg
ab = "${if alternate then base00 else base01}"; # Alternate bg
af = "${if alternate then base04 else base05}"; # Alternate fg
# Font name
fn = "${sansSerif.name} ${
lib.optionalString (fontSize != null) (builtins.toString fontSize)
}";
};
# Font name
fn = "${config.stylix.fonts.sansSerif.name} ${
lib.optionalString (fontSize != null) (builtins.toString fontSize)
}";
};
};
}

View file

@ -1,4 +1,5 @@
{ lib, ... }:
{
maintainers = [ lib.maintainers.noodlez1232 ];
name = "bemenu";
}

View file

@ -1,18 +1,15 @@
{ config, lib, ... }:
let
colors = config.lib.stylix.colors.withHashtag;
in
{
options.stylix.targets.bspwm.enable =
config.lib.stylix.mkEnableTarget "bspwm" true;
config = lib.mkIf (config.stylix.enable && config.stylix.targets.bspwm.enable) {
xsession.windowManager.bspwm.settings = {
normal_border_color = colors.base03;
active_border_color = colors.base0C;
focused_border_color = colors.base0D;
presel_feedback_color = colors.base00;
};
xsession.windowManager.bspwm.settings =
with config.lib.stylix.colors.withHashtag; {
normal_border_color = base03;
active_border_color = base0C;
focused_border_color = base0D;
presel_feedback_color = base00;
};
};
}

View file

@ -1,3 +1,4 @@
{
maintainers = [ ];
name = "bspwm";
}

View file

@ -0,0 +1,17 @@
{ lib, pkgs, ... }:
{
services.xserver = {
enable = true;
windowManager.bspwm.enable = true;
};
home-manager.sharedModules = lib.singleton {
xsession.windowManager.bspwm = {
enable = true;
# We need something to open a window so that we can check the window borders
startupPrograms = [ "${lib.getExe pkgs.kitty}" ];
};
};
}

View file

@ -1,8 +1,4 @@
{ config, lib, ... }:
let
colors = config.lib.stylix.colors.withHashtag;
in
{
options.stylix.targets.btop.enable =
config.lib.stylix.mkEnableTarget "btop" true;
@ -21,50 +17,51 @@ in
theme_background = lib.mkIf (config.stylix.opacity.terminal != 1.0) false;
};
xdg.configFile."btop/themes/stylix.theme".text = with colors; ''
#Generated by Stylix
theme[main_bg]="${base00}"
theme[main_fg]="${base05}"
theme[title]="${base05}"
theme[hi_fg]="${base0D}"
theme[selected_bg]="${base03}"
theme[selected_fg]="${base0D}"
theme[inactive_fg]="${base04}"
theme[graph_text]="${base06}"
theme[meter_bg]="${base03}"
theme[proc_misc]="${base06}"
theme[cpu_box]="${base0E}"
theme[mem_box]="${base0B}"
theme[net_box]="${base0C}"
theme[proc_box]="${base0D}"
theme[div_line]="${base01}"
theme[temp_start]="${base0B}"
theme[temp_mid]="${base0A}"
theme[temp_end]="${base08}"
theme[cpu_start]="${base0B}"
theme[cpu_mid]="${base0A}"
theme[cpu_end]="${base08}"
theme[free_start]="${base0A}"
theme[free_mid]="${base0B}"
theme[free_end]="${base0B}"
theme[cached_start]="${base0C}"
theme[cached_mid]="${base0C}"
theme[cached_end]="${base0A}"
theme[available_start]="${base08}"
theme[available_mid]="${base0A}"
theme[available_end]="${base0B}"
theme[used_start]="${base0A}"
theme[used_mid]="${base09}"
theme[used_end]="${base08}"
theme[download_start]="${base0B}"
theme[download_mid]="${base0A}"
theme[download_end]="${base08}"
theme[upload_start]="${base0B}"
theme[upload_mid]="${base0A}"
theme[upload_end]="${base08}"
theme[process_start]="${base0B}"
theme[process_mid]="${base0A}"
theme[process_end]="${base08}"
'';
xdg.configFile."btop/themes/stylix.theme".text =
with config.lib.stylix.colors.withHashtag; ''
#Generated by Stylix
theme[main_bg]="${base00}"
theme[main_fg]="${base05}"
theme[title]="${base05}"
theme[hi_fg]="${base0D}"
theme[selected_bg]="${base03}"
theme[selected_fg]="${base0D}"
theme[inactive_fg]="${base04}"
theme[graph_text]="${base06}"
theme[meter_bg]="${base03}"
theme[proc_misc]="${base06}"
theme[cpu_box]="${base0E}"
theme[mem_box]="${base0B}"
theme[net_box]="${base0C}"
theme[proc_box]="${base0D}"
theme[div_line]="${base01}"
theme[temp_start]="${base0B}"
theme[temp_mid]="${base0A}"
theme[temp_end]="${base08}"
theme[cpu_start]="${base0B}"
theme[cpu_mid]="${base0A}"
theme[cpu_end]="${base08}"
theme[free_start]="${base0A}"
theme[free_mid]="${base0B}"
theme[free_end]="${base0B}"
theme[cached_start]="${base0C}"
theme[cached_mid]="${base0C}"
theme[cached_end]="${base0A}"
theme[available_start]="${base08}"
theme[available_mid]="${base0A}"
theme[available_end]="${base0B}"
theme[used_start]="${base0A}"
theme[used_mid]="${base09}"
theme[used_end]="${base08}"
theme[download_start]="${base0B}"
theme[download_mid]="${base0A}"
theme[download_end]="${base08}"
theme[upload_start]="${base0B}"
theme[upload_mid]="${base0A}"
theme[upload_end]="${base08}"
theme[process_start]="${base0B}"
theme[process_mid]="${base0A}"
theme[process_end]="${base08}"
'';
};
}

View file

@ -1,4 +1,5 @@
{ lib, ... }:
{
maintainers = [ lib.maintainers.naho ];
name = "btop";
}

View file

@ -1,3 +1,4 @@
{
maintainers = [ ];
name = "Cava";
}

View file

@ -1,3 +1,4 @@
{
maintainers = [ ];
name = "Cavalier";
}

View file

@ -1,4 +1,5 @@
{ lib, ... }:
{
maintainers = [ lib.maintainers.danth ];
name = "Chromium";
}

View file

@ -1,3 +1,4 @@
{
maintainers = [ ];
name = "kernel console";
}

View file

@ -1,29 +1,26 @@
{ config, lib, ... }:
with config.lib.stylix.colors;
{
options.stylix.targets.console.enable =
config.lib.stylix.mkEnableTarget "the Linux kernel console" true;
config.console.colors =
lib.mkIf (config.stylix.enable && config.stylix.targets.console.enable)
[
base00-hex
red
green
yellow
blue
magenta
cyan
base05-hex
base03-hex
red
green
yellow
blue
magenta
cyan
base06-hex
];
with config.lib.stylix.colors;
lib.mkIf (config.stylix.enable && config.stylix.targets.console.enable) [
base00-hex
red
green
yellow
blue
magenta
cyan
base05-hex
base03-hex
red
green
yellow
blue
magenta
cyan
base06-hex
];
}

21
modules/discord/README.md Normal file
View file

@ -0,0 +1,21 @@
# Discord
This module provides a collection of targets related to
[Discord](https://discord.com/). The same theme is used regardless of the
method of installation.
## Vencord, Vesktop
These targets use the options for [Vencord](https://vencord.dev/) and
[Vesktop](https://github.com/Vencord/Vesktop#readme) which are built in
to Home Manager.
## Nixcord
This target leverages the modules provided the
[Nixcord flake](https://github.com/KaylorBen/nixcord).
> [!IMPORTANT]
> The Nixcord target will have no effect unless Nixcord is properly
> [imported](https://github.com/KaylorBen/nixcord?tab=readme-ov-file#how-to-use-nixcord)
> into your configuration.

View file

@ -6,39 +6,45 @@
...
}:
let
template =
let
inherit (config.lib.stylix) colors;
inherit (config.stylix) fonts;
in
import ./template.nix { inherit colors fonts; };
template = import ./template.nix {
inherit (config.lib.stylix) colors;
inherit (config.stylix) fonts;
};
in
{
options.stylix.targets =
let
inherit (config.lib.stylix) mkEnableTarget;
in
{
vencord.enable = mkEnableTarget "Vencord" true;
vesktop.enable = mkEnableTarget "Vesktop" true;
nixcord.enable = mkEnableTarget "Nixcord" true;
};
lib.mapAttrs
(_: prettyName: {
enable = config.lib.stylix.mkEnableTarget prettyName true;
extraCss = lib.mkOption {
description = "Extra CSS to added to ${prettyName}'s theme";
type = lib.types.lines;
default = "";
};
})
{
vencord = "Vencord";
vesktop = "Vesktop";
nixcord = "Nixcord";
};
config = lib.mkIf config.stylix.enable (
lib.mkMerge [
(lib.mkIf config.stylix.targets.vencord.enable {
xdg.configFile."Vencord/themes/stylix.theme.css".text = template;
xdg.configFile."Vencord/themes/stylix.theme.css".text =
template + config.stylix.targets.vencord.extraCss;
})
(lib.mkIf config.stylix.targets.vesktop.enable (
lib.mkMerge [
(lib.mkIf pkgs.stdenv.hostPlatform.isLinux {
xdg.configFile."vesktop/themes/stylix.theme.css".text = template;
xdg.configFile."vesktop/themes/stylix.theme.css".text =
template + config.stylix.targets.vesktop.extraCss;
})
(lib.mkIf pkgs.stdenv.hostPlatform.isDarwin {
home.file."Library/Application Support/vesktop/themes/stylix.theme.css".text =
template;
template + config.stylix.targets.vesktop.extraCss;
})
]
))
@ -51,11 +57,13 @@ in
in
lib.mkMerge [
(lib.mkIf nixcord.discord.enable {
"Vencord/themes/stylix.theme.css".text = template;
"Vencord/themes/stylix.theme.css".text =
template + config.stylix.targets.nixcord.extraCss;
})
(lib.mkIf nixcord.vesktop.enable {
"vesktop/themes/stylix.theme.css".text = template;
"vesktop/themes/stylix.theme.css".text =
template + config.stylix.targets.nixcord.extraCss;
})
];

View file

@ -1,3 +1,5 @@
{ lib, ... }:
{
maintainers = [ ];
maintainers = [ lib.maintainers.Flameopathic ];
name = "Discord";
}

View file

@ -1,64 +1,479 @@
{ colors, fonts }:
''
/**
* @name Stylix
* @author Stylix
* @version 0.0.0
* @description Theme configured via NixOS or Home Manager.
**/
/**
* @name Stylix
* @author Stylix
* @version 0.0.0
* @description Theme configured via NixOS or Home Manager.
**/
:root {
--font-primary: ${fonts.sansSerif.name};
--font-display: ${fonts.sansSerif.name};
--font-code: ${fonts.monospace.name};
--base00: #${colors.base00}; /* Black */
--base01: #${colors.base01}; /* Bright Black */
--base02: #${colors.base02}; /* Grey */
--base03: #${colors.base03}; /* Brighter Grey */
--base04: #${colors.base04}; /* Bright Grey */
--base05: #${colors.base05}; /* White */
--base06: #${colors.base06}; /* Brighter White */
--base07: #${colors.base07}; /* Bright White */
--base08: #${colors.base08}; /* Red */
--base09: #${colors.base09}; /* Orange */
--base0A: #${colors.base0A}; /* Yellow */
--base0B: #${colors.base0B}; /* Green */
--base0C: #${colors.base0C}; /* Cyan */
--base0D: #${colors.base0D}; /* Blue */
--base0E: #${colors.base0E}; /* Purple */
--base0F: #${colors.base0F}; /* Magenta */
:root {
--font-primary: ${fonts.sansSerif.name};
--font-display: ${fonts.sansSerif.name};
--font-code: ${fonts.monospace.name};
--base00: #${colors.base00}; /* Black */
--base01: #${colors.base01}; /* Bright Black */
--base02: #${colors.base02}; /* Grey */
--base03: #${colors.base03}; /* Brighter Grey */
--base04: #${colors.base04}; /* Bright Grey */
--base05: #${colors.base05}; /* White */
--base06: #${colors.base06}; /* Brighter White */
--base07: #${colors.base07}; /* Bright White */
--base08: #${colors.base08}; /* Red */
--base09: #${colors.base09}; /* Orange */
--base0A: #${colors.base0A}; /* Yellow */
--base0B: #${colors.base0B}; /* Green */
--base0C: #${colors.base0C}; /* Cyan */
--base0D: #${colors.base0D}; /* Blue */
--base0E: #${colors.base0E}; /* Purple */
--base0F: #${colors.base0F}; /* Magenta */
--primary-630: var(--base00); /* Autocomplete background */
--primary-660: var(--base00); /* Search input background */
--primary-630: var(--base00); /* Autocomplete background */
--primary-660: var(--base00); /* Search input background */
}
/* Copyright (c) 2025 Cole Schaefer
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE. */
.theme-light,
.theme-dark,
.theme-darker,
.theme-midnight,
.visual-refresh {
--activity-card-background: var(--base01) !important;
--background-accent: var(--base03) !important;
--background-floating: var(--base02) !important;
--background-mentioned-hover: var(--base02) !important;
--background-mentioned: var(--base01) !important;
--background-message-highlight: var(--base01) !important;
--background-message-hover: var(--base00) !important;
--background-modifier-accent: var(--base02) !important;
--background-modifier-active: var(--base02) !important;
--background-modifier-hover: var(--base00) !important;
--background-modifier-selected: var(--base01) !important;
--background-primary: var(--base00) !important;
--background-secondary-alt: var(--base01) !important;
--background-secondary: var(--base01) !important;
--background-surface-highest: var(--base02) !important;
--background-surface-higher: var(--base02) !important;
--background-surface-high: var(--base02) !important;
--background-tertiary: var(--base00) !important;
--background-base-low: var(--base01) !important;
--background-base-lower: var(--base00) !important;
--background-base-lowest: var(--base00) !important;
--background-base-tertiary: var(--base00) !important;
--background-code: var(--base02) !important;
--background-mod-subtle: var(--base02) !important;
--bg-base-secondary: var(--base01) !important;
--bg-base-tertiary: var(--base00) !important;
--bg-brand: var(--base03) !important;
--bg-mod-faint: var(--base01) !important;
--bg-overlay-2: var(--base01) !important;
--bg-overlay-3: var(--base01) !important;
--bg-overlay-color-inverse: var(--base03) !important;
--bg-surface-raised: var(--base02) !important;
--bg-surface-overlay: var(--base00) !important;
--black: var(--base00) !important;
--blurple-50: var(--base0B) !important;
--border-faint: var(--base02) !important;
--brand-05a: var(--base01) !important;
--brand-10a: var(--base01) !important;
--brand-15a: var(--base01) !important;
--brand-260: var(--base0D) !important;
--brand-360: var(--base0D) !important;
--brand-500: var(--base0F) !important;
--brand-560: var(--base01) !important;
--button-danger-background: var(--base08) !important;
--button-filled-brand-background: var(--base0D) !important;
--button-filled-brand-background-hover: var(--base03) !important;
--button-filled-brand-text: var(--base00) !important;
--button-filled-brand-text-hover: var(--base05) !important;
--button-outline-positive-border: var(--base0B) !important;
--button-outline-danger-background-hover: var(--base08) !important;
--button-outline-danger-border-hover: var(--base08) !important;
--button-positive-background: var(--base0B) !important;
--button-positive-background-hover: var(--base03) !important;
--button-secondary-background: var(--base02) !important;
--button-secondary-background-hover: var(--base03) !important;
--card-primary-bg: var(--base02) !important;
--channel-icon: var(--base04) !important;
--channels-default: var(--base04) !important;
--channel-text-area-placeholder: var(--base03) !important;
--channeltextarea-background: var(--base01) !important;
--chat-background-default: var(--base02) !important;
--checkbox-background-checked: var(--base0D) !important;
--checkbox-border-checked: var(--base0D) !important;
--checkbox-background-default: var(--base02) !important;
--checkbox-border-default: var(--base03) !important;
--control-brand-foreground-new: var(--base0D) !important;
--control-brand-foreground: var(--base04) !important;
--custom-notice-text: var(--base01) !important;
--font-display: var(--font, "gg sans") !important;
--font-headline: var(--font, "gg sans") !important;
--font-primary: var(--font, "gg sans") !important;
--green-330: var(--base0B) !important;
--green-360: var(--base0B) !important;
--header-primary: var(--base04) !important;
--header-secondary: var(--base04) !important;
--home-background: var(--base00) !important;
--info-warning-foreground: var(--base0A) !important;
--input-background: var(--base02) !important;
--interactive-active: var(--base05) !important;
--interactive-hover: var(--base05) !important;
--interactive-muted: var(--base03) !important;
--interactive-normal: var(--base05) !important;
--mention-background: var(--base03) !important;
--mention-foreground: var(--base05) !important;
--menu-item-danger-active-bg: var(--base08) !important;
--menu-item-danger-hover-bg: var(--base08) !important;
--menu-item-default-hover-bg: var(--base03) !important;
--message-reacted-background: var(--base02) !important;
--message-reacted-text: var(--base05) !important;
--modal-background: var(--base01) !important;
--modal-footer-background: var(--base00) !important;
--notice-background-positive: var(--base0B) !important;
--notice-text-positive: var(--base01) !important;
--plum-23: var(--base02) !important;
--primary-130: var(--base05) !important;
--primary-300: var(--base05) !important;
--primary-500: var(--base02) !important;
--primary-600: var(--base00) !important;
--primary-630: var(--base01) !important;
--primary-660: var(--base00) !important;
--primary-800: var(--base00) !important;
--red-400: var(--base08) !important;
--red-460: var(--base08) !important;
--red-500: var(--base08) !important;
--red-630: var(--base08) !important;
--red: var(--base08) !important;
--scrollbar-auto-thumb: var(--base00) !important;
--scrollbar-auto-track: transparent;
--scrollbar-thin-thumb: var(--base00) !important;
--scrollbar-thin-track: transparent;
--search-popout-option-fade: none;
--search-popout-option-non-text-color: var(--base07) !important;
--status-danger-background: var(--base08) !important;
--status-danger: var(--base08) !important;
--status-negative: var(--base08) !important;
--status-positive-background: var(--base0B) !important;
--status-positive-text: var(--base0B) !important;
--status-positive: var(--base0B) !important;
--status-success: var(--base0B) !important;
--status-warning-background: var(--base03) !important;
--status-warning: var(--base09) !important;
--teal-430: var(--base0C) !important;
--text-brand: var(--base07) !important;
--text-feedback-positive: var(--base0B) !important;
--text-feedback-negative: var(--base08) !important;
--text-feedback-warning: var(--base09) !important;
--text-feedback-success: var(--base0B) !important;
--text-link: var(--base04) !important;
--text-muted: var(--base05) !important;
--text-negative: var(--base08) !important;
--text-normal: var(--base05) !important;
--text-positive: var(--base0B) !important;
--text-primary: var(--base05) !important;
--text-secondary: var(--base04) !important;
--text-tertiary: var(--base03) !important;
--text-warning: var(--base09) !important;
--textbox-markdown-syntax: var(--base05) !important;
--theme-base-color: var(--base00) !important;
--white-100: var(--base05) !important;
--white-200: var(--base05) !important;
--white-500: var(--base05) !important;
--white: var(--base05) !important;
--yellow-360: var(--base0A) !important;
--yellow-300: var(--base0A) !important;
--__lottieIconColor: var(--base03) !important;
}
.theme-light, .theme-dark {
--search-popout-option-fade: none; /* Disable fade for search popout */
--bg-overlay-2: var(--base00); /* These 2 are needed for proper threads coloring */
--home-background: var(--base00);
--bg-overlay-chat : var(--base00); /* Recolor forum channels */
--background-primary: var(--base00);
--background-secondary: var(--base01);
--background-secondary-alt: var(--base01);
--channeltextarea-background: var(--base01);
--background-tertiary: var(--base00);
--background-accent: var(--base0E);
--background-floating: var(--base01);
--background-modifier-hover: #{{base00-hex}}4c; /* 30% of base00 */
--background-modifier-selected: var(--base00);
--text-normal: var(--base05);
--text-secondary: var(--base03);
--text-muted: var(--base04);
--text-link: var(--base0C);
--interactive-normal: var(--base05);
--interactive-hover: var(--base05);
--interactive-active: var(--base07);
--interactive-muted: var(--base03);
--channels-default: var(--base04);
--channel-icon: var(--base04);
--header-primary: var(--base06);
--header-secondary: var(--base04);
--scrollbar-thin-track: transparent;
--scrollbar-auto-track: transparent;
/*--- Default Folder Color Recolor ---*/
.default__459fb {
background-color: var(--base07) !important;
}
/*--- Add Friend Button Text Recolor ---*/
.addFriend__133bf {
color: var(--base00) !important;
}
/*--- Close Icon Path Recolor ---*/
svg[class^="closeIcon__"] path {
fill: var(--base01) !important;
}
/*--- Listen Along Invite Recolor ---*/
.invite__4d3fa {
background: var(--base01) !important;
border-color: var(--base02) !important;
}
/*--- Activity Card Background Recolor ---*/
.card__73069 {
background-color: var(--base01);
}
div[class^="bar__"] {
background-color: var(--base01) !important;
border-color: var(--base02) !important;
}
/*--- Voice Bar Text Recolor ---*/
.barText__7aaec {
color: var(--base0B) !important;
}
.unreadIcon__7aaec {
color: var(--base0B) !important;
}
/*--- Mentions Bar Text Recolor ---*/
.mentionsBar__7aaec .barText__7aaec {
color: var(--base05) !important;
}
/*--- Forum Background Recolor ---*/
.container_f369db {
background-color: var(--bg-overlay-2);
}
/*--- Sidebar Icon Recolor ---*/
.circleIconButton__5bc7e {
color: var(--base04);
}
/*--- Summaries Tag Icon Recolor ---*/
.summariesBetaTag_cf58b5 {
color: var(--base03);
}
/*--- Folder Icon Recolor ---*/
div.folderIconWrapper__48112 {
background-color: var(--base01) !important;
}
/*--- Voice Chat Action Icon Recolor ---*/
path[fill^="rgb(88,101,242)"],
path[stroke^="rgb(88,101,242)"] {
fill: var(--base05) !important;
stroke: var(--base05) !important;
}
.lottieIcon__5eb9b.lottieIconColors__5eb9b.buttonIcon_e131a9 {
--__lottieIconColor: var(--base05) !important;
}
div[class^="actionButtons"] [class^="button"][class*="buttonColor_"],
div[class^="actionButtons"] [class^="button"] [class*="buttonColor_"] {
background-color: var(--base02);
}
/* --- Checkbox Recolor (OFF) --- */
.container__87bf1 {
background-color: var(--base03) !important;
}
/* --- Checkbox Recolor (ON) --- */
.checked__87bf1 {
background-color: var(--base0B) !important;
}
path[fill^="rgba(35, 165, 90, 1)"] {
fill: var(--base0B) !important;
}
/* --- Secure Lock Icon Recolor --- */
.lockIcon__2666b {
display: none;
}
/*--- Status Icon Recolor (DO NOT DISTURB) ---*/
svg[fill^="#f23f43"],
rect[fill^="#f23f43"] {
fill: var(--status-danger) !important;
}
/*--- Status Icon Recolor (IDLE) ---*/
svg[fill^="#f0b232"],
rect[fill^="#f0b232"] {
fill: var(--status-warning) !important;
}
/*--- Status Icon Recolor (ONLINE) ---*/
path[fill^="#23a55a"],
svg[fill^="#23a55a"],
rect[fill^="#23a55a"] {
fill: var(--status-positive) !important;
}
/*--- Status Icon Recolor (OFFLINE) ---*/
svg[fill^="#80848e"],
rect[fill^="#80848e"] {
fill: var(--base03) !important;
}
/*--- Default Color Swap ---*/
path[fill^="currentColor"],
svg[fill^="currentColor"],
rect[fill^="currentColor"] {
fill: var(--base06) !important;
}
path[d^="M12 22a10 10 0 1"] {
fill: var(--base02) !important;
}
/*--- Voice Chat Icon Badge Recolor ---*/
div[class^="iconBadge"] path[d^="M12 3a1 1 0 0 0-1-1h-.06"],
div[class^="iconBadge"] path[d^="M15.16 16.51c-.57.28"] {
fill: var(--base05) !important;
}
/*--- Nitro Icon Recolor ---*/
.premiumLabel_e681d1 svg path,
svg.guildBoostBadge__5dba5 path {
fill: var(--base0E) !important;
}
/*--- Server Booster Icon Recolor ---*/
.premiumIcon__5d473 {
color: var(--base0F);
}
/*--- Call Container Recolor ---*/
.callContainer_cb9592 {
background-color: var(--base00);
}
.gradientContainer_bfe55a {
background-image: var(--base00);
}
/*--- Store Gradient Recolors ---*/
.gradient_e9ef78 {
background: var(--base01) !important;
}
.bannerGradient__955a3 {
background: var(--base00) !important;
}
/*--- Increase Text Legibility ---*/
* {
text-rendering: optimizeLegibility !important;
}
/*--- Codeblock Syntax Highlighting Recolor ---*/
.hljs-attr {
color: var(--base06) !important;
}
.hljs-attribute {
color: var(--base06) !important;
}
.hljs-number {
color: var(--base06) !important;
}
.hljs-selector-class {
color: var(--base06) !important;
}
.hljs-comment {
color: var(--base03) !important;
}
.hljs-subst {
color: var(--base0D) !important;
}
.hljs-selector-pseudo {
color: var(--base0B) !important;
}
.hljs-section {
color: var(--base0B) !important;
}
.hljs-keyword {
color: var(--base08) !important;
}
.hljs-variable {
color: var(--base08) !important;
}
.hljs-meta {
color: var(--base03) !important;
}
.hljs-built_in {
color: var(--base09) !important;
}
.hljs-string {
color: var(--base0B) !important;
}
.hljs-title {
color: var(--base0E) !important;
}
/*--- Visual Refresh Recolor ---*/
/*--- BIG WORK IN PROGRESS. DISCORD MADE SOME BIG CHANGES. ---*/
.visual-refresh {
div[class^="autocomplete__"] {
background-color: var(--base02) !important;
}
path[fill^="rgba(88, 101, 242, 1)"] {
fill: var(--base0B) !important;
}
div[class^="topicsPillContainer"] {
--bg-overlay-2: var(--base02) !important;
}
.bg__960e4 {
background: var(--base00) !important;
}
.wrapper_ef3116 {
background-color: var(--base00) !important;
}
.sidebar_c48ade {
background-color: var(--base00) !important;
}
.searchBar__97492 {
background-color: var(--base02) !important;
}
.channelTextArea_f75fb0 {
background: var(--base02) !important;
}
.chatContent_f75fb0 {
background-color: var(--base01) !important;
}
.members_c8ffbb,
.member_c8ffbb {
background: var(--base00) !important;
}
.voiceBar__7aaec {
background-color: var(--base02) !important;
}
button.button__67645.redGlow__67645,
span.button__67645.redGlow__67645 {
background-color: var(--base02) !important;
}
/*--- Status Icon Recolor (DO NOT DISTURB) ---*/
svg[fill^="#d83a42"],
rect[fill^="#d83a42"] {
fill: var(--status-danger) !important;
}
/*--- Status Icon Recolor (IDLE) ---*/
svg[fill^="#ca9654"],
rect[fill^="#ca9654"] {
fill: var(--status-warning) !important;
}
/*--- Status Icon Recolor (ONLINE) ---*/
path[fill^="#43a25a"],
svg[fill^="#43a25a"],
rect[fill^="#43a25a"] {
fill: var(--status-positive) !important;
}
/*--- Status Icon Recolor (OFFLINE) ---*/
svg[fill^="#83838b"],
rect[fill^="#83838b"] {
fill: var(--base03) !important;
}
}
''

View file

@ -1,40 +1,40 @@
{ config, lib, ... }:
with config.lib.stylix.colors.withHashtag;
with config.stylix.fonts;
let
dunstOpacity = lib.toHexString (
((builtins.floor (config.stylix.opacity.popups * 100 + 0.5)) * 255) / 100
);
in
{
options.stylix.targets.dunst.enable =
config.lib.stylix.mkEnableTarget "Dunst" true;
config = lib.mkIf (config.stylix.enable && config.stylix.targets.dunst.enable) {
services.dunst.settings = {
global = {
separator_color = base02;
font = "${sansSerif.name} ${toString sizes.popups}";
};
services.dunst.settings =
with config.lib.stylix.colors.withHashtag;
let
inherit (config.stylix) fonts;
dunstOpacity = lib.toHexString (
((builtins.floor (config.stylix.opacity.popups * 100 + 0.5)) * 255) / 100
);
in
{
global = {
separator_color = base02;
font = "${fonts.sansSerif.name} ${toString fonts.sizes.popups}";
};
urgency_low = {
background = base01 + dunstOpacity;
foreground = base05;
frame_color = base0B;
};
urgency_low = {
background = base01 + dunstOpacity;
foreground = base05;
frame_color = base0B;
};
urgency_normal = {
background = base01 + dunstOpacity;
foreground = base05;
frame_color = base0E;
};
urgency_normal = {
background = base01 + dunstOpacity;
foreground = base05;
frame_color = base0E;
};
urgency_critical = {
background = base01 + dunstOpacity;
foreground = base05;
frame_color = base08;
urgency_critical = {
background = base01 + dunstOpacity;
foreground = base05;
frame_color = base08;
};
};
};
};
}

View file

@ -1,4 +1,5 @@
{ lib, ... }:
{
maintainers = [ lib.maintainers.naho ];
name = "Dunst";
}

View file

@ -4,15 +4,12 @@
lib,
...
}:
with config.lib.stylix.colors.withHashtag;
with config.stylix.fonts;
let
inherit (config.stylix) fonts;
emacsOpacity = builtins.toString (
builtins.ceil (config.stylix.opacity.applications * 100)
);
emacsSize = builtins.toString (sizes.terminal * 1.0);
emacsSize = builtins.toString (fonts.sizes.terminal * 1.0);
in
{
options.stylix.targets.emacs.enable =
@ -21,49 +18,52 @@ in
config = lib.mkIf (config.stylix.enable && config.stylix.targets.emacs.enable) {
programs.emacs = {
extraPackages = epkgs: [
(epkgs.trivialBuild {
pname = "base16-stylix-theme";
version = "0.1.0";
src = pkgs.writeText "base16-stylix-theme.el" ''
(require 'base16-theme)
(epkgs.trivialBuild (
with config.lib.stylix.colors.withHashtag;
{
pname = "base16-stylix-theme";
version = "0.1.0";
src = pkgs.writeText "base16-stylix-theme.el" ''
(require 'base16-theme)
(defvar base16-stylix-theme-colors
'(:base00 "${base00}"
:base01 "${base01}"
:base02 "${base02}"
:base03 "${base03}"
:base04 "${base04}"
:base05 "${base05}"
:base06 "${base06}"
:base07 "${base07}"
:base08 "${base08}"
:base09 "${base09}"
:base0A "${base0A}"
:base0B "${base0B}"
:base0C "${base0C}"
:base0D "${base0D}"
:base0E "${base0E}"
:base0F "${base0F}")
"All colors for Base16 stylix are defined here.")
(defvar base16-stylix-theme-colors
'(:base00 "${base00}"
:base01 "${base01}"
:base02 "${base02}"
:base03 "${base03}"
:base04 "${base04}"
:base05 "${base05}"
:base06 "${base06}"
:base07 "${base07}"
:base08 "${base08}"
:base09 "${base09}"
:base0A "${base0A}"
:base0B "${base0B}"
:base0C "${base0C}"
:base0D "${base0D}"
:base0E "${base0E}"
:base0F "${base0F}")
"All colors for Base16 stylix are defined here.")
;; Define the theme
(deftheme base16-stylix)
;; Define the theme
(deftheme base16-stylix)
;; Add all the faces to the theme
(base16-theme-define 'base16-stylix base16-stylix-theme-colors)
;; Add all the faces to the theme
(base16-theme-define 'base16-stylix base16-stylix-theme-colors)
;; Mark the theme as provided
(provide-theme 'base16-stylix)
;; Mark the theme as provided
(provide-theme 'base16-stylix)
;; Add path to theme to theme-path
(add-to-list 'custom-theme-load-path
(file-name-directory
(file-truename load-file-name)))
;; Add path to theme to theme-path
(add-to-list 'custom-theme-load-path
(file-name-directory
(file-truename load-file-name)))
(provide 'base16-stylix-theme)
'';
packageRequires = [ epkgs.base16-theme ];
})
(provide 'base16-stylix-theme)
'';
packageRequires = [ epkgs.base16-theme ];
}
))
];
extraConfig = ''
@ -72,7 +72,7 @@ in
(setq base16-theme-256-color-source 'colors)
(load-theme 'base16-stylix t)
;; Set font
(set-face-attribute 'default nil :font (font-spec :family "${monospace.name}" :size ${emacsSize}))
(set-face-attribute 'default nil :font (font-spec :family "${fonts.monospace.name}" :size ${emacsSize}))
;; -----------------------------
;; set opacity
(add-to-list 'default-frame-alist '(alpha-background . ${emacsOpacity}))

View file

@ -1,4 +1,5 @@
{ lib, ... }:
{
maintainers = [ lib.maintainers.panchoh ];
name = "Emacs";
}

View file

@ -1,4 +1,5 @@
{ lib, ... }:
{
maintainers = [ lib.maintainers.danth ];
name = "Eye of GNOME";
}

View file

@ -1,84 +1,83 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="30"
height="30"
version="1.1"
id="svg6"
sodipodi:docname="highlight.svg"
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
viewBox="0 0 60 60"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs10">
width="30"
height="30"
version="1.1"
id="svg6"
sodipodi:docname="highlight.svg"
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
viewBox="0 0 60 60"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs id="defs10">
<inkscape:path-effect
effect="fillet_chamfer"
id="path-effect998"
is_visible="true"
lpeversion="1"
nodesatellites_param="F,0,0,1,0,15,0,1 @ F,0,0,1,0,15,0,1 @ F,0,0,1,0,15,0,1 @ F,0,0,1,0,15,0,1"
unit="px"
method="arc"
mode="F"
radius="15"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="false"
hide_knots="false" />
effect="fillet_chamfer"
id="path-effect998"
is_visible="true"
lpeversion="1"
nodesatellites_param="F,0,0,1,0,15,0,1 @ F,0,0,1,0,15,0,1 @ F,0,0,1,0,15,0,1 @ F,0,0,1,0,15,0,1"
unit="px"
method="arc"
mode="F"
radius="15"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="false"
hide_knots="false" />
<inkscape:path-effect
effect="fillet_chamfer"
id="path-effect996"
is_visible="true"
lpeversion="1"
nodesatellites_param="IC,0,0,1,0,0,0,1 @ IC,0,0,1,0,0,0,1 @ IC,0,0,1,0,0,0,1 @ IC,0,0,1,0,0,0,1 @ IC,0,0,1,0,0,0,1 @ IC,0,0,1,0,0,0,1 @ IC,0,0,1,0,0,0,1 @ IC,0,0,1,0,0,0,1"
unit="px"
method="bezier"
mode="F"
radius="0"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="false"
hide_knots="false" />
effect="fillet_chamfer"
id="path-effect996"
is_visible="true"
lpeversion="1"
nodesatellites_param="IC,0,0,1,0,0,0,1 @ IC,0,0,1,0,0,0,1 @ IC,0,0,1,0,0,0,1 @ IC,0,0,1,0,0,0,1 @ IC,0,0,1,0,0,0,1 @ IC,0,0,1,0,0,0,1 @ IC,0,0,1,0,0,0,1 @ IC,0,0,1,0,0,0,1"
unit="px"
method="bezier"
mode="F"
radius="0"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="false"
hide_knots="false" />
</defs>
<sodipodi:namedview
id="namedview8"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="6.0512821"
inkscape:cx="-6.9406779"
inkscape:cy="29.663135"
inkscape:window-width="1440"
inkscape:window-height="834"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg6" />
id="namedview8"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="6.0512821"
inkscape:cx="-6.9406779"
inkscape:cy="29.663135"
inkscape:window-width="1440"
inkscape:window-height="834"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg6" />
<path
id="svg_1"
width="40"
height="40"
x="10.000001"
y="10.000001"
fill="#015ad7"
stroke="#000000"
stroke-width="0"
rx="0"
sodipodi:type="rect"
d="m 25.000001,10.000001 h 10 a 15,15 45 0 1 15,15 v 10 a 15,15 135 0 1 -15,15 h -10 a 15,15 45 0 1 -15,-15 v -10 a 15,15 135 0 1 15,-15 z"
inkscape:path-effect="#path-effect998"
style="fill:#{{base04-hex}};fill-opacity:1" />
id="svg_1"
width="40"
height="40"
x="10.000001"
y="10.000001"
fill="#015ad7"
stroke="#000000"
stroke-width="0"
rx="0"
sodipodi:type="rect"
d="m 25.000001,10.000001 h 10 a 15,15 45 0 1 15,15 v 10 a 15,15 135 0 1 -15,15 h -10 a 15,15 45 0 1 -15,-15 v -10 a 15,15 135 0 1 15,-15 z"
inkscape:path-effect="#path-effect998"
style="fill:#{{base04-hex}};fill-opacity:1" />
</svg>

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

Before After
Before After

View file

@ -1,4 +1,5 @@
{ lib, ... }:
{
maintainers = [ lib.maintainers.make-42 ];
name = "Fcitx 5";
}

View file

@ -1,124 +1,121 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="30"
height="30"
version="1.1"
id="svg7"
sodipodi:docname="panel.svg"
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
viewBox="0 0 60 60"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs11">
width="30"
height="30"
version="1.1"
id="svg7"
sodipodi:docname="panel.svg"
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
viewBox="0 0 60 60"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs id="defs11">
<inkscape:path-effect
effect="fillet_chamfer"
id="path-effect1"
is_visible="true"
lpeversion="1"
nodesatellites_param="F,0,0,1,0,19,0,1 @ F,0,0,1,0,19,0,1 @ F,0,0,1,0,19,0,1 @ F,0,0,1,0,19,0,1"
radius="9.5"
unit="px"
method="bezier"
mode="F"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="false"
hide_knots="false" />
effect="fillet_chamfer"
id="path-effect1"
is_visible="true"
lpeversion="1"
nodesatellites_param="F,0,0,1,0,19,0,1 @ F,0,0,1,0,19,0,1 @ F,0,0,1,0,19,0,1 @ F,0,0,1,0,19,0,1"
radius="9.5"
unit="px"
method="bezier"
mode="F"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="false"
hide_knots="false" />
<inkscape:path-effect
effect="fillet_chamfer"
id="path-effect475"
is_visible="true"
lpeversion="1"
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
unit="px"
method="auto"
mode="F"
radius="12"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="false"
hide_knots="false" />
effect="fillet_chamfer"
id="path-effect475"
is_visible="true"
lpeversion="1"
nodesatellites_param="F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1 @ F,0,0,1,0,0,0,1"
unit="px"
method="auto"
mode="F"
radius="12"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="false"
hide_knots="false" />
<filter
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter480"
x="-0.2"
y="-0.2"
width="1.4717949"
height="1.4717949">
style="color-interpolation-filters:sRGB"
inkscape:label="Drop Shadow"
id="filter480"
x="-0.2"
y="-0.2"
width="1.4717949"
height="1.4717949">
<feFlood
flood-opacity="0.498039"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood470" />
flood-opacity="0.498039"
flood-color="rgb(0,0,0)"
result="flood"
id="feFlood470" />
<feComposite
in="flood"
in2="SourceGraphic"
operator="in"
result="composite1"
id="feComposite472" />
in="flood"
in2="SourceGraphic"
operator="in"
result="composite1"
id="feComposite472" />
<feGaussianBlur
in="composite1"
stdDeviation="3"
result="blur"
id="feGaussianBlur474" />
in="composite1"
stdDeviation="3"
result="blur"
id="feGaussianBlur474" />
<feOffset
dx="2.8"
dy="2.8"
result="offset"
id="feOffset476" />
dx="2.8"
dy="2.8"
result="offset"
id="feOffset476" />
<feComposite
in="SourceGraphic"
in2="offset"
operator="over"
result="composite2"
id="feComposite478" />
in="SourceGraphic"
in2="offset"
operator="over"
result="composite2"
id="feComposite478" />
</filter>
</defs>
<sodipodi:namedview
id="namedview9"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="5.9"
inkscape:cx="-36.949153"
inkscape:cy="20.254237"
inkscape:window-width="1440"
inkscape:window-height="834"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="g5" />
<g
id="g5">
<title
id="title2">Layer 1</title>
id="namedview9"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="5.9"
inkscape:cx="-36.949153"
inkscape:cy="20.254237"
inkscape:window-width="1440"
inkscape:window-height="834"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="g5" />
<g id="g5">
<title id="title2">Layer 1</title>
<path
id="svg_1"
width="39"
height="39"
x="10.5"
y="10.5"
fill="#f0f0f0"
stroke="#adadad"
rx="0"
style="fill:#{{base00-hex}};fill-opacity:1;stroke:#{{base01-hex}};stroke-width:1.2;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter480)"
inkscape:path-effect="#path-effect1"
sodipodi:type="rect"
d="m 29.5,10.5 h 1 c 10.49341,0 19,8.50659 19,19 v 1 c 0,10.49341 -8.50659,19 -19,19 h -1 c -10.49341,0 -19,-8.50659 -19,-19 v -1 c 0,-10.49341 8.50659,-19 19,-19 z" />
id="svg_1"
width="39"
height="39"
x="10.5"
y="10.5"
fill="#f0f0f0"
stroke="#adadad"
rx="0"
style="fill:#{{base00-hex}};fill-opacity:1;stroke:#{{base01-hex}};stroke-width:1.2;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter480)"
inkscape:path-effect="#path-effect1"
sodipodi:type="rect"
d="m 29.5,10.5 h 1 c 10.49341,0 19,8.50659 19,19 v 1 c 0,10.49341 -8.50659,19 -19,19 h -1 c -10.49341,0 -19,-8.50659 -19,-19 v -1 c 0,-10.49341 8.50659,-19 19,-19 z" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

Before After
Before After

View file

@ -1,3 +1,4 @@
{
maintainers = [ ];
name = "feh";
}

View file

@ -46,7 +46,8 @@ let
g = colors."${color}-rgb-g";
b = colors."${color}-rgb-b";
};
nur = config.stylix.inputs.nur.legacyPackages.${pkgs.system};
nur =
config.stylix.inputs.nur.legacyPackages.${pkgs.stdenv.hostPlatform.system};
in
{
options.stylix.targets = lib.listToAttrs (
@ -61,14 +62,9 @@ in
default = [ ];
};
colorTheme.enable = config.lib.stylix.mkEnableTarget ''
[Firefox Color](https://color.firefox.com/) theme
'' false;
colorTheme.enable = lib.mkEnableOption "[Firefox Color](https://color.firefox.com/) on ${target.name}";
firefoxGnomeTheme.enable = config.lib.stylix.mkEnableTarget ''
[Firefox GNOME
theme](https://github.com/rafaelmardojai/firefox-gnome-theme)
'' false;
firefoxGnomeTheme.enable = lib.mkEnableOption "[Firefox GNOME theme](https://github.com/rafaelmardojai/firefox-gnome-theme) on ${target.name}";
}
) targets
);

View file

@ -1,4 +1,9 @@
{ lib, ... }:
{
maintainers = [ lib.maintainers.danth ];
maintainers = with lib.maintainers; [
Flameopathic
danth
];
name = "Firefox and its derivatives";
}

View file

@ -1,4 +1,5 @@
{ lib, ... }:
{
maintainers = [ lib.maintainers.naho ];
name = "fish";
}

View file

@ -1,4 +1,5 @@
{ lib, ... }:
{
maintainers = [ lib.maintainers.awwpotato ];
name = "Fnott";
}

View file

@ -1,18 +1,14 @@
{ config, lib, ... }:
let
cfg = config.stylix.targets.foot;
theme = config.lib.stylix.colors {
templateRepo = config.stylix.inputs.tinted-foot;
};
in
{
options.stylix.targets.foot.enable =
config.lib.stylix.mkEnableTarget "Foot" true;
config.programs.foot.settings = lib.mkIf cfg.enable {
config.programs.foot.settings = lib.mkIf config.stylix.targets.foot.enable {
main = {
include = theme;
font =
@ -20,6 +16,6 @@ in
"${monospace.name}:size=${toString sizes.terminal}";
dpi-aware = "no";
};
colors.alpha = with config.stylix.opacity; terminal;
colors.alpha = config.stylix.opacity.terminal;
};
}

View file

@ -1,3 +1,4 @@
{
maintainers = [ ];
name = "foot";
}

View file

@ -1,3 +1,4 @@
{
maintainers = [ ];
name = "Forge";
}

View file

@ -1,10 +1,6 @@
{ config, lib, ... }:
with config.lib.stylix.colors;
let
opacity = lib.toHexString (builtins.ceil (config.stylix.opacity.popups * 255));
in
{
options.stylix.targets.fuzzel.enable =
@ -13,7 +9,7 @@ in
config.programs.fuzzel.settings =
lib.mkIf (config.stylix.enable && config.stylix.targets.fuzzel.enable)
{
colors = {
colors = with config.lib.stylix.colors; {
background = "${base00-hex}${opacity}";
text = "${base05-hex}ff";
placeholder = "${base03-hex}ff";

View file

@ -1,3 +1,4 @@
{
maintainers = [ ];
name = "Fuzzel";
}

View file

@ -1,4 +1,5 @@
{ lib, ... }:
{
maintainers = [ lib.maintainers.naho ];
name = "fzf";
}

View file

@ -1,3 +1,4 @@
{
maintainers = [ ];
name = "gedit";
}

View file

@ -26,32 +26,32 @@
themes.stylix =
let
inherit (config.lib.stylix) colors;
inherit (config.lib.stylix.colors) withHashtag;
in
{
palette = [
"0=${withHashtag.base00}"
"1=${withHashtag.base08}"
"2=${withHashtag.base0B}"
"3=${withHashtag.base0A}"
"4=${withHashtag.base0D}"
"5=${withHashtag.base0E}"
"6=${withHashtag.base0C}"
"7=${withHashtag.base05}"
"8=${withHashtag.base03}"
"9=${withHashtag.base08}"
"10=${withHashtag.base0B}"
"11=${withHashtag.base0A}"
"12=${withHashtag.base0D}"
"13=${withHashtag.base0E}"
"14=${withHashtag.base0C}"
"15=${withHashtag.base07}"
];
background = colors.base00;
foreground = colors.base05;
cursor-color = colors.base05;
selection-background = colors.base02;
selection-foreground = colors.base05;
palette = with colors.withHashtag; [
"0=${base00}"
"1=${base08}"
"2=${base0B}"
"3=${base0A}"
"4=${base0D}"
"5=${base0E}"
"6=${base0C}"
"7=${base05}"
"8=${base03}"
"9=${base08}"
"10=${base0B}"
"11=${base0A}"
"12=${base0D}"
"13=${base0E}"
"14=${base0C}"
"15=${base07}"
];
};
};
};

View file

@ -1,3 +1,4 @@
{
maintainers = [ ];
name = "Ghostty";
}

View file

@ -1,3 +1,4 @@
{
maintainers = [ ];
name = "GitUI";
}

View file

@ -1,4 +1,5 @@
{ lib, ... }:
{
maintainers = [ lib.maintainers.louis-thevenet ];
name = "Glance";
}

View file

@ -1,28 +0,0 @@
{ config, lib, ... }:
let
style = config.lib.stylix.colors {
template = ../gedit/template.xml.mustache;
extension = "xml";
};
in
{
options.stylix.targets.gnome-text-editor.enable =
config.lib.stylix.mkEnableTarget "GNOME Text Editor" true;
config =
lib.mkIf
(config.stylix.enable && config.stylix.targets.gnome-text-editor.enable)
{
nixpkgs.overlays = [
(_: prev: {
gnome-text-editor = prev.gnome-text-editor.overrideAttrs (oldAttrs: {
postFixup = ''
${oldAttrs.postFixup or ""}
cp ${style} $out/share/gnome-text-editor/styles/stylix.xml
'';
});
})
];
};
}

View file

@ -1,8 +1,5 @@
{ config, lib, ... }:
{
imports = [ ./common.nix ];
config =
lib.mkIf
(config.stylix.enable && config.stylix.targets.gnome-text-editor.enable)

View file

@ -1,3 +1,4 @@
{
maintainers = [ ];
name = "GNOME Text Editor";
}

View file

@ -1,3 +0,0 @@
{
imports = [ ./common.nix ];
}

View file

@ -0,0 +1,24 @@
{ config, lib, ... }:
let
style = config.lib.stylix.colors {
template = ../gedit/template.xml.mustache;
extension = "xml";
};
in
{
options.stylix.targets.gnome-text-editor.enable =
config.lib.stylix.mkEnableTarget "GNOME Text Editor" true;
overlay =
_: prev:
lib.optionalAttrs
(config.stylix.enable && config.stylix.targets.gnome-text-editor.enable)
{
gnome-text-editor = prev.gnome-text-editor.overrideAttrs (oldAttrs: {
postFixup = ''
${oldAttrs.postFixup or ""}
cp ${style} $out/share/gnome-text-editor/styles/stylix.xml
'';
});
};
}

View file

@ -1,4 +1,5 @@
{ lib, ... }:
{
maintainers = [ lib.maintainers.danth ];
name = "GNOME";
}

View file

@ -1,3 +1,4 @@
{
maintainers = [ ];
name = "GRUB";
}

View file

@ -5,12 +5,10 @@
...
}:
with config.lib.stylix;
with config.stylix.fonts;
with config.lib.stylix.colors.withHashtag;
let
cfg = config.stylix.targets.grub;
inherit (config.stylix) imageScalingMode fonts;
inherit (config.lib.stylix) mkEnableTarget mkEnableWallpaper pixel;
# Grub requires fonts to be converted to "PFF2 format"
# This function takes a font { name, package } and produces a .pf2 file
mkGrubFont =
@ -28,11 +26,9 @@ let
)
# Convert to .pf2
${pkgs.grub2}/bin/grub-mkfont $font --output $out --size ${toString sizes.applications}
${pkgs.grub2}/bin/grub-mkfont $font --output $out --size ${toString fonts.sizes.applications}
'';
inherit (config.stylix) imageScalingMode;
image-scale =
if imageScalingMode == "fill" then
"crop"
@ -63,89 +59,91 @@ in
})
];
options.stylix.targets.grub = {
enable = config.lib.stylix.mkEnableTarget "GRUB" true;
useWallpaper = config.lib.stylix.mkEnableWallpaper "GRUB" false;
enable = mkEnableTarget "GRUB" true;
useWallpaper = mkEnableWallpaper "GRUB" false;
};
config.boot.loader.grub = lib.mkIf (config.stylix.enable && cfg.enable) {
backgroundColor = base00;
# Need to override the NixOS splash, this will match the background
splashImage = pixel "base00";
config.boot.loader.grub =
with config.lib.stylix.colors.withHashtag;
lib.mkIf (config.stylix.enable && cfg.enable) {
backgroundColor = base00;
# Need to override the NixOS splash, this will match the background
splashImage = pixel "base00";
# This font will be used for the GRUB terminal
font = toString (mkGrubFont monospace);
# This font will be used for the GRUB terminal
font = toString (mkGrubFont fonts.monospace);
# TODO: Include OS icons
theme =
pkgs.runCommand "stylix-grub"
{
themeTxt = ''
desktop-image: "background.png"
desktop-image-scale-method: "${image-scale}"
desktop-color: "${base00}"
# TODO: Include OS icons
theme =
pkgs.runCommand "stylix-grub"
{
themeTxt = ''
desktop-image: "background.png"
desktop-image-scale-method: "${image-scale}"
desktop-color: "${base00}"
title-text: ""
title-text: ""
terminal-left: "10%"
terminal-top: "20%"
terminal-width: "80%"
terminal-height: "60%"
terminal-left: "10%"
terminal-top: "20%"
terminal-width: "80%"
terminal-height: "60%"
+ progress_bar {
left = 25%
top = 80%+20 # 20 pixels below boot menu
width = 50%
height = 30
+ progress_bar {
left = 25%
top = 80%+20 # 20 pixels below boot menu
width = 50%
height = 30
id = "__timeout__"
show_text = true
font = "${sansSerif.name}"
text = "@TIMEOUT_NOTIFICATION_MIDDLE@"
id = "__timeout__"
show_text = true
font = "${fonts.sansSerif.name}"
text = "@TIMEOUT_NOTIFICATION_MIDDLE@"
border_color = "${base00}"
bg_color = "${base00}"
fg_color = "${base0B}"
text_color = "${base05}"
}
border_color = "${base00}"
bg_color = "${base00}"
fg_color = "${base0B}"
text_color = "${base05}"
}
+ boot_menu {
left = 25%
top = 20%
width = 50%
height = 60%
menu_pixmap_style = "background_*.png"
+ boot_menu {
left = 25%
top = 20%
width = 50%
height = 60%
menu_pixmap_style = "background_*.png"
item_height = 40
item_icon_space = 8
item_spacing = 0
item_padding = 0
item_font = "${sansSerif.name}"
item_color = "${base05}"
item_height = 40
item_icon_space = 8
item_spacing = 0
item_padding = 0
item_font = "${fonts.sansSerif.name}"
item_color = "${base05}"
selected_item_color = "${base01}"
selected_item_pixmap_style = "selection_*.png"
}
'';
passAsFile = [ "themeTxt" ];
}
''
mkdir $out
cp $themeTxtPath $out/theme.txt
${
if
cfg.useWallpaper
# Make sure the background image is .png by asking to convert it
then
"${pkgs.imagemagick}/bin/convert ${config.stylix.image} png32:$out/background.png"
else
"cp ${pixel "base00"} $out/background.png"
selected_item_color = "${base01}"
selected_item_pixmap_style = "selection_*.png"
}
'';
passAsFile = [ "themeTxt" ];
}
''
mkdir $out
cp $themeTxtPath $out/theme.txt
cp ${pixel "base01"} $out/background_c.png
cp ${pixel "base0B"} $out/selection_c.png
${
if
cfg.useWallpaper
# Make sure the background image is .png by asking to convert it
then
"${pkgs.imagemagick}/bin/convert ${config.stylix.image} png32:$out/background.png"
else
"cp ${pixel "base00"} $out/background.png"
}
cp ${mkGrubFont sansSerif} $out/sans_serif.pf2
'';
};
cp ${pixel "base01"} $out/background_c.png
cp ${pixel "base0B"} $out/selection_c.png
cp ${mkGrubFont fonts.sansSerif} $out/sans_serif.pf2
'';
};
}

View file

@ -1,4 +1,5 @@
{ lib, ... }:
{
maintainers = [ lib.maintainers.danth ];
name = "GTK";
}

View file

@ -1,3 +1,4 @@
{
maintainers = [ ];
name = "Halloy";
}

View file

@ -1,6 +1,7 @@
## Base16 {{scheme-name}}
# Author: {{scheme-author}}
# Generated by Stylix
# Copyright (c) 2024 Calvin Lee
# Original template from https://github.com/4e554c4c/base16-halloy
[general]

View file

@ -1,3 +1,4 @@
{
maintainers = [ ];
name = "Helix";
}

View file

@ -52,6 +52,7 @@
(lib.mkIf cfg.hyprpaper.enable {
services.hyprpaper.enable = true;
stylix.targets.hyprpaper.enable = true;
wayland.windowManager.hyprland.settings.misc.disable_hyprland_logo = true;
})
]
);

View file

@ -4,4 +4,6 @@
naho
skoove
];
name = "Hyprland";
}

View file

@ -1,23 +1,20 @@
{ config, lib, ... }:
with config.lib.stylix;
let
cfg = config.stylix.targets.hyprlock;
in
{
options.stylix.targets.hyprlock = {
options.stylix.targets.hyprlock = with config.lib.stylix; {
enable = mkEnableTarget "Hyprlock" true;
useWallpaper = mkEnableWallpaper "Hyprlock" true;
};
config = lib.mkIf (config.stylix.enable && cfg.enable) {
programs.hyprlock.settings = {
programs.hyprlock.settings = with config.lib.stylix.colors; {
background = {
color = "rgb(${colors.base00})";
color = "rgb(${base00})";
path = lib.mkIf cfg.useWallpaper "${config.stylix.image}";
};
input-field = with colors; {
input-field = {
outer_color = "rgb(${base03})";
inner_color = "rgb(${base00})";
font_color = "rgb(${base05})";

View file

@ -1,3 +1,4 @@
{
maintainers = [ ];
name = "hyprlock";
}

View file

@ -1,4 +1,5 @@
{ lib, ... }:
{
maintainers = [ lib.maintainers.naho ];
name = "hyprpaper";
}

View file

@ -1,13 +1,5 @@
{ config, lib, ... }:
with config.lib.stylix.colors.withHashtag;
let
text = base05;
urgent = base08;
focused = base0D;
unfocused = base03;
fonts =
let
inherit (config.stylix) fonts;
@ -16,89 +8,96 @@ let
names = [ fonts.sansSerif.name ];
size = fonts.sizes.desktop * 1.0;
};
in
{
options.stylix.targets.i3.enable = config.lib.stylix.mkEnableTarget "i3" true;
config = lib.mkMerge [
(lib.mkIf config.stylix.targets.i3.enable {
xsession.windowManager.i3.config = {
inherit fonts;
config =
with config.lib.stylix.colors.withHashtag;
let
text = base05;
urgent = base08;
focused = base0D;
unfocused = base03;
in
lib.mkMerge [
(lib.mkIf config.stylix.targets.i3.enable {
xsession.windowManager.i3.config = {
inherit fonts;
colors =
let
background = base00;
indicator = base0B;
in
{
inherit background;
urgent = {
inherit background indicator text;
border = urgent;
childBorder = urgent;
colors =
let
background = base00;
indicator = base0B;
in
{
inherit background;
urgent = {
inherit background indicator text;
border = urgent;
childBorder = urgent;
};
focused = {
inherit background indicator text;
border = focused;
childBorder = focused;
};
focusedInactive = {
inherit background indicator text;
border = unfocused;
childBorder = unfocused;
};
unfocused = {
inherit background indicator text;
border = unfocused;
childBorder = unfocused;
};
placeholder = {
inherit background indicator text;
border = unfocused;
childBorder = unfocused;
};
};
focused = {
inherit background indicator text;
border = focused;
childBorder = focused;
};
focusedInactive = {
inherit background indicator text;
border = unfocused;
childBorder = unfocused;
};
unfocused = {
inherit background indicator text;
border = unfocused;
childBorder = unfocused;
};
placeholder = {
inherit background indicator text;
border = unfocused;
childBorder = unfocused;
};
};
# output."*".bg = "${config.stylix.image} fill";
};
})
# output."*".bg = "${config.stylix.image} fill";
};
})
{
# Merge this with your bar configuration using //config.lib.stylix.i3.bar
lib.stylix.i3.bar = {
inherit fonts;
{
# Merge this with your bar configuration using //config.lib.stylix.i3.bar
lib.stylix.i3.bar = {
inherit fonts;
colors =
let
background = base00;
border = background;
in
{
inherit background;
statusline = text;
separator = base03;
focusedWorkspace = {
inherit text background;
border = focused;
colors =
let
background = base00;
border = background;
in
{
inherit background;
statusline = text;
separator = base03;
focusedWorkspace = {
inherit text background;
border = focused;
};
activeWorkspace = {
inherit border background;
text = focused;
};
inactiveWorkspace = {
inherit text border background;
};
urgentWorkspace = {
inherit text background;
border = urgent;
};
bindingMode = {
inherit text border;
background = urgent;
};
};
activeWorkspace = {
inherit border background;
text = focused;
};
inactiveWorkspace = {
inherit text border background;
};
urgentWorkspace = {
inherit text background;
border = urgent;
};
bindingMode = {
inherit text border;
background = urgent;
};
};
};
}
];
};
}
];
}

View file

@ -1,3 +1,4 @@
{
maintainers = [ ];
name = "i3";
}

View file

@ -1,22 +1,19 @@
{ config, lib, ... }:
let
colors = config.lib.stylix.colors.withHashtag;
in
{ config, ... }:
{
# Merge this with your bar's theme's overrides with //config.lib.stylix.i3status-rust.bar
config.lib.stylix.i3status-rust.bar = with colors; {
idle_bg = base00;
idle_fg = base05;
info_bg = base09;
info_fg = base00;
good_bg = base01;
good_fg = base05;
warning_bg = base0A;
warning_fg = base00;
critical_bg = base08;
critical_fg = base00;
separator_bg = base00;
separator_fg = base05;
};
config.lib.stylix.i3status-rust.bar =
with config.lib.stylix.colors.withHashtag; {
idle_bg = base00;
idle_fg = base05;
info_bg = base09;
info_fg = base00;
good_bg = base01;
good_fg = base05;
warning_bg = base0A;
warning_fg = base00;
critical_bg = base08;
critical_fg = base00;
separator_bg = base00;
separator_fg = base05;
};
}

View file

@ -1,3 +1,4 @@
{
maintainers = [ ];
name = "i3status-rust";
}

View file

@ -1,75 +1,76 @@
{ config, lib, ... }:
with config.lib.stylix.colors.withHashtag;
{
config,
lib,
...
}:
{
options.stylix.targets.k9s.enable = config.lib.stylix.mkEnableTarget "k9s" true;
config = lib.mkIf config.stylix.targets.k9s.enable {
config = lib.mkIf (config.stylix.enable && config.stylix.targets.k9s.enable) {
programs.k9s.skins.skin = {
k9s = {
k9s = with config.lib.stylix.colors.withHashtag; {
body = {
fgColor = base05-hex;
fgColor = base05;
bgColor = "default";
logoColor = base0C-hex;
logoColor = base0C;
};
prompt = {
fgColor = base05-hex;
bgColor = base00-hex;
suggestColor = base0A-hex;
fgColor = base05;
bgColor = "default";
suggestColor = base02;
};
info = {
fgColor = base0B-hex;
sectionColor = base05-hex;
fgColor = base0B;
sectionColor = base05;
};
dialog = {
fgColor = base05-hex;
bgColor = "default";
buttonFgColor = base05-hex;
buttonBgColor = base0C-hex;
buttonFocusFgColor = base0E-hex;
buttonFocusBgColor = base0B-hex;
labelFgColor = base0A-hex;
fieldFgColor = base05-hex;
fgColor = base05;
bgColor = base01;
buttonFgColor = base05;
buttonBgColor = base02;
buttonFocusFgColor = base11;
buttonFocusBgColor = base0B;
labelFgColor = base0A;
fieldFgColor = base05;
};
frame = {
border = {
fgColor = base02-hex;
focusColor = base01-hex;
fgColor = base02;
focusColor = base01;
};
menu = {
fgColor = base05-hex;
keyColor = base0B-hex;
numKeyColor = base0B-hex;
fgColor = base05;
keyColor = base0B;
numKeyColor = base0B;
};
crumbs = {
fgColor = base05-hex;
bgColor = base01-hex;
activeColor = base01-hex;
fgColor = base05;
bgColor = base01;
activeColor = base02;
};
status = {
newColor = base08-hex;
modifyColor = base0C-hex;
addColor = base09-hex;
errorColor = base0D-hex;
highlightcolor = base0A-hex;
killColor = base03-hex;
completedColor = base03-hex;
newColor = base0C;
modifyColor = base09;
addColor = base0B;
errorColor = base08;
highlightcolor = base0A;
killColor = base03;
completedColor = base03;
};
title = {
fgColor = base05-hex;
bgColor = base01-hex;
highlightColor = base0A-hex;
counterColor = base0C-hex;
filterColor = base0B-hex;
fgColor = base05;
bgColor = base01;
highlightColor = base0A;
counterColor = base0C;
filterColor = base0B;
};
};
@ -77,52 +78,54 @@ with config.lib.stylix.colors.withHashtag;
charts = {
bgColor = "default";
defaultDialColors = [
base0C-hex
base0D-hex
base0C
base0D
];
defaultChartColors = [
base0C-hex
base0D-hex
base0C
base0D
];
};
table = {
fgColor = base05-hex;
fgColor = base05;
bgColor = "default";
header = {
fgColor = base05-hex;
fgColor = base05;
bgColor = "default";
sorterColor = base08-hex;
sorterColor = base08;
};
};
xray = {
fgColor = base05-hex;
fgColor = base05;
bgColor = "default";
cursorColor = base01-hex;
graphicColor = base0C-hex;
cursorColor = base01;
graphicColor = base0C;
showIcons = false;
};
yaml = {
keyColor = base0B-hex;
colonColor = base0C-hex;
valueColor = base05-hex;
keyColor = base08;
colonColor = base05;
valueColor = base0B;
};
logs = {
fgColor = base05-hex;
fgColor = base05;
bgColor = "default";
indicator = {
fgColor = base05-hex;
bgColor = base0C-hex;
fgColor = base05;
bgColor = "default";
toggleOnColor = base0B;
toggleOffColor = base04;
};
};
help = {
fgColor = base05-hex;
bgColor = base00-hex;
indicator.fgColor = base0D-hex;
fgColor = base05;
bgColor = "default";
indicator.fgColor = base0D;
};
};
};

View file

@ -1,3 +1,5 @@
{ lib, ... }:
{
maintainers = [ ];
maintainers = [ lib.maintainers.cluther ];
name = "K9s";
}

View file

@ -370,7 +370,7 @@ in
# This activation entry will run the theme activator when the homeConfiguration is activated
activation.stylixLookAndFeel = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
${activator} || verboseEcho \
run ${activator} || verboseEcho \
"Stylix KDE theme setting failed. This only works in a running Plasma session."
'';
};

View file

@ -1,3 +1,4 @@
{
maintainers = [ ];
name = "KDE";
}

View file

@ -27,9 +27,7 @@ in
inherit (config.stylix.fonts.monospace) package name;
size = config.stylix.fonts.sizes.terminal;
};
settings.background_opacity =
with config.stylix.opacity;
"${builtins.toString terminal}";
settings.background_opacity = "${builtins.toString config.stylix.opacity.terminal}";
extraConfig = ''
include ${theme}
'';

View file

@ -1,4 +1,5 @@
{ lib, ... }:
{
maintainers = [ lib.maintainers.naho ];
name = "kitty";
}

View file

@ -1,3 +1,4 @@
{
maintainers = [ ];
name = "Kmscon";
}

View file

@ -7,66 +7,66 @@
programs.kubecolor.settings = {
preset =
if config.stylix.polarity == "either" then "" else "${config.stylix.polarity}";
theme = {
theme = with config.lib.stylix.colors.withHashtag; {
base = {
info = "fg=${config.lib.stylix.colors.withHashtag.base05-hex}";
primary = "fg=${config.lib.stylix.colors.withHashtag.base0E-hex}";
secondary = "fg=${config.lib.stylix.colors.withHashtag.base0D-hex}";
success = "fg=${config.lib.stylix.colors.withHashtag.base0B-hex}:bold";
warning = "fg=${config.lib.stylix.colors.withHashtag.base0A-hex}:bold";
danger = "fg=${config.lib.stylix.colors.withHashtag.base08-hex}:bold";
muted = "fg=${config.lib.stylix.colors.withHashtag.base04-hex}";
key = "fg=${config.lib.stylix.colors.withHashtag.base07-hex}:bold";
info = "fg=${base05-hex}";
primary = "fg=${base0E-hex}";
secondary = "fg=${base0D-hex}";
success = "fg=${base0B-hex}:bold";
warning = "fg=${base0A-hex}:bold";
danger = "fg=${base08-hex}:bold";
muted = "fg=${base04-hex}";
key = "fg=${base07-hex}:bold";
};
default = "fg=${config.lib.stylix.colors.withHashtag.base05-hex}";
default = "fg=${base05-hex}";
data = {
key = "fg=${config.lib.stylix.colors.withHashtag.base07-hex}:bold";
string = "fg=${config.lib.stylix.colors.withHashtag.base05-hex}";
true = "fg=${config.lib.stylix.colors.withHashtag.base0B-hex}:bold";
false = "fg=${config.lib.stylix.colors.withHashtag.base08-hex}:bold";
number = "fg=${config.lib.stylix.colors.withHashtag.base0E-hex}";
null = "fg=${config.lib.stylix.colors.withHashtag.base04-hex}";
quantity = "fg=${config.lib.stylix.colors.withHashtag.base0E-hex}";
duration = "fg=${config.lib.stylix.colors.withHashtag.base09-hex}";
durationfresh = "fg=${config.lib.stylix.colors.withHashtag.base0B-hex}";
key = "fg=${base07-hex}:bold";
string = "fg=${base05-hex}";
true = "fg=${base0B-hex}:bold";
false = "fg=${base08-hex}:bold";
number = "fg=${base0E-hex}";
null = "fg=${base04-hex}";
quantity = "fg=${base0E-hex}";
duration = "fg=${base09-hex}";
durationfresh = "fg=${base0B-hex}";
ratio = {
zero = "fg=${config.lib.stylix.colors.withHashtag.base04-hex}";
equal = "fg=${config.lib.stylix.colors.withHashtag.base0B-hex}";
unequal = "fg=${config.lib.stylix.colors.withHashtag.base0A-hex}";
zero = "fg=${base04-hex}";
equal = "fg=${base0B-hex}";
unequal = "fg=${base0A-hex}";
};
};
status = {
success = "fg=${config.lib.stylix.colors.withHashtag.base0B-hex}:bold";
warning = "fg=${config.lib.stylix.colors.withHashtag.base0A-hex}:bold";
error = "fg=${config.lib.stylix.colors.withHashtag.base08-hex}:bold";
success = "fg=${base0B-hex}:bold";
warning = "fg=${base0A-hex}:bold";
error = "fg=${base08-hex}:bold";
};
table = {
header = "fg=${config.lib.stylix.colors.withHashtag.base05-hex}:bold";
columns = "fg=${config.lib.stylix.colors.withHashtag.base05-hex}";
header = "fg=${base05-hex}:bold";
columns = "fg=${base05-hex}";
};
stderr = {
default = "fg=${config.lib.stylix.colors.withHashtag.base05-hex}";
error = "fg=${config.lib.stylix.colors.withHashtag.base08-hex}:bold";
default = "fg=${base05-hex}";
error = "fg=${base08-hex}:bold";
};
describe = {
key = "fg=${config.lib.stylix.colors.withHashtag.base07-hex}:bold";
key = "fg=${base07-hex}:bold";
};
apply = {
created = "fg=${config.lib.stylix.colors.withHashtag.base0B-hex}";
configured = "fg=${config.lib.stylix.colors.withHashtag.base0A-hex}";
unchanged = "fg=${config.lib.stylix.colors.withHashtag.base05-hex}";
dryrun = "fg=${config.lib.stylix.colors.withHashtag.base0D-hex}";
fallback = "fg=${config.lib.stylix.colors.withHashtag.base05-hex}";
created = "fg=${base0B-hex}";
configured = "fg=${base0A-hex}";
unchanged = "fg=${base05-hex}";
dryrun = "fg=${base0D-hex}";
fallback = "fg=${base05-hex}";
};
explain = {
key = "fg=${config.lib.stylix.colors.withHashtag.base07-hex}:bold";
required = "fg=${config.lib.stylix.colors.withHashtag.base00-hex}:bold";
key = "fg=${base07-hex}:bold";
required = "fg=${base00-hex}:bold";
};
options = {
flag = "fg=${config.lib.stylix.colors.withHashtag.base07-hex}:bold";
flag = "fg=${base07-hex}:bold";
};
version = {
key = "fg=${config.lib.stylix.colors.withHashtag.base07-hex}:bold";
key = "fg=${base07-hex}:bold";
};
};
};

View file

@ -1,4 +1,5 @@
{ lib, ... }:
{
maintainers = [ lib.maintainers.ajgon ];
name = "Kubecolor";
}

View file

@ -3,9 +3,6 @@
lib,
...
}:
let
colors = config.lib.stylix.colors.withHashtag;
in
{
options.stylix.targets.lazygit.enable =
config.lib.stylix.mkEnableTarget "lazygit" true;
@ -13,22 +10,23 @@ in
config =
lib.mkIf (config.stylix.enable && config.stylix.targets.lazygit.enable)
{
programs.lazygit.settings.gui.theme = {
activeBorderColor = [
colors.base07
"bold"
];
inactiveBorderColor = [ colors.base04 ];
searchingActiveBorderColor = [
colors.base02
"bold"
];
optionsTextColor = [ colors.base06 ];
selectedLineBgColor = [ colors.base03 ];
cherryPickedCommitBgColor = [ colors.base02 ];
cherryPickedCommitFgColor = [ colors.base03 ];
unstagedChangesColor = [ colors.base08 ];
defaultFgColor = [ colors.base05 ];
};
programs.lazygit.settings.gui.theme =
with config.lib.stylix.colors.withHashtag; {
activeBorderColor = [
base07
"bold"
];
inactiveBorderColor = [ base04 ];
searchingActiveBorderColor = [
base02
"bold"
];
optionsTextColor = [ base06 ];
selectedLineBgColor = [ base03 ];
cherryPickedCommitBgColor = [ base02 ];
cherryPickedCommitFgColor = [ base03 ];
unstagedChangesColor = [ base08 ];
defaultFgColor = [ base05 ];
};
};
}

Some files were not shown because too many files have changed in this diff Show more