2025-04-02 20:18:24 +05:00
|
|
|
{
|
|
|
|
|
home-manager,
|
|
|
|
|
self,
|
|
|
|
|
name,
|
2025-04-03 18:14:58 -05:00
|
|
|
}: {
|
2025-04-02 20:18:24 +05:00
|
|
|
config,
|
2025-04-18 11:11:14 -05:00
|
|
|
pkgs,
|
2025-04-02 20:18:24 +05:00
|
|
|
lib,
|
|
|
|
|
...
|
2025-04-03 18:14:58 -05:00
|
|
|
}: let
|
2025-08-18 21:32:29 -03:00
|
|
|
inherit
|
|
|
|
|
(lib)
|
|
|
|
|
getAttrFromPath
|
|
|
|
|
isPath
|
|
|
|
|
mkIf
|
|
|
|
|
mkOption
|
|
|
|
|
setAttrByPath
|
|
|
|
|
types
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
cfg = getAttrFromPath modulePath config;
|
|
|
|
|
|
2025-04-02 20:18:24 +05:00
|
|
|
applicationName = "Zen Browser";
|
|
|
|
|
modulePath = [
|
|
|
|
|
"programs"
|
|
|
|
|
"zen-browser"
|
|
|
|
|
];
|
|
|
|
|
|
2025-08-18 21:32:29 -03:00
|
|
|
linuxConfigPath = ".zen";
|
|
|
|
|
darwinConfigPath = "Library/Application Support/Zen";
|
|
|
|
|
|
fix: run spaces script just on settings change (#96)
* fix(hm-module,spaces): missing columns when Zen is opened before the spaces table is created
Appearently, opening Zen before the spaces service runs could cause the
table not having the theme columns. Because of this, the CREATE TABLE IF
NOT EXISTS query would not run, but the columns would still not be
present. This commit adds the column via a bash script plus an ALTER
TABLE query, mimicking more what Zen does in it JavaScript code.
* style(hm-module): run nix fmt on hm-module
* refactor(hm-module,spaces): move bash scripts and sql queries directly to service executable
This was made to reduce the amount of derivations being build to just
one per-profile. Also, this helps make all the logic of the spaces
activation be into a single executable for debugging and error handling.
* feat(hm-module,spaces): error handling for locked database
Provide a useful error message to the user if the service fails due to
opened Zen browser instance.
* feat(hm-module,spaces): implement places.sqlite updating via home.file.* script
This fixed the problem of the systemd service being rerun on every
home-manager rebuild. Now the places.sqlite updating script just runs
when something needs to be updated on it. We use home.file.* to store
the script on the home directory and take advantage of the
home.file.*.onChange option to run it.
* feat(hm-module,spaces)!: change type of colors values to integer between 0 and 255
* docs: change bold headers to markdown headers to add support #links
* docs: [work]spaces options documentation and example
2025-08-22 17:06:40 -03:00
|
|
|
configPath = "${
|
|
|
|
|
(
|
|
|
|
|
if pkgs.stdenv.isDarwin
|
|
|
|
|
then darwinConfigPath
|
|
|
|
|
else linuxConfigPath
|
|
|
|
|
)
|
|
|
|
|
}";
|
2025-08-18 21:32:29 -03:00
|
|
|
|
2025-04-02 20:18:24 +05:00
|
|
|
mkFirefoxModule = import "${home-manager.outPath}/modules/programs/firefox/mkFirefoxModule.nix";
|
2025-04-03 18:14:58 -05:00
|
|
|
in {
|
2025-04-02 20:18:24 +05:00
|
|
|
imports = [
|
|
|
|
|
(mkFirefoxModule {
|
|
|
|
|
inherit modulePath;
|
|
|
|
|
name = applicationName;
|
2025-08-17 19:28:24 +01:00
|
|
|
wrappedPackageName = "zen-${name}";
|
|
|
|
|
unwrappedPackageName = "zen-${name}-unwrapped";
|
2025-04-02 20:18:24 +05:00
|
|
|
visible = true;
|
|
|
|
|
platforms = {
|
|
|
|
|
linux = {
|
2025-08-18 21:32:29 -03:00
|
|
|
vendorPath = linuxConfigPath;
|
|
|
|
|
configPath = linuxConfigPath;
|
2025-04-02 20:18:24 +05:00
|
|
|
};
|
|
|
|
|
darwin = {
|
2025-08-18 21:32:29 -03:00
|
|
|
configPath = darwinConfigPath;
|
2025-04-02 20:18:24 +05:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
})
|
|
|
|
|
];
|
|
|
|
|
|
2025-08-18 21:32:29 -03:00
|
|
|
options = setAttrByPath modulePath {
|
|
|
|
|
profiles = mkOption {
|
|
|
|
|
type = with types;
|
fix: run spaces script just on settings change (#96)
* fix(hm-module,spaces): missing columns when Zen is opened before the spaces table is created
Appearently, opening Zen before the spaces service runs could cause the
table not having the theme columns. Because of this, the CREATE TABLE IF
NOT EXISTS query would not run, but the columns would still not be
present. This commit adds the column via a bash script plus an ALTER
TABLE query, mimicking more what Zen does in it JavaScript code.
* style(hm-module): run nix fmt on hm-module
* refactor(hm-module,spaces): move bash scripts and sql queries directly to service executable
This was made to reduce the amount of derivations being build to just
one per-profile. Also, this helps make all the logic of the spaces
activation be into a single executable for debugging and error handling.
* feat(hm-module,spaces): error handling for locked database
Provide a useful error message to the user if the service fails due to
opened Zen browser instance.
* feat(hm-module,spaces): implement places.sqlite updating via home.file.* script
This fixed the problem of the systemd service being rerun on every
home-manager rebuild. Now the places.sqlite updating script just runs
when something needs to be updated on it. We use home.file.* to store
the script on the home directory and take advantage of the
home.file.*.onChange option to run it.
* feat(hm-module,spaces)!: change type of colors values to integer between 0 and 255
* docs: change bold headers to markdown headers to add support #links
* docs: [work]spaces options documentation and example
2025-08-22 17:06:40 -03:00
|
|
|
attrsOf (
|
|
|
|
|
submodule (
|
|
|
|
|
{...}: {
|
|
|
|
|
options = {
|
|
|
|
|
spacesForce = mkOption {
|
|
|
|
|
type = bool;
|
|
|
|
|
description = "Whether to delete existing spaces not declared in the configuration.";
|
|
|
|
|
default = false;
|
|
|
|
|
};
|
|
|
|
|
spaces = mkOption {
|
|
|
|
|
type = attrsOf (
|
|
|
|
|
submodule (
|
|
|
|
|
{name, ...}: {
|
|
|
|
|
options = {
|
|
|
|
|
name = mkOption {
|
|
|
|
|
type = str;
|
|
|
|
|
description = "Name of the space.";
|
|
|
|
|
default = name;
|
|
|
|
|
};
|
|
|
|
|
id = mkOption {
|
|
|
|
|
type = str;
|
|
|
|
|
description = "REQUIRED. Unique Version 4 UUID for space.";
|
|
|
|
|
};
|
|
|
|
|
position = mkOption {
|
|
|
|
|
type = ints.unsigned;
|
|
|
|
|
description = "Position of space in the left bar.";
|
|
|
|
|
default = 1000;
|
|
|
|
|
};
|
|
|
|
|
icon = mkOption {
|
|
|
|
|
type = nullOr (either str path);
|
|
|
|
|
description = "Emoji or icon URI to be used as space icon.";
|
|
|
|
|
apply = v:
|
|
|
|
|
if isPath v
|
|
|
|
|
then "file://${v}"
|
|
|
|
|
else v;
|
|
|
|
|
default = null;
|
|
|
|
|
};
|
|
|
|
|
container = mkOption {
|
|
|
|
|
type = nullOr ints.unsigned;
|
|
|
|
|
description = "Container ID to be used in space";
|
|
|
|
|
default = null;
|
|
|
|
|
};
|
|
|
|
|
theme.type = mkOption {
|
|
|
|
|
type = nullOr str;
|
|
|
|
|
default = "gradient";
|
|
|
|
|
};
|
|
|
|
|
theme.colors = mkOption {
|
|
|
|
|
type = nullOr (
|
|
|
|
|
listOf (
|
|
|
|
|
submodule (
|
|
|
|
|
{...}: {
|
|
|
|
|
options = {
|
|
|
|
|
red = mkOption {
|
|
|
|
|
type = ints.between 0 255;
|
|
|
|
|
default = 0;
|
|
|
|
|
};
|
|
|
|
|
green = mkOption {
|
|
|
|
|
type = ints.between 0 255;
|
|
|
|
|
default = 0;
|
|
|
|
|
};
|
|
|
|
|
blue = mkOption {
|
|
|
|
|
type = ints.between 0 255;
|
|
|
|
|
default = 0;
|
|
|
|
|
};
|
|
|
|
|
custom = mkOption {
|
|
|
|
|
type = bool;
|
|
|
|
|
default = false;
|
|
|
|
|
};
|
|
|
|
|
algorithm = mkOption {
|
|
|
|
|
type = enum [
|
|
|
|
|
"complementary"
|
|
|
|
|
"floating"
|
|
|
|
|
"analogous"
|
|
|
|
|
];
|
|
|
|
|
default = "floating";
|
|
|
|
|
};
|
|
|
|
|
primary = mkOption {
|
|
|
|
|
type = bool;
|
|
|
|
|
default = true;
|
|
|
|
|
};
|
|
|
|
|
lightness = mkOption {
|
|
|
|
|
type = int;
|
|
|
|
|
default = 0;
|
|
|
|
|
};
|
|
|
|
|
position.x = mkOption {
|
|
|
|
|
type = int;
|
|
|
|
|
default = 0;
|
|
|
|
|
};
|
|
|
|
|
position.y = mkOption {
|
|
|
|
|
type = int;
|
|
|
|
|
default = 0;
|
|
|
|
|
};
|
|
|
|
|
type = mkOption {
|
|
|
|
|
type = enum [
|
|
|
|
|
"undefined"
|
|
|
|
|
"explicit-lightness"
|
|
|
|
|
];
|
|
|
|
|
default = "undefined";
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
);
|
|
|
|
|
default = [];
|
|
|
|
|
};
|
|
|
|
|
theme.opacity = mkOption {
|
|
|
|
|
type = nullOr float;
|
|
|
|
|
default = 0.5;
|
|
|
|
|
};
|
|
|
|
|
theme.rotation = mkOption {
|
|
|
|
|
type = nullOr int;
|
|
|
|
|
default = null;
|
|
|
|
|
};
|
|
|
|
|
theme.texture = mkOption {
|
|
|
|
|
type = nullOr float;
|
|
|
|
|
default = 0.0;
|
|
|
|
|
};
|
2025-08-18 21:32:29 -03:00
|
|
|
};
|
fix: run spaces script just on settings change (#96)
* fix(hm-module,spaces): missing columns when Zen is opened before the spaces table is created
Appearently, opening Zen before the spaces service runs could cause the
table not having the theme columns. Because of this, the CREATE TABLE IF
NOT EXISTS query would not run, but the columns would still not be
present. This commit adds the column via a bash script plus an ALTER
TABLE query, mimicking more what Zen does in it JavaScript code.
* style(hm-module): run nix fmt on hm-module
* refactor(hm-module,spaces): move bash scripts and sql queries directly to service executable
This was made to reduce the amount of derivations being build to just
one per-profile. Also, this helps make all the logic of the spaces
activation be into a single executable for debugging and error handling.
* feat(hm-module,spaces): error handling for locked database
Provide a useful error message to the user if the service fails due to
opened Zen browser instance.
* feat(hm-module,spaces): implement places.sqlite updating via home.file.* script
This fixed the problem of the systemd service being rerun on every
home-manager rebuild. Now the places.sqlite updating script just runs
when something needs to be updated on it. We use home.file.* to store
the script on the home directory and take advantage of the
home.file.*.onChange option to run it.
* feat(hm-module,spaces)!: change type of colors values to integer between 0 and 255
* docs: change bold headers to markdown headers to add support #links
* docs: [work]spaces options documentation and example
2025-08-22 17:06:40 -03:00
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
);
|
|
|
|
|
default = {};
|
2025-08-18 21:32:29 -03:00
|
|
|
};
|
fix: run spaces script just on settings change (#96)
* fix(hm-module,spaces): missing columns when Zen is opened before the spaces table is created
Appearently, opening Zen before the spaces service runs could cause the
table not having the theme columns. Because of this, the CREATE TABLE IF
NOT EXISTS query would not run, but the columns would still not be
present. This commit adds the column via a bash script plus an ALTER
TABLE query, mimicking more what Zen does in it JavaScript code.
* style(hm-module): run nix fmt on hm-module
* refactor(hm-module,spaces): move bash scripts and sql queries directly to service executable
This was made to reduce the amount of derivations being build to just
one per-profile. Also, this helps make all the logic of the spaces
activation be into a single executable for debugging and error handling.
* feat(hm-module,spaces): error handling for locked database
Provide a useful error message to the user if the service fails due to
opened Zen browser instance.
* feat(hm-module,spaces): implement places.sqlite updating via home.file.* script
This fixed the problem of the systemd service being rerun on every
home-manager rebuild. Now the places.sqlite updating script just runs
when something needs to be updated on it. We use home.file.* to store
the script on the home directory and take advantage of the
home.file.*.onChange option to run it.
* feat(hm-module,spaces)!: change type of colors values to integer between 0 and 255
* docs: change bold headers to markdown headers to add support #links
* docs: [work]spaces options documentation and example
2025-08-22 17:06:40 -03:00
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
);
|
2025-08-18 21:32:29 -03:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
config = mkIf cfg.enable {
|
2025-04-02 20:18:24 +05:00
|
|
|
programs.zen-browser = {
|
2025-08-09 16:34:36 +05:00
|
|
|
package =
|
2025-08-17 19:28:24 +01:00
|
|
|
(pkgs.wrapFirefox (self.packages.${pkgs.stdenv.hostPlatform.system}."${name}-unwrapped".override {
|
2025-08-09 16:34:36 +05:00
|
|
|
# Seems like zen uses relative (to the original binary) path to the policies.json file
|
|
|
|
|
# and ignores the overrides by pkgs.wrapFirefox
|
2025-08-18 21:32:29 -03:00
|
|
|
policies = cfg.policies;
|
2025-08-09 16:34:36 +05:00
|
|
|
}) {}).override
|
|
|
|
|
{
|
2025-08-18 21:32:29 -03:00
|
|
|
nativeMessagingHosts = cfg.nativeMessagingHosts;
|
2025-08-09 16:34:36 +05:00
|
|
|
};
|
|
|
|
|
|
2025-08-17 19:28:24 +01:00
|
|
|
policies = {
|
|
|
|
|
DisableAppUpdate = lib.mkDefault true;
|
|
|
|
|
DisableTelemetry = lib.mkDefault true;
|
2025-04-02 20:18:24 +05:00
|
|
|
};
|
|
|
|
|
};
|
2025-08-18 21:32:29 -03:00
|
|
|
|
fix: run spaces script just on settings change (#96)
* fix(hm-module,spaces): missing columns when Zen is opened before the spaces table is created
Appearently, opening Zen before the spaces service runs could cause the
table not having the theme columns. Because of this, the CREATE TABLE IF
NOT EXISTS query would not run, but the columns would still not be
present. This commit adds the column via a bash script plus an ALTER
TABLE query, mimicking more what Zen does in it JavaScript code.
* style(hm-module): run nix fmt on hm-module
* refactor(hm-module,spaces): move bash scripts and sql queries directly to service executable
This was made to reduce the amount of derivations being build to just
one per-profile. Also, this helps make all the logic of the spaces
activation be into a single executable for debugging and error handling.
* feat(hm-module,spaces): error handling for locked database
Provide a useful error message to the user if the service fails due to
opened Zen browser instance.
* feat(hm-module,spaces): implement places.sqlite updating via home.file.* script
This fixed the problem of the systemd service being rerun on every
home-manager rebuild. Now the places.sqlite updating script just runs
when something needs to be updated on it. We use home.file.* to store
the script on the home directory and take advantage of the
home.file.*.onChange option to run it.
* feat(hm-module,spaces)!: change type of colors values to integer between 0 and 255
* docs: change bold headers to markdown headers to add support #links
* docs: [work]spaces options documentation and example
2025-08-22 17:06:40 -03:00
|
|
|
home.file = let
|
|
|
|
|
inherit
|
|
|
|
|
(builtins)
|
|
|
|
|
isNull
|
|
|
|
|
toJSON
|
|
|
|
|
toString
|
|
|
|
|
;
|
2025-08-18 21:32:29 -03:00
|
|
|
inherit
|
|
|
|
|
(lib)
|
|
|
|
|
concatStringsSep
|
fix: run spaces script just on settings change (#96)
* fix(hm-module,spaces): missing columns when Zen is opened before the spaces table is created
Appearently, opening Zen before the spaces service runs could cause the
table not having the theme columns. Because of this, the CREATE TABLE IF
NOT EXISTS query would not run, but the columns would still not be
present. This commit adds the column via a bash script plus an ALTER
TABLE query, mimicking more what Zen does in it JavaScript code.
* style(hm-module): run nix fmt on hm-module
* refactor(hm-module,spaces): move bash scripts and sql queries directly to service executable
This was made to reduce the amount of derivations being build to just
one per-profile. Also, this helps make all the logic of the spaces
activation be into a single executable for debugging and error handling.
* feat(hm-module,spaces): error handling for locked database
Provide a useful error message to the user if the service fails due to
opened Zen browser instance.
* feat(hm-module,spaces): implement places.sqlite updating via home.file.* script
This fixed the problem of the systemd service being rerun on every
home-manager rebuild. Now the places.sqlite updating script just runs
when something needs to be updated on it. We use home.file.* to store
the script on the home directory and take advantage of the
home.file.*.onChange option to run it.
* feat(hm-module,spaces)!: change type of colors values to integer between 0 and 255
* docs: change bold headers to markdown headers to add support #links
* docs: [work]spaces options documentation and example
2025-08-22 17:06:40 -03:00
|
|
|
concatMapStringsSep
|
|
|
|
|
concatMapAttrsStringSep
|
2025-08-18 21:32:29 -03:00
|
|
|
filterAttrs
|
|
|
|
|
getExe
|
|
|
|
|
getExe'
|
fix: run spaces script just on settings change (#96)
* fix(hm-module,spaces): missing columns when Zen is opened before the spaces table is created
Appearently, opening Zen before the spaces service runs could cause the
table not having the theme columns. Because of this, the CREATE TABLE IF
NOT EXISTS query would not run, but the columns would still not be
present. This commit adds the column via a bash script plus an ALTER
TABLE query, mimicking more what Zen does in it JavaScript code.
* style(hm-module): run nix fmt on hm-module
* refactor(hm-module,spaces): move bash scripts and sql queries directly to service executable
This was made to reduce the amount of derivations being build to just
one per-profile. Also, this helps make all the logic of the spaces
activation be into a single executable for debugging and error handling.
* feat(hm-module,spaces): error handling for locked database
Provide a useful error message to the user if the service fails due to
opened Zen browser instance.
* feat(hm-module,spaces): implement places.sqlite updating via home.file.* script
This fixed the problem of the systemd service being rerun on every
home-manager rebuild. Now the places.sqlite updating script just runs
when something needs to be updated on it. We use home.file.* to store
the script on the home directory and take advantage of the
home.file.*.onChange option to run it.
* feat(hm-module,spaces)!: change type of colors values to integer between 0 and 255
* docs: change bold headers to markdown headers to add support #links
* docs: [work]spaces options documentation and example
2025-08-22 17:06:40 -03:00
|
|
|
mapAttrs'
|
2025-08-18 21:32:29 -03:00
|
|
|
mapAttrsToList
|
fix: run spaces script just on settings change (#96)
* fix(hm-module,spaces): missing columns when Zen is opened before the spaces table is created
Appearently, opening Zen before the spaces service runs could cause the
table not having the theme columns. Because of this, the CREATE TABLE IF
NOT EXISTS query would not run, but the columns would still not be
present. This commit adds the column via a bash script plus an ALTER
TABLE query, mimicking more what Zen does in it JavaScript code.
* style(hm-module): run nix fmt on hm-module
* refactor(hm-module,spaces): move bash scripts and sql queries directly to service executable
This was made to reduce the amount of derivations being build to just
one per-profile. Also, this helps make all the logic of the spaces
activation be into a single executable for debugging and error handling.
* feat(hm-module,spaces): error handling for locked database
Provide a useful error message to the user if the service fails due to
opened Zen browser instance.
* feat(hm-module,spaces): implement places.sqlite updating via home.file.* script
This fixed the problem of the systemd service being rerun on every
home-manager rebuild. Now the places.sqlite updating script just runs
when something needs to be updated on it. We use home.file.* to store
the script on the home directory and take advantage of the
home.file.*.onChange option to run it.
* feat(hm-module,spaces)!: change type of colors values to integer between 0 and 255
* docs: change bold headers to markdown headers to add support #links
* docs: [work]spaces options documentation and example
2025-08-22 17:06:40 -03:00
|
|
|
nameValuePair
|
2025-08-18 21:32:29 -03:00
|
|
|
optionalString
|
|
|
|
|
pipe
|
|
|
|
|
;
|
fix: run spaces script just on settings change (#96)
* fix(hm-module,spaces): missing columns when Zen is opened before the spaces table is created
Appearently, opening Zen before the spaces service runs could cause the
table not having the theme columns. Because of this, the CREATE TABLE IF
NOT EXISTS query would not run, but the columns would still not be
present. This commit adds the column via a bash script plus an ALTER
TABLE query, mimicking more what Zen does in it JavaScript code.
* style(hm-module): run nix fmt on hm-module
* refactor(hm-module,spaces): move bash scripts and sql queries directly to service executable
This was made to reduce the amount of derivations being build to just
one per-profile. Also, this helps make all the logic of the spaces
activation be into a single executable for debugging and error handling.
* feat(hm-module,spaces): error handling for locked database
Provide a useful error message to the user if the service fails due to
opened Zen browser instance.
* feat(hm-module,spaces): implement places.sqlite updating via home.file.* script
This fixed the problem of the systemd service being rerun on every
home-manager rebuild. Now the places.sqlite updating script just runs
when something needs to be updated on it. We use home.file.* to store
the script on the home directory and take advantage of the
home.file.*.onChange option to run it.
* feat(hm-module,spaces)!: change type of colors values to integer between 0 and 255
* docs: change bold headers to markdown headers to add support #links
* docs: [work]spaces options documentation and example
2025-08-22 17:06:40 -03:00
|
|
|
in (mapAttrs' (profileName: profile: let
|
|
|
|
|
sqlite3 = getExe' pkgs.sqlite "sqlite3";
|
|
|
|
|
scriptFile = "${configPath}/${profileName}/places_update.sh";
|
|
|
|
|
placesFile = "${config.home.homeDirectory}/${configPath}/${profileName}/places.sqlite";
|
2025-08-18 21:32:29 -03:00
|
|
|
|
fix: run spaces script just on settings change (#96)
* fix(hm-module,spaces): missing columns when Zen is opened before the spaces table is created
Appearently, opening Zen before the spaces service runs could cause the
table not having the theme columns. Because of this, the CREATE TABLE IF
NOT EXISTS query would not run, but the columns would still not be
present. This commit adds the column via a bash script plus an ALTER
TABLE query, mimicking more what Zen does in it JavaScript code.
* style(hm-module): run nix fmt on hm-module
* refactor(hm-module,spaces): move bash scripts and sql queries directly to service executable
This was made to reduce the amount of derivations being build to just
one per-profile. Also, this helps make all the logic of the spaces
activation be into a single executable for debugging and error handling.
* feat(hm-module,spaces): error handling for locked database
Provide a useful error message to the user if the service fails due to
opened Zen browser instance.
* feat(hm-module,spaces): implement places.sqlite updating via home.file.* script
This fixed the problem of the systemd service being rerun on every
home-manager rebuild. Now the places.sqlite updating script just runs
when something needs to be updated on it. We use home.file.* to store
the script on the home directory and take advantage of the
home.file.*.onChange option to run it.
* feat(hm-module,spaces)!: change type of colors values to integer between 0 and 255
* docs: change bold headers to markdown headers to add support #links
* docs: [work]spaces options documentation and example
2025-08-22 17:06:40 -03:00
|
|
|
insertSpaces = ''
|
|
|
|
|
# Reference: https://github.com/zen-browser/desktop/blob/4e2dfd8a138fd28767bb4799a3ca9d8aab80430e/src/zen/workspaces/ZenWorkspacesStorage.mjs#L25-L55
|
|
|
|
|
${sqlite3} "${placesFile}" "${
|
|
|
|
|
concatStringsSep " " [
|
|
|
|
|
"CREATE TABLE IF NOT EXISTS zen_workspaces ("
|
|
|
|
|
"id INTEGER PRIMARY KEY,"
|
|
|
|
|
"uuid TEXT UNIQUE NOT NULL,"
|
|
|
|
|
"name TEXT NOT NULL,"
|
|
|
|
|
"icon TEXT,"
|
|
|
|
|
"container_id INTEGER,"
|
|
|
|
|
"position INTEGER NOT NULL DEFAULT 0,"
|
|
|
|
|
"created_at INTEGER NOT NULL,"
|
|
|
|
|
"updated_at INTEGER NOT NULL"
|
|
|
|
|
");"
|
|
|
|
|
]
|
|
|
|
|
}" || exit 1
|
2025-08-18 21:32:29 -03:00
|
|
|
|
fix: run spaces script just on settings change (#96)
* fix(hm-module,spaces): missing columns when Zen is opened before the spaces table is created
Appearently, opening Zen before the spaces service runs could cause the
table not having the theme columns. Because of this, the CREATE TABLE IF
NOT EXISTS query would not run, but the columns would still not be
present. This commit adds the column via a bash script plus an ALTER
TABLE query, mimicking more what Zen does in it JavaScript code.
* style(hm-module): run nix fmt on hm-module
* refactor(hm-module,spaces): move bash scripts and sql queries directly to service executable
This was made to reduce the amount of derivations being build to just
one per-profile. Also, this helps make all the logic of the spaces
activation be into a single executable for debugging and error handling.
* feat(hm-module,spaces): error handling for locked database
Provide a useful error message to the user if the service fails due to
opened Zen browser instance.
* feat(hm-module,spaces): implement places.sqlite updating via home.file.* script
This fixed the problem of the systemd service being rerun on every
home-manager rebuild. Now the places.sqlite updating script just runs
when something needs to be updated on it. We use home.file.* to store
the script on the home directory and take advantage of the
home.file.*.onChange option to run it.
* feat(hm-module,spaces)!: change type of colors values to integer between 0 and 255
* docs: change bold headers to markdown headers to add support #links
* docs: [work]spaces options documentation and example
2025-08-22 17:06:40 -03:00
|
|
|
columns=($(${sqlite3} "${placesFile}" "SELECT name FROM pragma_table_info('zen_workspaces');"))
|
|
|
|
|
if [[ ! "''${columns[@]}" =~ "theme_type" ]]; then
|
|
|
|
|
${sqlite3} "${placesFile}" "ALTER TABLE zen_workspaces ADD COLUMN theme_type TEXT;" || exit 1
|
|
|
|
|
fi
|
|
|
|
|
if [[ ! "''${columns[@]}" =~ "theme_colors" ]]; then
|
|
|
|
|
${sqlite3} "${placesFile}" "ALTER TABLE zen_workspaces ADD COLUMN theme_colors TEXT;" || exit 1
|
|
|
|
|
fi
|
|
|
|
|
if [[ ! "''${columns[@]}" =~ "theme_opacity" ]]; then
|
|
|
|
|
${sqlite3} "${placesFile}" "ALTER TABLE zen_workspaces ADD COLUMN theme_opacity REAL;" || exit 1
|
|
|
|
|
fi
|
|
|
|
|
if [[ ! "''${columns[@]}" =~ "theme_rotation" ]]; then
|
|
|
|
|
${sqlite3} "${placesFile}" "ALTER TABLE zen_workspaces ADD COLUMN theme_rotation INTEGER;" || exit 1
|
|
|
|
|
fi
|
|
|
|
|
if [[ ! "''${columns[@]}" =~ "theme_texture" ]]; then
|
|
|
|
|
${sqlite3} "${placesFile}" "ALTER TABLE zen_workspaces ADD COLUMN theme_texture REAL;" || exit 1
|
|
|
|
|
fi
|
2025-08-18 21:32:29 -03:00
|
|
|
|
fix: run spaces script just on settings change (#96)
* fix(hm-module,spaces): missing columns when Zen is opened before the spaces table is created
Appearently, opening Zen before the spaces service runs could cause the
table not having the theme columns. Because of this, the CREATE TABLE IF
NOT EXISTS query would not run, but the columns would still not be
present. This commit adds the column via a bash script plus an ALTER
TABLE query, mimicking more what Zen does in it JavaScript code.
* style(hm-module): run nix fmt on hm-module
* refactor(hm-module,spaces): move bash scripts and sql queries directly to service executable
This was made to reduce the amount of derivations being build to just
one per-profile. Also, this helps make all the logic of the spaces
activation be into a single executable for debugging and error handling.
* feat(hm-module,spaces): error handling for locked database
Provide a useful error message to the user if the service fails due to
opened Zen browser instance.
* feat(hm-module,spaces): implement places.sqlite updating via home.file.* script
This fixed the problem of the systemd service being rerun on every
home-manager rebuild. Now the places.sqlite updating script just runs
when something needs to be updated on it. We use home.file.* to store
the script on the home directory and take advantage of the
home.file.*.onChange option to run it.
* feat(hm-module,spaces)!: change type of colors values to integer between 0 and 255
* docs: change bold headers to markdown headers to add support #links
* docs: [work]spaces options documentation and example
2025-08-22 17:06:40 -03:00
|
|
|
# Reference: https://github.com/zen-browser/desktop/blob/4e2dfd8a138fd28767bb4799a3ca9d8aab80430e/src/zen/workspaces/ZenWorkspacesStorage.mjs#L141-L149
|
|
|
|
|
${sqlite3} "${placesFile}" "${
|
|
|
|
|
(concatStringsSep " " [
|
|
|
|
|
"INSERT OR REPLACE INTO zen_workspaces ("
|
|
|
|
|
"uuid,"
|
|
|
|
|
"name,"
|
|
|
|
|
"icon,"
|
|
|
|
|
"container_id,"
|
|
|
|
|
"position,"
|
2025-08-18 21:32:29 -03:00
|
|
|
|
fix: run spaces script just on settings change (#96)
* fix(hm-module,spaces): missing columns when Zen is opened before the spaces table is created
Appearently, opening Zen before the spaces service runs could cause the
table not having the theme columns. Because of this, the CREATE TABLE IF
NOT EXISTS query would not run, but the columns would still not be
present. This commit adds the column via a bash script plus an ALTER
TABLE query, mimicking more what Zen does in it JavaScript code.
* style(hm-module): run nix fmt on hm-module
* refactor(hm-module,spaces): move bash scripts and sql queries directly to service executable
This was made to reduce the amount of derivations being build to just
one per-profile. Also, this helps make all the logic of the spaces
activation be into a single executable for debugging and error handling.
* feat(hm-module,spaces): error handling for locked database
Provide a useful error message to the user if the service fails due to
opened Zen browser instance.
* feat(hm-module,spaces): implement places.sqlite updating via home.file.* script
This fixed the problem of the systemd service being rerun on every
home-manager rebuild. Now the places.sqlite updating script just runs
when something needs to be updated on it. We use home.file.* to store
the script on the home directory and take advantage of the
home.file.*.onChange option to run it.
* feat(hm-module,spaces)!: change type of colors values to integer between 0 and 255
* docs: change bold headers to markdown headers to add support #links
* docs: [work]spaces options documentation and example
2025-08-22 17:06:40 -03:00
|
|
|
"theme_type,"
|
|
|
|
|
"theme_colors,"
|
|
|
|
|
"theme_opacity,"
|
|
|
|
|
"theme_rotation,"
|
|
|
|
|
"theme_texture,"
|
2025-08-18 21:32:29 -03:00
|
|
|
|
fix: run spaces script just on settings change (#96)
* fix(hm-module,spaces): missing columns when Zen is opened before the spaces table is created
Appearently, opening Zen before the spaces service runs could cause the
table not having the theme columns. Because of this, the CREATE TABLE IF
NOT EXISTS query would not run, but the columns would still not be
present. This commit adds the column via a bash script plus an ALTER
TABLE query, mimicking more what Zen does in it JavaScript code.
* style(hm-module): run nix fmt on hm-module
* refactor(hm-module,spaces): move bash scripts and sql queries directly to service executable
This was made to reduce the amount of derivations being build to just
one per-profile. Also, this helps make all the logic of the spaces
activation be into a single executable for debugging and error handling.
* feat(hm-module,spaces): error handling for locked database
Provide a useful error message to the user if the service fails due to
opened Zen browser instance.
* feat(hm-module,spaces): implement places.sqlite updating via home.file.* script
This fixed the problem of the systemd service being rerun on every
home-manager rebuild. Now the places.sqlite updating script just runs
when something needs to be updated on it. We use home.file.* to store
the script on the home directory and take advantage of the
home.file.*.onChange option to run it.
* feat(hm-module,spaces)!: change type of colors values to integer between 0 and 255
* docs: change bold headers to markdown headers to add support #links
* docs: [work]spaces options documentation and example
2025-08-22 17:06:40 -03:00
|
|
|
"created_at,"
|
|
|
|
|
"updated_at"
|
|
|
|
|
") VALUES "
|
|
|
|
|
])
|
|
|
|
|
+ (pipe profile.spaces [
|
|
|
|
|
(mapAttrsToList (_: s: [
|
|
|
|
|
"'{${s.id}}'"
|
|
|
|
|
"'${s.name}'"
|
|
|
|
|
(
|
|
|
|
|
if isNull s.icon
|
|
|
|
|
then "NULL"
|
|
|
|
|
else "'${s.icon}'"
|
|
|
|
|
)
|
|
|
|
|
(
|
|
|
|
|
if isNull s.container
|
|
|
|
|
then "NULL"
|
|
|
|
|
else toString s.container
|
|
|
|
|
)
|
|
|
|
|
(toString s.position)
|
|
|
|
|
(
|
|
|
|
|
if isNull s.theme.type
|
|
|
|
|
then "NULL"
|
|
|
|
|
else "'${s.theme.type}'"
|
|
|
|
|
)
|
|
|
|
|
(
|
|
|
|
|
if isNull s.theme.colors
|
|
|
|
|
then "NULL"
|
|
|
|
|
else "'${toJSON (map (c: {
|
|
|
|
|
inherit (c) algorithm lightness position type;
|
|
|
|
|
c = [c.red c.green c.blue];
|
|
|
|
|
isCustom = c.custom;
|
|
|
|
|
isPrimary = c.primary;
|
|
|
|
|
})
|
|
|
|
|
s.theme.colors)}'"
|
|
|
|
|
)
|
|
|
|
|
(
|
|
|
|
|
if isNull s.theme.opacity
|
|
|
|
|
then "NULL"
|
|
|
|
|
else toString s.theme.opacity
|
2025-08-18 21:32:29 -03:00
|
|
|
)
|
fix: run spaces script just on settings change (#96)
* fix(hm-module,spaces): missing columns when Zen is opened before the spaces table is created
Appearently, opening Zen before the spaces service runs could cause the
table not having the theme columns. Because of this, the CREATE TABLE IF
NOT EXISTS query would not run, but the columns would still not be
present. This commit adds the column via a bash script plus an ALTER
TABLE query, mimicking more what Zen does in it JavaScript code.
* style(hm-module): run nix fmt on hm-module
* refactor(hm-module,spaces): move bash scripts and sql queries directly to service executable
This was made to reduce the amount of derivations being build to just
one per-profile. Also, this helps make all the logic of the spaces
activation be into a single executable for debugging and error handling.
* feat(hm-module,spaces): error handling for locked database
Provide a useful error message to the user if the service fails due to
opened Zen browser instance.
* feat(hm-module,spaces): implement places.sqlite updating via home.file.* script
This fixed the problem of the systemd service being rerun on every
home-manager rebuild. Now the places.sqlite updating script just runs
when something needs to be updated on it. We use home.file.* to store
the script on the home directory and take advantage of the
home.file.*.onChange option to run it.
* feat(hm-module,spaces)!: change type of colors values to integer between 0 and 255
* docs: change bold headers to markdown headers to add support #links
* docs: [work]spaces options documentation and example
2025-08-22 17:06:40 -03:00
|
|
|
(
|
|
|
|
|
if isNull s.theme.rotation
|
|
|
|
|
then "NULL"
|
|
|
|
|
else toString s.theme.rotation
|
|
|
|
|
)
|
|
|
|
|
(
|
|
|
|
|
if isNull s.theme.texture
|
|
|
|
|
then "NULL"
|
|
|
|
|
else toString s.theme.texture
|
|
|
|
|
)
|
|
|
|
|
"COALESCE((SELECT created_at FROM zen_workspaces WHERE uuid = '{${s.id}}'), strftime('%s', 'now'))"
|
|
|
|
|
"strftime('%s', 'now')"
|
|
|
|
|
]))
|
2025-08-18 21:32:29 -03:00
|
|
|
(map (row: concatStringsSep "," row))
|
|
|
|
|
(concatMapStringsSep "," (row: "(${row})"))
|
fix: run spaces script just on settings change (#96)
* fix(hm-module,spaces): missing columns when Zen is opened before the spaces table is created
Appearently, opening Zen before the spaces service runs could cause the
table not having the theme columns. Because of this, the CREATE TABLE IF
NOT EXISTS query would not run, but the columns would still not be
present. This commit adds the column via a bash script plus an ALTER
TABLE query, mimicking more what Zen does in it JavaScript code.
* style(hm-module): run nix fmt on hm-module
* refactor(hm-module,spaces): move bash scripts and sql queries directly to service executable
This was made to reduce the amount of derivations being build to just
one per-profile. Also, this helps make all the logic of the spaces
activation be into a single executable for debugging and error handling.
* feat(hm-module,spaces): error handling for locked database
Provide a useful error message to the user if the service fails due to
opened Zen browser instance.
* feat(hm-module,spaces): implement places.sqlite updating via home.file.* script
This fixed the problem of the systemd service being rerun on every
home-manager rebuild. Now the places.sqlite updating script just runs
when something needs to be updated on it. We use home.file.* to store
the script on the home directory and take advantage of the
home.file.*.onChange option to run it.
* feat(hm-module,spaces)!: change type of colors values to integer between 0 and 255
* docs: change bold headers to markdown headers to add support #links
* docs: [work]spaces options documentation and example
2025-08-22 17:06:40 -03:00
|
|
|
])
|
|
|
|
|
}" || exit 1
|
|
|
|
|
'';
|
2025-08-18 21:32:29 -03:00
|
|
|
|
fix: run spaces script just on settings change (#96)
* fix(hm-module,spaces): missing columns when Zen is opened before the spaces table is created
Appearently, opening Zen before the spaces service runs could cause the
table not having the theme columns. Because of this, the CREATE TABLE IF
NOT EXISTS query would not run, but the columns would still not be
present. This commit adds the column via a bash script plus an ALTER
TABLE query, mimicking more what Zen does in it JavaScript code.
* style(hm-module): run nix fmt on hm-module
* refactor(hm-module,spaces): move bash scripts and sql queries directly to service executable
This was made to reduce the amount of derivations being build to just
one per-profile. Also, this helps make all the logic of the spaces
activation be into a single executable for debugging and error handling.
* feat(hm-module,spaces): error handling for locked database
Provide a useful error message to the user if the service fails due to
opened Zen browser instance.
* feat(hm-module,spaces): implement places.sqlite updating via home.file.* script
This fixed the problem of the systemd service being rerun on every
home-manager rebuild. Now the places.sqlite updating script just runs
when something needs to be updated on it. We use home.file.* to store
the script on the home directory and take advantage of the
home.file.*.onChange option to run it.
* feat(hm-module,spaces)!: change type of colors values to integer between 0 and 255
* docs: change bold headers to markdown headers to add support #links
* docs: [work]spaces options documentation and example
2025-08-22 17:06:40 -03:00
|
|
|
deleteSpaces = ''
|
|
|
|
|
${sqlite3} "${placesFile}" "DELETE FROM zen_workspaces ${
|
|
|
|
|
if profile.spaces != {}
|
|
|
|
|
then "WHERE "
|
|
|
|
|
else ""
|
|
|
|
|
}${concatMapAttrsStringSep " AND " (_: s: "NOT uuid = '{${s.id}}'") profile.spaces}" || exit 1
|
|
|
|
|
'';
|
|
|
|
|
in
|
|
|
|
|
nameValuePair scriptFile {
|
|
|
|
|
source = getExe (pkgs.writeShellScriptBin "places_update_${profileName}" ''
|
|
|
|
|
# This file is generated by Zen browser Home Manager module, please to not change it since it
|
|
|
|
|
# will be overridden and executed on every rebuild of the home environment.
|
|
|
|
|
|
|
|
|
|
function update_spaces() {
|
|
|
|
|
${optionalString (profile.spaces != {}) insertSpaces}
|
|
|
|
|
${optionalString (profile.spacesForce) deleteSpaces}
|
2025-08-18 21:32:29 -03:00
|
|
|
}
|
fix: run spaces script just on settings change (#96)
* fix(hm-module,spaces): missing columns when Zen is opened before the spaces table is created
Appearently, opening Zen before the spaces service runs could cause the
table not having the theme columns. Because of this, the CREATE TABLE IF
NOT EXISTS query would not run, but the columns would still not be
present. This commit adds the column via a bash script plus an ALTER
TABLE query, mimicking more what Zen does in it JavaScript code.
* style(hm-module): run nix fmt on hm-module
* refactor(hm-module,spaces): move bash scripts and sql queries directly to service executable
This was made to reduce the amount of derivations being build to just
one per-profile. Also, this helps make all the logic of the spaces
activation be into a single executable for debugging and error handling.
* feat(hm-module,spaces): error handling for locked database
Provide a useful error message to the user if the service fails due to
opened Zen browser instance.
* feat(hm-module,spaces): implement places.sqlite updating via home.file.* script
This fixed the problem of the systemd service being rerun on every
home-manager rebuild. Now the places.sqlite updating script just runs
when something needs to be updated on it. We use home.file.* to store
the script on the home directory and take advantage of the
home.file.*.onChange option to run it.
* feat(hm-module,spaces)!: change type of colors values to integer between 0 and 255
* docs: change bold headers to markdown headers to add support #links
* docs: [work]spaces options documentation and example
2025-08-22 17:06:40 -03:00
|
|
|
|
|
|
|
|
error="$(update_spaces 2>&1 1>/dev/null)"
|
|
|
|
|
if [[ "$?" -ne 0 ]]; then
|
|
|
|
|
if [[ "$error" == *"database is locked"* ]]; then
|
|
|
|
|
echo "$error"
|
|
|
|
|
|
|
|
|
|
YELLOW="\033[1;33m"
|
|
|
|
|
NC="\033[0m"
|
|
|
|
|
echo -e "zen-update-places:''${YELLOW} Atempted to update the \"zen_workspaces\" table with values declared in \"programs.zen.profiles.\"${profileName}\".spaces\".''${NC}"
|
|
|
|
|
echo -e "zen-update-places:''${YELLOW} Failed to update \"${placesFile}\" due to a Zen browser instance for profile \"${profileName}\" being opened, please close''${NC}"
|
|
|
|
|
echo -e "zen-update-places:''${YELLOW} Zen browser and rebuild the home environment to rerun \"home-manager-${config.home.username}.service\" and update places.sqlite.''${NC}"
|
|
|
|
|
else
|
|
|
|
|
echo "$error"
|
|
|
|
|
fi
|
|
|
|
|
exit 1
|
|
|
|
|
else
|
|
|
|
|
exit 0
|
|
|
|
|
fi
|
|
|
|
|
'');
|
|
|
|
|
onChange = ''
|
|
|
|
|
${config.home.homeDirectory}/${scriptFile}
|
|
|
|
|
if [[ "$?" -ne 0 ]]; then
|
|
|
|
|
RED="\033[0;31m"
|
|
|
|
|
NC="\033[0m"
|
|
|
|
|
echo -e "zen-update-places:''${RED} Failed to update places.sqlite file for Zen browser \"${profileName}\" profile.''${NC}"
|
|
|
|
|
fi
|
2025-08-18 21:32:29 -03:00
|
|
|
'';
|
fix: run spaces script just on settings change (#96)
* fix(hm-module,spaces): missing columns when Zen is opened before the spaces table is created
Appearently, opening Zen before the spaces service runs could cause the
table not having the theme columns. Because of this, the CREATE TABLE IF
NOT EXISTS query would not run, but the columns would still not be
present. This commit adds the column via a bash script plus an ALTER
TABLE query, mimicking more what Zen does in it JavaScript code.
* style(hm-module): run nix fmt on hm-module
* refactor(hm-module,spaces): move bash scripts and sql queries directly to service executable
This was made to reduce the amount of derivations being build to just
one per-profile. Also, this helps make all the logic of the spaces
activation be into a single executable for debugging and error handling.
* feat(hm-module,spaces): error handling for locked database
Provide a useful error message to the user if the service fails due to
opened Zen browser instance.
* feat(hm-module,spaces): implement places.sqlite updating via home.file.* script
This fixed the problem of the systemd service being rerun on every
home-manager rebuild. Now the places.sqlite updating script just runs
when something needs to be updated on it. We use home.file.* to store
the script on the home directory and take advantage of the
home.file.*.onChange option to run it.
* feat(hm-module,spaces)!: change type of colors values to integer between 0 and 255
* docs: change bold headers to markdown headers to add support #links
* docs: [work]spaces options documentation and example
2025-08-22 17:06:40 -03:00
|
|
|
executable = true;
|
|
|
|
|
force = true;
|
|
|
|
|
}) (filterAttrs (_: profile: profile.spaces != {} || profile.spacesForce) cfg.profiles));
|
2025-04-02 20:18:24 +05:00
|
|
|
};
|
|
|
|
|
}
|