forked from nix-community/home-manager
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
4fe5afa
commit 4b702bf
Showing
14 changed files
with
282 additions
and
0 deletions.
There are no files selected for viewing
Validating CODEOWNERS rules …
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -35,4 +35,10 @@ | |
fingerprint = "D446 E58D 87A0 31C7 EC15 88D7 B461 2924 45C6 E696"; | ||
}]; | ||
}; | ||
olmokramer = { | ||
name = "Olmo Kramer"; | ||
email = "[email protected]"; | ||
github = "olmokramer"; | ||
githubId = 3612514; | ||
}; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,135 @@ | ||
{ config, lib, pkgs, ... }: | ||
|
||
with lib; | ||
|
||
let | ||
|
||
cfg = config.programs.ncmpcpp; | ||
|
||
renderSettings = settings: | ||
concatStringsSep "\n" (mapAttrsToList renderSetting settings); | ||
|
||
renderSetting = name: value: "${name}=${renderValue value}"; | ||
|
||
renderValue = option: | ||
{ | ||
int = toString option; | ||
bool = if option then "yes" else "no"; | ||
string = option; | ||
}.${builtins.typeOf option}; | ||
|
||
renderBindings = bindings: concatStringsSep "\n" (map renderBinding bindings); | ||
|
||
renderBinding = { key, command }: | ||
concatStringsSep "\n " ([ ''def_key "${key}"'' ] ++ maybeWrapList command); | ||
|
||
maybeWrapList = xs: if isList xs then xs else [ xs ]; | ||
|
||
valueType = with types; oneOf [ bool int str ]; | ||
|
||
bindingType = types.submodule ({ name, config, ... }: { | ||
options = { | ||
key = mkOption { | ||
type = types.str; | ||
description = "Key to bind."; | ||
example = "j"; | ||
}; | ||
|
||
command = mkOption { | ||
type = with types; either str (listOf str); | ||
description = "Command or sequence of commands to be executed."; | ||
example = "scroll_down"; | ||
}; | ||
}; | ||
}); | ||
|
||
in { | ||
meta.maintainers = with maintainers; [ olmokramer ]; | ||
|
||
options.programs.ncmpcpp = { | ||
enable = | ||
mkEnableOption "ncmpcpp - an ncurses Music Player Daemon (MPD) client"; | ||
|
||
package = mkOption { | ||
type = types.package; | ||
default = pkgs.ncmpcpp; | ||
defaultText = literalExample "pkgs.ncmpcpp"; | ||
description = '' | ||
Package providing the <code>ncmpcpp</code> command. | ||
''; | ||
example = | ||
literalExample "pkgs.ncmpcpp.override { visualizerSupport = true; }"; | ||
}; | ||
|
||
mpdMusicDir = mkOption { | ||
type = types.nullOr types.path; | ||
default = let mpdCfg = config.services.mpd; | ||
in if pkgs.stdenv.hostPlatform.isLinux && mpdCfg.enable then | ||
mpdCfg.musicDirectory | ||
else | ||
null; | ||
defaultText = literalExample '' | ||
if pkgs.stdenv.hostPlatform.isLinux && config.services.mpd.enable then | ||
config.services.mpd.musicDirectory | ||
else | ||
null | ||
''; | ||
description = '' | ||
Value of the <code>mpd_music_dir</code> setting. On Linux platforms the | ||
value of <varname>services.mpd.musicDirectory</varname> is used as the | ||
default if <varname>services.mpd.enable</varname> is | ||
<literal>true</literal>. | ||
''; | ||
example = "~/music"; | ||
}; | ||
|
||
settings = mkOption { | ||
type = types.attrsOf valueType; | ||
default = { }; | ||
description = '' | ||
Attribute set from name of a setting to its value. For available options | ||
see | ||
<citerefentry> | ||
<refentrytitle>ncmpcpp</refentrytitle> | ||
<manvolnum>1</manvolnum> | ||
</citerefentry>. | ||
''; | ||
example = { ncmpcpp_directory = "~/.local/share/ncmpcpp"; }; | ||
}; | ||
|
||
bindings = mkOption { | ||
type = types.listOf bindingType; | ||
default = [ ]; | ||
description = "List of keybindings."; | ||
example = literalExample '' | ||
[ | ||
{ key = "j"; command = "scroll_down"; } | ||
{ key = "k"; command = "scroll_up"; } | ||
{ key = "J"; command = [ "select_item" "scroll_down" ]; } | ||
{ key = "K"; command = [ "select_item" "scroll_up" ]; } | ||
] | ||
''; | ||
}; | ||
}; | ||
|
||
config = mkIf cfg.enable { | ||
warnings = mkIf (cfg.settings ? mpd_music_dir && cfg.mpdMusicDir != null) [ | ||
("programs.ncmpcpp.settings.mpd_music_dir will be overridden by" | ||
+ " programs.ncmpcpp.mpdMusicDir.") | ||
]; | ||
|
||
home.packages = [ cfg.package ]; | ||
|
||
xdg.configFile = { | ||
"ncmpcpp/config" = let | ||
settings = cfg.settings // optionalAttrs (cfg.mpdMusicDir != null) { | ||
mpd_music_dir = toString cfg.mpdMusicDir; | ||
}; | ||
in mkIf (settings != { }) { text = renderSettings settings + "\n"; }; | ||
|
||
"ncmpcpp/bindings" = mkIf (cfg.bindings != [ ]) { | ||
text = renderBindings cfg.bindings + "\n"; | ||
}; | ||
}; | ||
}; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
{ ncmpcpp-use-mpd-config = ./ncmpcpp-use-mpd-config.nix; } |
1 change: 1 addition & 0 deletions
1
tests/modules/programs/ncmpcpp-linux/ncmpcpp-use-mpd-config-expected-config
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
mpd_music_dir=/home/user/music |
25 changes: 25 additions & 0 deletions
25
tests/modules/programs/ncmpcpp-linux/ncmpcpp-use-mpd-config.nix
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
{ pkgs, ... }: | ||
|
||
{ | ||
config = { | ||
programs.ncmpcpp.enable = true; | ||
|
||
services.mpd.enable = true; | ||
services.mpd.musicDirectory = "/home/user/music"; | ||
|
||
nixpkgs.overlays = [ | ||
(self: super: { | ||
ncmpcpp = pkgs.writeScriptBin "dummy-ncmpcpp" ""; | ||
mpd = pkgs.writeScriptBin "dummy-mpd" ""; | ||
}) | ||
]; | ||
|
||
nmt.script = '' | ||
assertFileContent \ | ||
home-files/.config/ncmpcpp/config \ | ||
${./ncmpcpp-use-mpd-config-expected-config} | ||
assertPathNotExists home-files/.config/ncmpcpp/bindings | ||
''; | ||
}; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
{ | ||
ncmpcpp-empty-settings = ./ncmpcpp-empty-settings.nix; | ||
ncmpcpp-example-settings = ./ncmpcpp-example-settings.nix; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
{ pkgs, ... }: | ||
|
||
{ | ||
config = { | ||
programs.ncmpcpp.enable = true; | ||
|
||
nixpkgs.overlays = | ||
[ (self: super: { ncmpcpp = pkgs.writeScriptBin "dummy-ncmpcpp" ""; }) ]; | ||
|
||
nmt.script = '' | ||
assertPathNotExists home-files/.config/ncmpcpp/config | ||
assertPathNotExists home-files/.config/ncmpcpp/bindings | ||
''; | ||
}; | ||
} |
16 changes: 16 additions & 0 deletions
16
tests/modules/programs/ncmpcpp/ncmpcpp-example-settings-expected-bindings
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
def_key "j" | ||
scroll_down | ||
def_key "k" | ||
scroll_up | ||
def_key "J" | ||
select_item | ||
scroll_down | ||
def_key "K" | ||
select_item | ||
scroll_up | ||
def_key "x" | ||
delete_playlist_items | ||
def_key "x" | ||
delete_browser_items | ||
def_key "x" | ||
delete_stored_playlist |
4 changes: 4 additions & 0 deletions
4
tests/modules/programs/ncmpcpp/ncmpcpp-example-settings-expected-config
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
display_volume_level=no | ||
mpd_music_dir=/home/user/music | ||
playlist_disable_highlight_delay=0 | ||
user_interface=alternative |
60 changes: 60 additions & 0 deletions
60
tests/modules/programs/ncmpcpp/ncmpcpp-example-settings.nix
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
{ pkgs, ... }: | ||
|
||
{ | ||
config = { | ||
programs.ncmpcpp = { | ||
enable = true; | ||
mpdMusicDir = "/home/user/music"; | ||
|
||
settings = { | ||
user_interface = "alternative"; | ||
display_volume_level = false; | ||
playlist_disable_highlight_delay = 0; | ||
}; | ||
|
||
bindings = [ | ||
{ | ||
key = "j"; | ||
command = "scroll_down"; | ||
} | ||
{ | ||
key = "k"; | ||
command = "scroll_up"; | ||
} | ||
{ | ||
key = "J"; | ||
command = [ "select_item" "scroll_down" ]; | ||
} | ||
{ | ||
key = "K"; | ||
command = [ "select_item" "scroll_up" ]; | ||
} | ||
{ | ||
key = "x"; | ||
command = "delete_playlist_items"; | ||
} | ||
{ | ||
key = "x"; | ||
command = "delete_browser_items"; | ||
} | ||
{ | ||
key = "x"; | ||
command = "delete_stored_playlist"; | ||
} | ||
]; | ||
}; | ||
|
||
nixpkgs.overlays = | ||
[ (self: super: { ncmpcpp = pkgs.writeScriptBin "dummy-ncmpcpp" ""; }) ]; | ||
|
||
nmt.script = '' | ||
assertFileContent \ | ||
home-files/.config/ncmpcpp/config \ | ||
${./ncmpcpp-example-settings-expected-config} | ||
assertFileContent \ | ||
home-files/.config/ncmpcpp/bindings \ | ||
${./ncmpcpp-example-settings-expected-bindings} | ||
''; | ||
}; | ||
} |