commit
0f01215203
@ -0,0 +1,8 @@ |
||||
;;; Directory Local Variables |
||||
;;; For more information see (info "(emacs) Directory Variables") |
||||
|
||||
((nil |
||||
(bug-reference-bug-regexp . "\\(\\(?:[Ii]ssue \\|[Ff]ixe[ds] \\|[Rr]esolve[ds]? \\|[Cc]lose[ds]? \\|[Pp]\\(?:ull [Rr]equest\\|[Rr]\\) \\|(\\)#\\([0-9]+\\))?\\)") |
||||
(bug-reference-url-format . "https://github.com/NixOS/nixpkgs/issues/%s")) |
||||
(nix-mode |
||||
(tab-width . 2))) |
@ -0,0 +1,23 @@ |
||||
# Bamf |
||||
|
||||
{ config, lib, pkgs, ... }: |
||||
|
||||
with lib; |
||||
|
||||
{ |
||||
###### interface |
||||
|
||||
options = { |
||||
services.bamf = { |
||||
enable = mkEnableOption "bamf"; |
||||
}; |
||||
}; |
||||
|
||||
###### implementation |
||||
|
||||
config = mkIf config.services.bamf.enable { |
||||
services.dbus.packages = [ pkgs.bamf ]; |
||||
|
||||
systemd.packages = [ pkgs.bamf ]; |
||||
}; |
||||
} |
@ -0,0 +1,64 @@ |
||||
{ pkgs, config, lib, ... }: |
||||
with lib; |
||||
let |
||||
cfg = config.services.oauth2_proxy.nginx; |
||||
in |
||||
{ |
||||
options.services.oauth2_proxy.nginx = { |
||||
proxy = mkOption { |
||||
type = types.string; |
||||
default = config.services.oauth2_proxy.httpAddress; |
||||
description = '' |
||||
The address of the reverse proxy endpoint for oauth2_proxy |
||||
''; |
||||
}; |
||||
virtualHosts = mkOption { |
||||
type = types.listOf types.string; |
||||
default = []; |
||||
description = '' |
||||
A list of nginx virtual hosts to put behind the oauth2 proxy |
||||
''; |
||||
}; |
||||
}; |
||||
config.services.oauth2_proxy = mkIf (cfg.virtualHosts != [] && (hasPrefix "127.0.0.1:" cfg.proxy)) { |
||||
enable = true; |
||||
}; |
||||
config.services.nginx = mkMerge ((optional (cfg.virtualHosts != []) { |
||||
recommendedProxySettings = true; # needed because duplicate headers |
||||
}) ++ (map (vhost: { |
||||
virtualHosts.${vhost} = { |
||||
locations."/oauth2/" = { |
||||
proxyPass = cfg.proxy; |
||||
extraConfig = '' |
||||
proxy_set_header X-Scheme $scheme; |
||||
proxy_set_header X-Auth-Request-Redirect $request_uri; |
||||
''; |
||||
}; |
||||
locations."/oauth2/auth" = { |
||||
proxyPass = cfg.proxy; |
||||
extraConfig = '' |
||||
proxy_set_header X-Scheme $scheme; |
||||
# nginx auth_request includes headers but not body |
||||
proxy_set_header Content-Length ""; |
||||
proxy_pass_request_body off; |
||||
''; |
||||
}; |
||||
locations."/".extraConfig = '' |
||||
auth_request /oauth2/auth; |
||||
error_page 401 = /oauth2/sign_in; |
||||
|
||||
# pass information via X-User and X-Email headers to backend, |
||||
# requires running with --set-xauthrequest flag |
||||
auth_request_set $user $upstream_http_x_auth_request_user; |
||||
auth_request_set $email $upstream_http_x_auth_request_email; |
||||
proxy_set_header X-User $user; |
||||
proxy_set_header X-Email $email; |
||||
|
||||
# if you enabled --cookie-refresh, this is needed for it to work with auth_request |
||||
auth_request_set $auth_cookie $upstream_http_set_cookie; |
||||
add_header Set-Cookie $auth_cookie; |
||||
''; |
||||
|
||||
}; |
||||
}) cfg.virtualHosts)); |
||||
} |
@ -0,0 +1,69 @@ |
||||
{ pkgs ? import <nixpkgs> {} |
||||
, lib ? pkgs.lib |
||||
|
||||
, domains ? [ "acme-v01.api.letsencrypt.org" "letsencrypt.org" ] |
||||
}: |
||||
|
||||
pkgs.runCommand "letsencrypt-snakeoil-ca" { |
||||
nativeBuildInputs = [ pkgs.openssl ]; |
||||
} '' |
||||
addpem() { |
||||
local file="$1"; shift |
||||
local storeFileName="$(IFS=.; echo "$*")" |
||||
|
||||
echo -n " " >> "$out" |
||||
|
||||
# Every following argument is an attribute, so let's recurse and check |
||||
# every attribute whether it must be quoted and write it into $out. |
||||
while [ -n "$1" ]; do |
||||
if expr match "$1" '^[a-zA-Z][a-zA-Z0-9]*$' > /dev/null; then |
||||
echo -n "$1" >> "$out" |
||||
else |
||||
echo -n '"' >> "$out" |
||||
echo -n "$1" | sed -e 's/["$]/\\&/g' >> "$out" |
||||
echo -n '"' >> "$out" |
||||
fi |
||||
shift |
||||
[ -z "$1" ] || echo -n . >> "$out" |
||||
done |
||||
|
||||
echo " = builtins.toFile \"$storeFileName\" '''" >> "$out" |
||||
sed -e 's/^/ /' "$file" >> "$out" |
||||
|
||||
echo " ''';" >> "$out" |
||||
} |
||||
|
||||
echo '# Generated via mkcert.sh in the same directory.' > "$out" |
||||
echo '{' >> "$out" |
||||
|
||||
openssl req -newkey rsa:4096 -x509 -sha256 -days 36500 \ |
||||
-subj '/CN=Snakeoil CA' -nodes -out ca.pem -keyout ca.key |
||||
|
||||
addpem ca.key ca key |
||||
addpem ca.pem ca cert |
||||
|
||||
${lib.concatMapStrings (fqdn: let |
||||
opensslConfig = pkgs.writeText "snakeoil.cnf" '' |
||||
[req] |
||||
default_bits = 4096 |
||||
prompt = no |
||||
default_md = sha256 |
||||
req_extensions = req_ext |
||||
distinguished_name = dn |
||||
[dn] |
||||
CN = ${fqdn} |
||||
[req_ext] |
||||
subjectAltName = DNS:${fqdn} |
||||
''; |
||||
in '' |
||||
export OPENSSL_CONF=${lib.escapeShellArg opensslConfig} |
||||
openssl genrsa -out snakeoil.key 4096 |
||||
openssl req -new -key snakeoil.key -out snakeoil.csr |
||||
openssl x509 -req -in snakeoil.csr -sha256 -set_serial 666 \ |
||||
-CA ca.pem -CAkey ca.key -out snakeoil.pem -days 36500 |
||||
addpem snakeoil.key ${lib.escapeShellArg fqdn} key |
||||
addpem snakeoil.pem ${lib.escapeShellArg fqdn} cert |
||||
'') domains} |
||||
|
||||
echo '}' >> "$out" |
||||
'' |
@ -0,0 +1,6 @@ |
||||
#!/usr/bin/env nix-shell |
||||
#!nix-shell -p nix bash -i bash |
||||
set -e |
||||
cd "$(dirname "$0")" |
||||
storepath="$(nix-build --no-out-link mkcerts.nix)" |
||||
cat "$storepath" > snakeoil-certs.nix |
@ -0,0 +1,253 @@ |
||||
# Generated via mkcert.sh in the same directory. |
||||
{ |
||||
ca.key = builtins.toFile "ca.key" '' |
||||
-----BEGIN PRIVATE KEY----- |
||||
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 |
||||
Gvfq54FbDuB10XP8JdLrsy9Z6GEsmoE= |
||||
-----END PRIVATE KEY----- |
||||
''; |
||||
ca.cert = builtins.toFile "ca.cert" '' |
||||
-----BEGIN CERTIFICATE----- |
||||
MIIFATCCAumgAwIBAgIJANydi4uFZr0LMA0GCSqGSIb3DQEBCwUAMBYxFDASBgNV |
||||
BAMMC1NuYWtlb2lsIENBMCAXDTE4MDcxMjAwMjIxNloYDzIxMTgwNjE4MDAyMjE2 |
||||
WjAWMRQwEgYDVQQDDAtTbmFrZW9pbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP |
||||
ADCCAgoCggIBAN91XEL/gfCG7MP2iv0IMO7dMFATmWKskjkpiZ8xm1+B3MSOA7OZ |
||||
H0BVKSfatB4KrMzmb5gLM877bLvQV2Tu8M5GLU52Fh9RAhbr9NnbvESPHi3zaP2L |
||||
vTnJSpMlkqMxsPzfSB5ciYnpUaM2/9aKxMebAGylYp59hA83rxm9g0KfR3mtgmD2 |
||||
5E5k8kdIjQxiP2IRFYg837GFmhLE3vggsnSsQ5B/HYYcOFOv329lgAWpsAh+Hfl9 |
||||
i6VFZqtRJ6Qj6sPFrzcUPyr1wyA4/zgqQt6nZ1FddNtRYSsZQ6kc/nkz0zvCzRFU |
||||
12X09RJsOAKGXvJiUcJ17fbrWr/Manl0xX+3+Ndc1SBG6u9dziBQoqNLhJ9++DRd |
||||
Wc+zewyVngk2bJwr2SWAhJWZtMpVyNFEm/wG9rY1BWwn1MivJXRAST3gO5yCwLct |
||||
uFB9B2adZVwR3PCtkc2mT1rPmafDjZG69lb0vX1PvGkit0tIdo6KzhUSq5mORYiF |
||||
8jPQNUx5e1gRCbCoUbbdbDS61ymYJbgU++nJizkYA+YZZ+uUzGwsP/t616i3cCF4 |
||||
L7npkGhUGcjwUW8hfapyL6B9UO4KO8OZvJL/Q2/Esaq9ILUZQ+ZY/dNHkVvUfxGn |
||||
7f3MkdGYf6phaWFy/qnsWVjb/p31GTDxYpFNIIHvJ5R000+I+imTo3g3AgMBAAGj |
||||
UDBOMB0GA1UdDgQWBBQ3vPWzjLmu5krbSpfhBAht9KL3czAfBgNVHSMEGDAWgBQ3 |
||||
vPWzjLmu5krbSpfhBAht9KL3czAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUA |
||||
A4ICAQDF9HyC1ZFN3Ob+JA9Dj5+Rcobi7JIA5F8uW3Q92LfPoVaUGEkBrwJSiTFX |
||||
47zvP/ySBJIpZ9rzHMbJ+1L+eJgczF1uQ91inthCKo1THTPo5TgBrpJj0YAIunsj |
||||
9eH1tBnfWFYdVIDZoTSiwPtgIvglpyuK/eJXEe+FRzubhtdc9w1Hlzox1sd0TQuy |
||||
Pl9KFHg7BlFZfCPig1mkB8pfwjBDgVhv5DKJ9cJXh3R5zSoiyuS2b+qYSvw8YTHq |
||||
0WNKWUthb7BVAYE3OmcbOHgUAUjtJ6EIGIB9z/SoLe90CofXLXFR5dppuVLKCMBA |
||||
kgL4luBIu7t8mcnN2yzobvcGHy8RVY6F5abCCy6gackLzjOzvH1SYOxP8yN74aKB |
||||
ANgcqdWspb8JYoU8lEbA8dhBVrsgBf7XeJlrZvMdcUENlJ2PI0JWr9WvlRAM9rYY |
||||
EY1alJqBCp6530Ggd6/f0V64cEqptejUdmN9L0zboxKjQf4LjpUNraGvg8tw/xkY |
||||
4dT1U2HlVnhOyBVkx/tE6zIK/RU16oMqwpjCdfbK/TuWCNc/emJz5PMlp81zm83+ |
||||
dExpWwuV4rt6OQbZ/GSatNLJXOw+pkLjaEhnHgrsgI+HqAUXg3ByKol+1e76wN51 |
||||
k1ZKpB6mk4kejySGPYBHiJwED0IyXu9gUfalSczXFO4ySAvhCg== |
||||
-----END CERTIFICATE----- |
||||
''; |
||||
"acme-v01.api.letsencrypt.org".key = builtins.toFile "acme-v01.api.letsencrypt.org.key" '' |
||||
-----BEGIN RSA PRIVATE KEY----- |
||||
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 |
||||
-----END RSA PRIVATE KEY----- |
||||
''; |
||||
"acme-v01.api.letsencrypt.org".cert = builtins.toFile "acme-v01.api.letsencrypt.org.cert" '' |
||||
-----BEGIN CERTIFICATE----- |
||||
MIIEtDCCApwCAgKaMA0GCSqGSIb3DQEBCwUAMBYxFDASBgNVBAMMC1NuYWtlb2ls |
||||
IENBMCAXDTE4MDcxMjAwMjIxN1oYDzIxMTgwNjE4MDAyMjE3WjAnMSUwIwYDVQQD |
||||
DBxhY21lLXYwMS5hcGkubGV0c2VuY3J5cHQub3JnMIICIjANBgkqhkiG9w0BAQEF |
||||
AAOCAg8AMIICCgKCAgEAvG+sL4q0VkgSClBTn4NkPiUrtXx5oLyZ+CCM1jrQx/xo |
||||
tUt5X2S4/7vMnAK/yRLsR7R2PhXO8CZPqJ7B6OfAgaDTgvipJkZYPZQSMP3KOinM |
||||
3WJLssqKh7/HOxZIf0iyUXewrnX5eTAo/CLsUnhBjBD7E99nmQz/leLWSl82sSYD |
||||
kO3nUk3/1qJZA8iddb4uH0IEQWcNKev3WoQQzwiVrXBiftlRQOJy5JJXm5m8229M |
||||
CpMA1AUWmpdu6sl3/gFFdsDhUFq/a7LFrVyaUCMRIHg9szAB7ZFkixr9umQs8jKw |
||||
uo983JHB11h2SirwgfIzHHmyhaWhCt22ucTwEXGhq63LtrzZvLsfP8Ql5S+AuqGT |
||||
H0v8meuc784leAjulBZjkpuIFwDnVv9+YeUEbqJeo1hSHrILddora3nkH4E2dJWm |
||||
LpqpiPr++GRi+BNgYKW/BQLTJ7C6v+vUs+kdPgYJH5z7oP6f0YZkT0Wkubp/UEz7 |
||||
UV2dfjz57d77DYx5rFWGYzJriWR/xltgL1zDpjwjwG1FDpRqwlyYbBFpjQhxI+X0 |
||||
aT98m6fCzBDQHDb/+JgvsjTHh6OZatahFAwzFIEfrceDv1BG8sBWIaZGhLzYiWQx |
||||
afl8oXbWv1T6I1jpsTlCdCSkWzaJb4ZjxI9Ga1ynVu8F16+GR2a71wKWu7UbZQsC |
||||
AwEAATANBgkqhkiG9w0BAQsFAAOCAgEAzeGlFMz1Bo+bbpZDQ60HLdw7qDp3SPJi |
||||
x5LYG860yzbh9ghvyc59MIm5E6vB140LRJAs+Xo6VdVSTC4jUA2kI9k1BQsbZKds |
||||
XT0RqA7HkqcLS3t3JWFkkKbCshMGZTSZ//hpbaUG1qEAfUfmZw1lAxqSa0kqavbP |
||||
awf7k8qHbqcj7WORCdH7fjKAjntEQwIpl1GEkAdCSghOJz2/o9aWmiGZt27OM/sG |
||||
MLSrcmL3QBElCjOxg14P8rnsmZ+VEp6MO93otoJ4dJL7fN7vTIh5ThbS384at/4l |
||||
4KK/y7XctUzAtWzhnodjk/NSgrrGX2kseOGOWEM1sZc9xtinHH2tpOMqtLVOkgHD |
||||
Lul+TArqgqeoOdEM/9OL64kgOrO/JzxBq+egLUi4wgAul2wmtecKZK1dkwYZHeqW |
||||
74i55yeBp+TTomnPr0ZBns6xKFYldJVzC34OB+2YVDxe8y9XtWtuQOxFw0LQHhNb |
||||
zy5aBverWzZFwiIIjJoVHTQq848uKBJec0YILfMinS1Wjif4xqW/IMfi+GFS0oka |
||||
sKCGNE/8ur9u/Jm6cbto3f2dtV8/vkhiITQgwzM2jalyuVJ9jyPxG7EvbTvZORgw |
||||
pRvBRTd4/eE7I1L+UDe6x8EjR/MrqfF9FWVGOZo4vPTyNbrSWYBh6s9kYy56ds1l |
||||
IRxst1BXEfI= |
||||
-----END CERTIFICATE----- |
||||
''; |
||||
"letsencrypt.org".key = builtins.toFile "letsencrypt.org.key" '' |
||||
-----BEGIN RSA PRIVATE KEY----- |
||||
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 |
||||
-----END RSA PRIVATE KEY----- |
||||
''; |
||||
"letsencrypt.org".cert = builtins.toFile "letsencrypt.org.cert" '' |
||||
-----BEGIN CERTIFICATE----- |
||||
MIIEpzCCAo8CAgKaMA0GCSqGSIb3DQEBCwUAMBYxFDASBgNVBAMMC1NuYWtlb2ls |
||||
IENBMCAXDTE4MDcxMjAwMjIxOVoYDzIxMTgwNjE4MDAyMjE5WjAaMRgwFgYDVQQD |
||||
DA9sZXRzZW5jcnlwdC5vcmcwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC |
||||
AQDA++GXB6aA+Lr3X2xIPs/PqXoJF9TUb98NzQC+ww3+dOaIY0Omqf15/UID5G0u |
||||
0649zUsvISi9x+7vn9X7opKA7iTX0TYKsUIXCMQ5YMYXgOByVPfvnVYaYUmDM8R9 |
||||
l+Fs6uZB9Bq7zorEC01lWn0XFwpu4vJD+w03F80wH7sgdtWHC/NVyd0elhkQ/qR2 |
||||
fC80s/bZui5fmrdq/FZK2WfTW5nQF9SbhfDFpQ0hTu3QO/noUr0L2Fb0Blp7R2jQ |
||||
EkFZEXvFLAt4Mmqf25nP6xfRf+0hppJBIG5nJKPQd7lkrN1Q7S2nHbFNLYGuXdjY |
||||
E4lo4T3we5ta90qiyUu3hfatWszEZrzpKYXNzIMvVFKjBw/+u7LLnnmXul6kvmzh |
||||
yYyBEEFePm1eGpRNU6flY74kKUuT6u2+0BPiuiAmYyoQqYzDa3ss3LVb2uL/fvxA |
||||
b+LcAZosgv/saw9u5E7nVJ22LhAxV7bM0XN7vabM2aPVJeiRbLv5m+NQynnmgSNF |
||||
GxM9Rl004QclbLo6zbOe6ovtmkgcLEEbwUqeQJWJdEmoADxvNwSFH6ktqYsg4eW/ |
||||
iR3MnqmEeRK8rryq9tFF5SY6MmBK6lUEj2OEr58drL9RZHjN8lB5330fxk6iJeWs |
||||
sJWz5U8PKdRQqvMXWdjKiU3OL81Lh7gBud9aDILkkpGmNQIDAQABMA0GCSqGSIb3 |
||||
DQEBCwUAA4ICAQAkx3jcryukAuYP7PQxMy3LElOl65ZFVqxDtTDlr7DvAkWJzVCb |
||||
g08L6Tu+K0rKh2RbG/PqS0+8/jBgc4IwSOPfDDAX+sinfj0kwXG34WMzB0G3fQzU |
||||
2BMplJDOaBcNqHG8pLP1BG+9HAtR/RHe9p2Jw8LG2qmZs6uemPT/nCTNoyIL4oxh |
||||
UncjETV4ayCHDKD1XA7/icgddYsnfLQHWuIMuCrmQCHo0uQAd7qVHfUWZ+gcsZx0 |
||||
jTNCcaI8OTS2S65Bjaq2HaM7GMcUYNUD2vSyNQeQbha4ZeyZ9bPyFzznPMmrPXQe |
||||
MJdkbJ009RQIG9As79En4m+l+/6zrdx4DNdROqaL6YNiSebWMnuFHpMW/rCnhrT/ |
||||
HYadijHOiJJGj9tWSdC4XJs7fvZW3crMPUYxpOvl01xW2ZlgaekILi1FAjSMQVoV |
||||
NhWstdGCKJdthJqLL5MtNdfgihKcmgkJqKFXTkPv7sgAQCopu6X+S+srCgn856Lv |
||||
21haRWZa8Ml+E0L/ticT8Fd8Luysc6K9TJ4mT8ENC5ywvgDlEkwBD3yvINXm5lg1 |
||||
xOIxv/Ye5gFk1knuM7OzpUFBrXUHdVVxflCUqNAhFPbcXwjgEQ+A+S5B0vI6Ohue |
||||
ZnR/wuiou6Y+Yzh8XfqL/3H18mGDdjyMXI1B6l4Judk000UVyr46cnI7mw== |
||||
-----END CERTIFICATE----- |
||||
''; |
||||
} |
@ -0,0 +1,119 @@ |
||||
import ./make-test.nix ({ pkgs, ... }: |
||||
let |
||||
track = pkgs.fetchurl { |
||||
# Sourced from http://freemusicarchive.org/music/Blue_Wave_Theory/Surf_Music_Month_Challenge/Skyhawk_Beach_fade_in |
||||
# License: http://creativecommons.org/licenses/by-sa/4.0/ |
||||
|
||||
name = "Blue_Wave_Theory-Skyhawk_Beach.mp3"; |
||||
url = https://freemusicarchive.org/file/music/ccCommunity/Blue_Wave_Theory/Surf_Music_Month_Challenge/Blue_Wave_Theory_-_04_-_Skyhawk_Beach.mp3; |
||||
sha256 = "0xw417bxkx4gqqy139bb21yldi37xx8xjfxrwaqa0gyw19dl6mgp"; |
||||
}; |
||||
|
||||
defaultCfg = rec { |
||||
user = "mpd"; |
||||
group = "mpd"; |
||||
dataDir = "/var/lib/mpd"; |
||||
musicDirectory = "${dataDir}/music"; |
||||
}; |
||||
|
||||
defaultMpdCfg = with defaultCfg; { |
||||
inherit dataDir musicDirectory user group; |
||||
enable = true; |
||||
}; |
||||
|
||||
musicService = { user, group, musicDirectory }: { |
||||
description = "Sets up the music file(s) for MPD to use."; |
||||
requires = [ "mpd.service" ]; |
||||
after = [ "mpd.service" ]; |
||||
wantedBy = [ "default.target" ]; |
||||
script = '' |
||||
mkdir -p ${musicDirectory} && chown -R ${user}:${group} ${musicDirectory} |
||||
cp ${track} ${musicDirectory} |
||||
chown ${user}:${group} ${musicDirectory}/$(basename ${track}) |
||||
''; |
||||
}; |
||||
|
||||
mkServer = { mpd, musicService, }: |
||||
{ boot.kernelModules = [ "snd-dummy" ]; |
||||
sound.enable = true; |
||||
services.mpd = mpd; |
||||
systemd.services.musicService = musicService; |
||||
}; |
||||
in { |
||||
name = "mpd"; |
||||
meta = with pkgs.stdenv.lib.maintainers; { |
||||
maintainers = [ emmanuelrosa ]; |
||||
}; |
||||
|
||||
nodes = |
||||
{ client = |
||||
{ config, pkgs, ... }: { }; |
||||
|
||||
serverALSA = |
||||
{ config, pkgs, ... }: (mkServer { |
||||
mpd = defaultMpdCfg // { |
||||
network.listenAddress = "any"; |
||||
extraConfig = '' |
||||
audio_output { |
||||
type "alsa" |
||||
name "ALSA" |
||||
mixer_type "null" |
||||
} |
||||
''; |
||||
}; |
||||
|
||||
musicService = with defaultMpdCfg; musicService { inherit user group musicDirectory; }; |
||||
}) // { networking.firewall.allowedTCPPorts = [ 6600 ]; }; |
||||
|
||||
serverPulseAudio = |
||||
{ config, pkgs, ... }: (mkServer { |
||||
mpd = defaultMpdCfg // { |
||||
extraConfig = '' |
||||
audio_output { |
||||
type "pulse" |
||||
name "The Pulse" |
||||
} |
||||
''; |
||||
}; |
||||
|
||||
musicService = with defaultCfg; musicService { inherit user group musicDirectory; }; |
||||
}) // { hardware.pulseaudio.enable = true; }; |
||||
}; |
||||
|
||||
testScript = '' |
||||
my $mpc = "${pkgs.mpc_cli}/bin/mpc --wait"; |
||||
|
||||
# Connects to the given server and attempts to play a tune. |
||||
sub play_some_music { |
||||
my $server = $_[0]; |
||||
|
||||
$server->waitForUnit("mpd.service"); |
||||
$server->succeed("$mpc update"); |
||||
my @tracks = $server->execute("$mpc ls"); |
||||
|
||||
for my $track (split(/\n/, $tracks[1])) { |
||||
$server->succeed("$mpc add $track"); |
||||
}; |
||||
|
||||
my @added_tracks = $server->execute("$mpc listall"); |
||||
(length $added_tracks[1]) > 0 or die "Failed to add audio tracks to the playlist."; |
||||
|
||||
$server->succeed("$mpc play"); |
||||
|
||||
my @status = $server->execute("$mpc status"); |
||||
my @output = split(/\n/, $status[1]); |
||||
$output[1] =~ /.*playing.*/ or die "Audio track is not playing, as expected."; |
||||
|
||||
$server->succeed("$mpc stop"); |
||||
}; |
||||
|
||||
play_some_music($serverALSA); |
||||
play_some_music($serverPulseAudio); |
||||
|
||||
$client->succeed("$mpc -h serverALSA status"); |
||||
|
||||
# The PulseAudio-based server is configured not to accept external client connections |
||||
# to perform the following test: |
||||
$client->fail("$mpc -h serverPulseAudio status"); |
||||
''; |
||||
}) |
@ -0,0 +1,76 @@ |
||||
{ stdenv |
||||
, fetchFromGitHub |
||||
, libjack2 |
||||
, qt5 |
||||
, cmake |
||||
, libsndfile |
||||
, libsamplerate |
||||
, ladspaH |
||||
, fluidsynth |
||||
, alsaLib |
||||
, rtaudio |
||||
, lash |
||||
, dssi |
||||
, liblo |
||||
, pkgconfig |
||||
, gitAndTools |
||||
}: |
||||
|
||||
stdenv.mkDerivation rec { |
||||
name = "muse-sequencer-${version}"; |
||||
version = "3.0.2"; |
||||
|
||||
meta = with stdenv.lib; { |
||||
homepage = http://www.muse-sequencer.org; |
||||
description = "MIDI/Audio sequencer with recording and editing capabilities"; |
||||
longDescription = '' |
||||
MusE is a MIDI/Audio sequencer with recording and editing capabilities |
||||
written originally by Werner Schweer now developed and maintained |
||||
by the MusE development team. |
||||
|
||||
MusE aims to be a complete multitrack virtual studio for Linux, |
||||
it is published under the GNU General Public License. |
||||
''; |
||||
license = stdenv.lib.licenses.gpl2; |
||||
}; |
||||
|
||||
src = |
||||
fetchFromGitHub { |
||||
owner = "muse-sequencer"; |
||||
repo = "muse"; |
||||
rev = "02d9dc6abd757c3c1783fdd46dacd3c4ef2c0a6d"; |
||||
sha256 = "0pn0mcg79z3bhjwxbss3ylypdz3gg70q5d1ij3x8yw65ryxbqf51"; |
||||
}; |
||||
|
||||
|
||||
buildInputs = [ |
||||
libjack2 |
||||
qt5.qtsvg |
||||
qt5.qttools |
||||
cmake |
||||
libsndfile |
||||
libsamplerate |
||||
ladspaH |
||||
fluidsynth |
||||
alsaLib |
||||
rtaudio |
||||
lash |
||||
dssi |
||||
liblo |
||||
pkgconfig |
||||
gitAndTools.gitFull |
||||
]; |
||||
|
||||
sourceRoot = "source/muse3"; |
||||
|
||||
buildPhase = '' |
||||
cd .. |
||||
bash compile_muse.sh |
||||
''; |
||||
|
||||
installPhase = '' |
||||
mkdir $out |
||||
cd build |
||||
make install |
||||
''; |
||||
} |
@ -0,0 +1,90 @@ |
||||
{ stdenv |
||||
, fetchFromGitHub |
||||
, meson |
||||
, ninja |
||||
, pkgconfig |
||||
, libxml2 |
||||
, desktop-file-utils |
||||
, wrapGAppsHook |
||||
, gst_all_1 |
||||
, pulseaudio |
||||
, gtk3 |
||||
, glib |
||||
, glibmm |
||||
, gtkmm3 |
||||
, lilv |
||||
, lv2 |
||||
, serd |
||||
, sord |
||||
, sratom |
||||
, libbs2b |
||||
, boost |
||||
, calf |
||||
, zam-plugins |
||||
, rubberband |
||||
, mda_lv2 |
||||
}: |
||||
|
||||
let |
||||
lv2Plugins = [ |
||||
calf # limiter, compressor exciter, bass enhancer and others |
||||
mda_lv2 # loudness |
||||
]; |
||||
ladspaPlugins = [ |
||||
rubberband # pitch shifting |
||||
zam-plugins # maximizer |
||||
]; |
||||
in stdenv.mkDerivation rec { |
||||
name = "pulseeffects-${version}"; |
||||
version = "4.1.3"; |
||||
|
||||
src = fetchFromGitHub { |
||||
owner = "wwmm"; |
||||
repo = "pulseeffects"; |
||||
rev = "v${version}"; |
||||
sha256 = "1f89msg8hzaf1pa9w3gaifb88dm0ca2wd81jlz3vr98hm7kxd85k"; |
||||
}; |
||||
|
||||
nativeBuildInputs = [ |
||||
meson |
||||
ninja |
||||
pkgconfig |
||||
libxml2 |
||||
desktop-file-utils |
||||
wrapGAppsHook |
||||
]; |
||||
|
||||
buildInputs = [ |
||||
pulseaudio |
||||
glib |
||||
glibmm |
||||
gtk3 |
||||
gtkmm3 |
||||
gst_all_1.gstreamer |
||||
gst_all_1.gst-plugins-good |
||||
gst_all_1.gst-plugins-bad |
||||
lilv lv2 serd sord sratom |
||||
libbs2b |
||||
boost |
||||
]; |
||||
|
||||
postPatch = '' |
||||
chmod +x meson_post_install.py |
||||
patchShebangs meson_post_install.py |
||||
''; |
||||
|
||||
preFixup = '' |
||||
gappsWrapperArgs+=( |
||||
--set LV2_PATH "${stdenv.lib.makeSearchPath "lib/lv2" lv2Plugins}" |
||||
--set LADSPA_PATH "${stdenv.lib.makeSearchPath "lib/ladspa" ladspaPlugins}" |
||||
) |
||||
''; |
||||
|
||||
meta = with stdenv.lib; { |
||||
description = "Limiter, compressor, reverberation, equalizer and auto volume effects for Pulseaudio applications"; |
||||
homepage = https://github.com/wwmm/pulseeffects; |
||||
license = licenses.gpl3; |
||||
maintainers = with maintainers; [ jtojnar ]; |
||||
platforms = platforms.linux; |
||||
}; |
||||
} |
@ -0,0 +1,24 @@ |
||||
{ stdenv, rustPlatform , fetchFromGitHub, Security }: |
||||
rustPlatform.buildRustPackage rec { |
||||
name = "whitebox_tools-${version}"; |
||||
version = "0.9.0"; |
||||
|
||||
src = fetchFromGitHub { |
||||
owner = "jblindsay"; |
||||
repo = "whitebox-tools"; |
||||
rev = "6221cdf327be70f0ee4f2053b76bfa01c3f37caa"; |
||||
sha256 = "1423ga964mz7qkl88vkcm8qfprsksx04aq4sz9v5ghnmdzzvl89x"; |
||||
}; |
||||
|
||||
buildInputs = stdenv.lib.optional stdenv.isDarwin Security; |
||||
|
||||
cargoSha256 = "1gbgirng21ak0kl3fiyr6lxwzrjd5v79gcrbzf941nb8y8rlvz7k"; |
||||
|
||||
meta = with stdenv.lib; { |
||||
description = "An advanced geospatial data analysis platform"; |
||||
homepage = http://www.uoguelph.ca/~hydrogeo/WhiteboxTools/index.html; |
||||
license = licenses.mit; |
||||
maintainers = [ maintainers.mpickering ]; |
||||
platforms = platforms.all; |
||||
}; |
||||
} |
@ -0,0 +1,52 @@ |
||||
{ stdenv, lib, qtbase, qtsvg, makeWrapper, fetchurl, makeDesktopItem }: |
||||
stdenv.mkDerivation rec { |
||||
name = "write_stylus-${version}"; |
||||
version = "209"; |
||||
|
||||
desktopItem = makeDesktopItem { |
||||
name = "Write"; |
||||
exec = "Write"; |
||||
comment = "a word processor for hadwriting"; |
||||
desktopName = "Write"; |
||||
genericName = "Write"; |
||||
categories = "Office;Graphics"; |
||||
}; |
||||
|
||||
src = fetchurl { |
||||
url = "http://www.styluslabs.com/write/write${version}.tar.gz"; |
||||
sha256 = "1p6glp4vdpwl8hmhypayc4cvs3j9jfmjfhhrgqm2xkgl5bfbv2qd"; |
||||
}; |
||||
sourceRoot = "."; |
||||
|
||||
dontBuild = true; |
||||
|
||||
installPhase = '' |
||||
mkdir -p $out/bin |
||||
cp -R Write $out/ |
||||
# symlink the binary to bin/ |
||||
ln -s $out/Write/Write $out/bin/Write |
||||
|
||||
mkdir -p $out/share/applications |
||||
ln -s ${desktopItem}/share/applications/* $out/share/applications/ |
||||
''; |
||||
preFixup = let |
||||
libPath = lib.makeLibraryPath [ |
||||
qtbase # libQt5PrintSupport.so.5 |
||||
qtsvg # libQt5Svg.so.5 |
||||
stdenv.cc.cc.lib # libstdc++.so.6 |
||||
]; |
||||
in '' |
||||
patchelf \ |
||||
--set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \ |
||||
--set-rpath "${libPath}" \ |
||||
$out/Write/Write |
||||
''; |
||||
|
||||
meta = with stdenv.lib; { |
||||
homepage = http://www.styluslabs.com/; |
||||
description = "Write is a word processor for handwriting."; |
||||
platforms = platforms.linux; |
||||
license = stdenv.lib.licenses.unfree; |
||||
maintainers = with maintainers; [ oyren ]; |
||||
}; |
||||
} |
@ -0,0 +1,105 @@ |
||||
{ stdenv, fetchurl, writeScript, fetchFromGitHub |
||||
, libGL, libX11, libXext, python3, libXrandr, libXrender, libpulseaudio, libXcomposite |
||||
, enableGlfw ? false, glfw }: |
||||
|
||||
let |
||||
inherit (stdenv.lib) optional makeLibraryPath; |
||||
|
||||
version = "1.4.5"; |
||||
gladVersion = "0.1.24"; |
||||
# glad |
||||
# https://github.com/wacossusca34/glava/issues/46#issuecomment-397816520 |
||||
glad = fetchFromGitHub { |
||||
owner = "Dav1dde"; |
||||
repo = "glad"; |
||||
rev = "v${gladVersion}"; |
||||
sha256 = "0s2c9w064kqa5i07w8zmvgpg1pa3wj86l1nhgw7w56cjhq7cf8h8"; |
||||
}; |
||||
# gl.xml |
||||
gl = fetchurl { |
||||
url = https://raw.githubusercontent.com/KhronosGroup/OpenGL-Registry/a24f3f7a4c924fdbc666024f99c70e5b8e34c819/xml/gl.xml; |
||||
sha256 = "1mskxjmhb35m8qv255pibf633d8sn1w9rdsf0lj75bhlgy0zi5c7"; |
||||
}; |
||||
# EGL 1.5 |
||||
egl = fetchurl { |
||||
url = https://www.khronos.org/registry/EGL/api/KHR/khrplatform.h; |
||||
sha256 = "0p0vs4siiya05cvbqq7cw3ci2zvvlfh8kycgm9k9cwvmrkj08349"; |
||||
}; |
||||
|
||||
wrapperScript = writeScript "glava" '' |
||||
#!${stdenv.shell} |
||||
case "$1" in |
||||
--copy-config) |
||||
# The binary would symlink it, which won't work in Nix because the |
||||
# garbage collector will eventually remove the original files after |
||||
# updates |
||||
echo "Nix wrapper: Copying glava config to ~/.config/glava" |
||||
cp -r --no-preserve=all @out@/etc/xdg/glava ~/.config/glava |
||||
;; |
||||
*) |
||||
exec @out@/bin/.glava-unwrapped "$@" |
||||
esac |
||||
''; |
||||
in |
||||
stdenv.mkDerivation rec { |
||||
name = "glava-${version}"; |
||||
|
||||
src = fetchFromGitHub { |
||||
owner = "wacossusca34"; |
||||
repo = "glava"; |
||||
rev = "v${version}"; |
||||
sha256 = "1zfw8samrzxxbny709rcdz1z77cw1cd46wlfnf7my02kipmqn0nr"; |
||||
}; |
||||
|
||||
buildInputs = [ |
||||
libX11 |
||||
libXext |
||||
libXrandr |
||||
libXrender |
||||
libpulseaudio |
||||
libXcomposite |
||||
] ++ optional enableGlfw glfw; |
||||
|
||||
nativeBuildInputs = [ |
||||
python3 |
||||
]; |
||||
|
||||
patchPhase = '' |
||||
cp -r --no-preserve=all ${glad}/* glad |
||||
mkdir -p glad/include/KHR |
||||
|
||||
cp ${gl} glad/gl.xml |
||||
cp ${egl} glad/include/KHR/khrplatform.h |
||||
patchShebangs . |
||||
''; |
||||
|
||||
makeFlags = optional (!enableGlfw) "DISABLE_GLFW=1"; |
||||
|
||||
installFlags = [ |
||||
"DESTDIR=$(out)" |
||||
]; |
||||
|
||||
fixupPhase = '' |
||||
mkdir -p $out/bin |
||||
mv $out/usr/bin/glava $out/bin/.glava-unwrapped |
||||
rm -rf $out/usr |
||||
|
||||
patchelf $out/bin/.glava-unwrapped \ |
||||
--set-rpath "$(patchelf --print-rpath $out/bin/.glava-unwrapped):${makeLibraryPath [ libGL ]}" \ |
||||
|
||||
substitute ${wrapperScript} $out/bin/glava --subst-var out |
||||
chmod +x $out/bin/glava |
||||
''; |
||||
|
||||
meta = with stdenv.lib; { |
||||
description = '' |
||||
OpenGL audio spectrum visualizer |
||||
''; |
||||
homepage = https://github.com/wacossusca34/glava; |
||||
platforms = platforms.linux; |
||||
license = licenses.gpl3; |
||||
maintainers = with maintainers; [ |
||||
eadwu |
||||
]; |
||||
}; |
||||
} |
@ -0,0 +1,24 @@ |
||||
From 95c90f302c384f410dc92e64468ac7061b57fe2d Mon Sep 17 00:00:00 2001
|
||||
From: Michael Hoang <enzime@users.noreply.github.com>
|
||||
Date: Fri, 13 Jul 2018 19:03:09 +1000
|
||||
Subject: [PATCH] Add errno.h header which isn't always included automatically.
|
||||
|
||||
---
|
||||
termite.cc | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/termite.cc b/termite.cc
|
||||
index 160fe82..13e2572 100644
|
||||
--- a/termite.cc
|
||||
+++ b/termite.cc
|
||||
@@ -21,6 +21,7 @@
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
#include <cmath>
|
||||
+#include <errno.h>
|
||||
#include <functional>
|
||||
#include <limits>
|
||||
#include <map>
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,25 @@ |
||||
From 1b5a6934635c55472eb7949bd87ab3f45fa1b2f3 Mon Sep 17 00:00:00 2001
|
||||
From: Michael Hoang <enzime@users.noreply.github.com>
|
||||
Date: Fri, 13 Jul 2018 19:01:51 +1000
|
||||
Subject: [PATCH] Remove --as-needed flag from ld to fix compilation on macOS.
|
||||
|
||||
---
|
||||
Makefile | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Makefile b/Makefile
|
||||
index b115f42..ab301ba 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -29,7 +29,7 @@ ifeq (${CXX}, clang++)
|
||||
CXXFLAGS += -Wimplicit-fallthrough
|
||||
endif
|
||||
|
||||
-LDFLAGS := -s -Wl,--as-needed ${LDFLAGS}
|
||||
+LDFLAGS := -s -Wl ${LDFLAGS}
|
||||
LDLIBS := ${shell pkg-config --libs ${GTK} ${VTE}}
|
||||
|
||||
termite: termite.cc url_regex.hh util/clamp.hh util/maybe.hh util/memory.hh
|
||||
--
|
||||
2.17.1
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue