mirror of
https://github.com/noctalia-dev/noctalia-shell.git
synced 2026-05-11 17:08:27 +08:00
Merge pull request #1073 from mochouaaaaa/main
feat(nix): add users-templates config
This commit is contained in:
+67
-18
@@ -3,17 +3,22 @@
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
}:
|
||||
let
|
||||
cfg = config.programs.noctalia-shell;
|
||||
jsonFormat = pkgs.formats.json {};
|
||||
generateJson = name: value:
|
||||
jsonFormat = pkgs.formats.json { };
|
||||
tomlFormat = pkgs.formats.toml { };
|
||||
|
||||
generateJson =
|
||||
name: value:
|
||||
if lib.isString value then
|
||||
pkgs.writeText "noctalia-${name}.json" value
|
||||
else if builtins.isPath value || lib.isStorePath value then
|
||||
value
|
||||
else
|
||||
jsonFormat.generate "noctalia-${name}.json" value;
|
||||
in {
|
||||
in
|
||||
{
|
||||
options.programs.noctalia-shell = {
|
||||
enable = lib.mkEnableOption "Noctalia shell configuration";
|
||||
|
||||
@@ -25,13 +30,14 @@ in {
|
||||
};
|
||||
|
||||
settings = lib.mkOption {
|
||||
type = with lib.types;
|
||||
type =
|
||||
with lib.types;
|
||||
oneOf [
|
||||
jsonFormat.type
|
||||
str
|
||||
path
|
||||
];
|
||||
default = {};
|
||||
default = { };
|
||||
example = lib.literalExpression ''
|
||||
{
|
||||
bar = {
|
||||
@@ -56,13 +62,14 @@ in {
|
||||
};
|
||||
|
||||
colors = lib.mkOption {
|
||||
type = with lib.types;
|
||||
type =
|
||||
with lib.types;
|
||||
oneOf [
|
||||
jsonFormat.type
|
||||
str
|
||||
path
|
||||
];
|
||||
default = {};
|
||||
default = { };
|
||||
example = lib.literalExpression ''
|
||||
{
|
||||
mError = "#dddddd";
|
||||
@@ -87,6 +94,36 @@ in {
|
||||
'';
|
||||
};
|
||||
|
||||
user-templates = lib.mkOption {
|
||||
default = { };
|
||||
type =
|
||||
with lib.types;
|
||||
oneOf [
|
||||
tomlFormat.type
|
||||
str
|
||||
path
|
||||
];
|
||||
example = lib.literalExpression ''
|
||||
{
|
||||
templates = {
|
||||
neovim = {
|
||||
inputPath = "~/.config/matugen/templates/template.lua";
|
||||
outputPath = "~/.config/nvim/generated.lua";
|
||||
postHook = "pkill -SIGUSR1 nvim";
|
||||
};
|
||||
};
|
||||
}
|
||||
'';
|
||||
description = ''
|
||||
Template definitions for Matugen.
|
||||
|
||||
This option accepts:
|
||||
- a Nix attrset (converted to TOML automatically)
|
||||
- a string containing raw TOML
|
||||
- a path to an existing TOML file
|
||||
'';
|
||||
};
|
||||
|
||||
app2unit.package = lib.mkOption {
|
||||
type = lib.types.package;
|
||||
default = pkgs.app2unit;
|
||||
@@ -96,10 +133,11 @@ in {
|
||||
};
|
||||
};
|
||||
|
||||
config = let
|
||||
restart = "${pkgs.systemd}/bin/systemctl --user try-restart noctalia-shell.service 2>/dev/null || true";
|
||||
useApp2Unit = cfg.settings.appLauncher.useApp2Unit or false;
|
||||
in
|
||||
config =
|
||||
let
|
||||
restart = "${pkgs.systemd}/bin/systemctl --user try-restart noctalia-shell.service 2>/dev/null || true";
|
||||
useApp2Unit = cfg.settings.appLauncher.useApp2Unit or false;
|
||||
in
|
||||
lib.mkIf cfg.enable {
|
||||
systemd.user.services.noctalia-shell = lib.mkIf cfg.systemd.enable {
|
||||
Unit = {
|
||||
@@ -108,8 +146,11 @@ in {
|
||||
PartOf = [ config.wayland.systemd.target ];
|
||||
After = [ config.wayland.systemd.target ];
|
||||
X-Restart-Triggers =
|
||||
lib.optional (cfg.settings != {}) config.xdg.configFile."noctalia/settings.json".source
|
||||
++ lib.optional (cfg.colors != {}) config.xdg.configFile."noctalia/colors.json".source;
|
||||
lib.optional (cfg.settings != { }) config.xdg.configFile."noctalia/settings.json".source
|
||||
++ lib.optional (cfg.colors != { }) config.xdg.configFile."noctalia/colors.json".source
|
||||
++ lib.optional (
|
||||
cfg.user-templates != { }
|
||||
) config.xdg.configFile."noctalia/user-templates.toml".source;
|
||||
};
|
||||
|
||||
Service = {
|
||||
@@ -124,18 +165,26 @@ in {
|
||||
};
|
||||
|
||||
home.packages =
|
||||
lib.optional useApp2Unit cfg.app2unit.package
|
||||
++ lib.optional (cfg.package != null) cfg.package;
|
||||
lib.optional useApp2Unit cfg.app2unit.package ++ lib.optional (cfg.package != null) cfg.package;
|
||||
|
||||
xdg.configFile = {
|
||||
"noctalia/settings.json" = lib.mkIf (cfg.settings != {}) {
|
||||
"noctalia/settings.json" = lib.mkIf (cfg.settings != { }) {
|
||||
onChange = lib.mkIf (!cfg.systemd.enable) restart;
|
||||
source = generateJson "settings" cfg.settings;
|
||||
};
|
||||
"noctalia/colors.json" = lib.mkIf (cfg.colors != {}) {
|
||||
"noctalia/colors.json" = lib.mkIf (cfg.colors != { }) {
|
||||
onChange = lib.mkIf (!cfg.systemd.enable) restart;
|
||||
source = generateJson "colors" cfg.colors;
|
||||
};
|
||||
"noctalia/user-templates.toml" = lib.mkIf (cfg.user-templates != { }) {
|
||||
source =
|
||||
if lib.isString cfg.user-templates then
|
||||
pkgs.writeText "noctalia-user-templates.toml" cfg.user-templates
|
||||
else if builtins.isPath cfg.user-templates || lib.isStorePath cfg.user-templates then
|
||||
cfg.user-templates
|
||||
else
|
||||
tomlFormat.generate "noctalia-user-templates.toml" cfg.user-templates;
|
||||
};
|
||||
};
|
||||
|
||||
assertions = [
|
||||
|
||||
Reference in New Issue
Block a user