Skip to content

Commit

Permalink
freetube: add module
Browse files Browse the repository at this point in the history
  • Loading branch information
Vonixxx authored and rycee committed Apr 30, 2024
1 parent f8e6694 commit 3c0df2a
Show file tree
Hide file tree
Showing 7 changed files with 112 additions and 0 deletions.
11 changes: 11 additions & 0 deletions modules/misc/news.nix
Original file line number Diff line number Diff line change
Expand Up @@ -1561,6 +1561,17 @@ in {
https://github.com/ErikReider/SwayNotificationCenter for more.
'';
}

{
time = "2024-04-30T18:28:28+00:00";
message = ''
A new module is available: 'programs.freetube'.
FreeTube is a YouTube client built around using YouTube more
privately. You can enjoy your favorite content and creators without
your habits being tracked. See https://freetubeapp.io/ for more.
'';
}
];
};
}
1 change: 1 addition & 0 deletions modules/modules.nix
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ let
./programs/firefox.nix
./programs/fish.nix
./programs/foot.nix
./programs/freetube.nix
./programs/fuzzel.nix
./programs/fzf.nix
./programs/gallery-dl.nix
Expand Down
60 changes: 60 additions & 0 deletions modules/programs/freetube.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
{ lib, pkgs, config, ... }:

let
inherit (lib)
concatStringsSep mapAttrsToList mkIf mkEnableOption mkPackageOption mkOption
literalExpression;

cfg = config.programs.freetube;

settings = settings:
let
convertSetting = name: value:
builtins.toJSON {
"_id" = name;
"value" = value;
};
in concatStringsSep "\n" (mapAttrsToList convertSetting settings) + "\n";
in {
meta.maintainers = with lib.maintainers; [ vonixxx ];

options.programs.freetube = {
enable = mkEnableOption "FreeTube, a YT client for Windows, Mac, and Linux";

package = mkPackageOption pkgs "freetube" { };

settings = mkOption {
type = lib.types.attrs;
default = { };
example = literalExpression ''
{
allowDashAv1Formats = true;
checkForUpdates = false;
defaultQuality = "1080";
baseTheme = "catppuccinMocha";
}
'';
description = ''
Configuration settings for FreeTube.
All configurable options can be deduced by enabling them through the
GUI and observing the changes in {file}`settings.db`.
'';
};
};

config = mkIf cfg.enable {
home.packages = [ cfg.package ];

xdg.configFile."FreeTube/hm_settings.db" = {
source = pkgs.writeText "hm_settings.db" (settings cfg.settings);

onChange = let
hmSettingsDb = "${config.xdg.configHome}/FreeTube/hm_settings.db";
settingsDb = "${config.xdg.configHome}/FreeTube/settings.db";
in ''
run install -Dm644 $VERBOSE_ARG '${hmSettingsDb}' '${settingsDb}'
'';
};
};
}
1 change: 1 addition & 0 deletions tests/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,7 @@ in import nmtSrc {
./modules/programs/boxxy
./modules/programs/firefox
./modules/programs/foot
./modules/programs/freetube
./modules/programs/fuzzel
./modules/programs/getmail
./modules/programs/gnome-terminal
Expand Down
8 changes: 8 additions & 0 deletions tests/modules/programs/freetube/basic-configuration.db
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{"_id":"allowDashAv1Formats","value":true}
{"_id":"checkForBlogPosts","value":false}
{"_id":"checkForUpdates","value":false}
{"_id":"commentAutoLoadEnabled","value":true}
{"_id":"defaultQuality","value":"1080"}
{"_id":"hideHeaderLogo","value":true}
{"_id":"listType","value":"list"}
{"_id":"useRssFeeds","value":true}
30 changes: 30 additions & 0 deletions tests/modules/programs/freetube/basic-configuration.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{ config, pkgs, ... }:

{
programs.freetube = {
enable = true;
settings = {
useRssFeeds = true;
hideHeaderLogo = true;
allowDashAv1Formats = true;
commentAutoLoadEnabled = true;

checkForUpdates = false;
checkForBlogPosts = false;

listType = "list";
defaultQuality = "1080";
};
};

test.stubs.freetube = { };

nmt.script = ''
assertFileExists home-files/.config/FreeTube/hm_settings.db
assertFileContent home-files/.config/FreeTube/hm_settings.db \
${./basic-configuration.db}
assertFileContains activate \
"install -Dm644 \$VERBOSE_ARG '/home/hm-user/.config/FreeTube/hm_settings.db' '/home/hm-user/.config/FreeTube/settings.db'"
'';
}
1 change: 1 addition & 0 deletions tests/modules/programs/freetube/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{ freetube-basic-configuration = ./basic-configuration.nix; }

0 comments on commit 3c0df2a

Please sign in to comment.