mirror of
https://github.com/nix-community/home-manager.git
synced 2026-01-12 01:59:37 +08:00
niriswitcher: add module (#7246)
This commit is contained in:
@@ -829,6 +829,12 @@
|
||||
githubId = 68489118;
|
||||
name = "tomodachi94";
|
||||
};
|
||||
vortriz = {
|
||||
name = "Rishi Vora";
|
||||
email = "vorarishi22+nix@gmail.com";
|
||||
github = "Vortriz";
|
||||
githubId = 97402159;
|
||||
};
|
||||
wcarlsen = {
|
||||
name = "Willi Carlsen";
|
||||
email = "carlsenwilli+nix@gmail.com";
|
||||
|
||||
11
modules/misc/news/2025/06/2025-06-09_20-42-11.nix
Normal file
11
modules/misc/news/2025/06/2025-06-09_20-42-11.nix
Normal file
@@ -0,0 +1,11 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
time = "2025-06-09T15:12:11+00:00";
|
||||
condition = pkgs.stdenv.hostPlatform.isLinux;
|
||||
message = ''
|
||||
A new module is available: 'programs.niriswitcher'.
|
||||
|
||||
niriswitcher is an application switcher for niri, with support for
|
||||
workspaces and automatic light and dark mode.
|
||||
'';
|
||||
}
|
||||
@@ -212,6 +212,7 @@ let
|
||||
./programs/newsboat.nix
|
||||
./programs/nh.nix
|
||||
./programs/nheko.nix
|
||||
./programs/niriswitcher.nix
|
||||
./programs/nix-index.nix
|
||||
./programs/nix-init.nix
|
||||
./programs/nix-your-shell.nix
|
||||
|
||||
91
modules/programs/niriswitcher.nix
Normal file
91
modules/programs/niriswitcher.nix
Normal file
@@ -0,0 +1,91 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg = config.programs.niriswitcher;
|
||||
|
||||
settingsFormat = pkgs.formats.toml { };
|
||||
in
|
||||
{
|
||||
meta.maintainers = [ lib.hm.maintainers.vortriz ];
|
||||
|
||||
options.programs.niriswitcher = {
|
||||
enable = lib.mkEnableOption "niriswitcher, an application switcher for niri";
|
||||
|
||||
package = lib.mkPackageOption pkgs "niriswitcher" { nullable = true; };
|
||||
|
||||
settings = lib.mkOption {
|
||||
type = lib.types.nullOr settingsFormat.type;
|
||||
default = null;
|
||||
example = lib.literalExpression ''
|
||||
{
|
||||
keys = {
|
||||
modifier = "Super";
|
||||
switch = {
|
||||
next = "Tab";
|
||||
prev = "Shift+Tab";
|
||||
};
|
||||
};
|
||||
center_on_focus = true;
|
||||
appearance = {
|
||||
system_theme = "dark";
|
||||
icon_size = 64;
|
||||
};
|
||||
}
|
||||
'';
|
||||
description = ''
|
||||
niriswitcher configuration.
|
||||
For available settings see <https://github.com/isaksamsten/niriswitcher/?tab=readme-ov-file#options>.
|
||||
'';
|
||||
};
|
||||
|
||||
style = lib.mkOption {
|
||||
type = with lib.types; nullOr (either path lines);
|
||||
default = null;
|
||||
example = ''
|
||||
.application-name {
|
||||
opacity: 1;
|
||||
color: rgba(255, 255, 255, 0.6);
|
||||
}
|
||||
.application.selected .application-name {
|
||||
color: rgba(255, 255, 255, 1);
|
||||
}
|
||||
'';
|
||||
description = ''
|
||||
CSS style of the switcher.
|
||||
<https://github.com/isaksamsten/niriswitcher/?tab=readme-ov-file#themes>
|
||||
for the documentation.
|
||||
|
||||
If the value is set to a path literal, then the path will be used as the CSS file.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
assertions = [
|
||||
{
|
||||
assertion = pkgs.stdenv.hostPlatform.isLinux;
|
||||
message = "niriswitcher is only available on Linux.";
|
||||
}
|
||||
];
|
||||
|
||||
home.packages = lib.mkIf (cfg.package != null) [ cfg.package ];
|
||||
|
||||
xdg.configFile = {
|
||||
"niriswitcher/config.toml" = lib.mkIf (cfg.settings != null) {
|
||||
source = settingsFormat.generate "config.toml" cfg.settings;
|
||||
};
|
||||
|
||||
"niriswitcher/style.css" = lib.mkIf (cfg.style != null) {
|
||||
source =
|
||||
if builtins.isPath cfg.style || lib.isStorePath cfg.style then
|
||||
cfg.style
|
||||
else
|
||||
pkgs.writeText "niriswitcher/style.css" cfg.style;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -405,6 +405,7 @@ import nmtSrc {
|
||||
./modules/programs/mpvpaper
|
||||
./modules/programs/ncmpcpp-linux
|
||||
./modules/programs/nh
|
||||
./modules/programs/niriswitcher
|
||||
./modules/programs/onagre
|
||||
./modules/programs/onedrive
|
||||
./modules/programs/pqiv
|
||||
|
||||
1
tests/modules/programs/niriswitcher/default.nix
Normal file
1
tests/modules/programs/niriswitcher/default.nix
Normal file
@@ -0,0 +1 @@
|
||||
{ niriswitcher-program = ./niriswitcher.nix; }
|
||||
11
tests/modules/programs/niriswitcher/expected.toml
Normal file
11
tests/modules/programs/niriswitcher/expected.toml
Normal file
@@ -0,0 +1,11 @@
|
||||
center_on_focus = true
|
||||
[appearance]
|
||||
icon_size = 64
|
||||
system_theme = "dark"
|
||||
|
||||
[keys]
|
||||
modifier = "Super"
|
||||
|
||||
[keys.switch]
|
||||
next = "Tab"
|
||||
prev = "Shift+Tab"
|
||||
30
tests/modules/programs/niriswitcher/niriswitcher.nix
Normal file
30
tests/modules/programs/niriswitcher/niriswitcher.nix
Normal file
@@ -0,0 +1,30 @@
|
||||
{
|
||||
programs.niriswitcher = {
|
||||
enable = true;
|
||||
|
||||
settings = {
|
||||
center_on_focus = true;
|
||||
keys = {
|
||||
modifier = "Super";
|
||||
switch = {
|
||||
next = "Tab";
|
||||
prev = "Shift+Tab";
|
||||
};
|
||||
};
|
||||
appearance = {
|
||||
system_theme = "dark";
|
||||
icon_size = 64;
|
||||
};
|
||||
};
|
||||
|
||||
style = ./style.css;
|
||||
};
|
||||
|
||||
nmt.script = ''
|
||||
assertFileExists home-files/.config/niriswitcher/config.toml
|
||||
assertFileContent home-files/.config/niriswitcher/config.toml ${./expected.toml}
|
||||
|
||||
assertFileExists home-files/.config/niriswitcher/style.css
|
||||
assertFileContent home-files/.config/niriswitcher/style.css ${./style.css}
|
||||
'';
|
||||
}
|
||||
7
tests/modules/programs/niriswitcher/style.css
Normal file
7
tests/modules/programs/niriswitcher/style.css
Normal file
@@ -0,0 +1,7 @@
|
||||
.application-name {
|
||||
opacity: 1;
|
||||
color: rgba(255, 255, 255, 0.6);
|
||||
}
|
||||
.application.selected .application-name {
|
||||
color: rgba(255, 255, 255, 1);
|
||||
}
|
||||
Reference in New Issue
Block a user