Merge remote-tracking branch 'prism/master'
This commit is contained in:
commit
4f28d9a306
|
@ -124,7 +124,7 @@ let
|
||||||
|
|
||||||
buildRule = tn: cn: rule:
|
buildRule = tn: cn: rule:
|
||||||
#target validation test:
|
#target validation test:
|
||||||
assert (elem rule.target ([ "ACCEPT" "REJECT" "DROP" "QUEUE" "LOG" "RETURN" ] ++ (attrNames ts."${tn}"))) || hasPrefix "REDIRECT" rule.target;
|
assert (elem rule.target ([ "ACCEPT" "REJECT" "DROP" "QUEUE" "LOG" "RETURN" ] ++ (attrNames ts."${tn}"))) || hasPrefix "REDIRECT" rule.target || hasPrefix "DNAT" rule.target;
|
||||||
|
|
||||||
#predicate validation test:
|
#predicate validation test:
|
||||||
#maybe use iptables-test
|
#maybe use iptables-test
|
||||||
|
|
|
@ -311,5 +311,8 @@ with config.krebs.lib;
|
||||||
pubkey = builtins.readFile ./ssh/shodan.rsa;
|
pubkey = builtins.readFile ./ssh/shodan.rsa;
|
||||||
pgp.pubkeys.default = builtins.readFile ./pgp/shodan.pgp;
|
pgp.pubkeys.default = builtins.readFile ./pgp/shodan.pgp;
|
||||||
};
|
};
|
||||||
|
fritz = {
|
||||||
|
pubkey = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCz34435NSXgj72YAOL4cIlRq/4yInKEyL9no+gymURoW5x1nkYpP0EK331e7UyQQSOdWOogRo6d7YHcFqNlYWv5xlYcHucIhgJwC4Zda1liVA+v7tSOJz2BjmFvOT3/qlcPS69f3zdLHZooz2C33uHX1FgGRXlxiA8dpqGnSr8o76QLZjuQkuDqr8reOspjO/RHCo2Moq0Xm5q9OgN1WLAZzupqt9A5lx567mRzYsRAr23pUxVN8T/tSCgDlPe4ktEjYX9CXLKfMyh9WuBVi+AuH4GFEWBT+AMpsHeF45w+w956x56mz0F5nYOQNK87gFr+Jr+mh2AF1ot2CxzrfTb fritz@scriptkiddiT540";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -119,7 +119,7 @@ let
|
||||||
|
|
||||||
to-server = { server-names, listen, locations, extraConfig, ssl, ... }: ''
|
to-server = { server-names, listen, locations, extraConfig, ssl, ... }: ''
|
||||||
server {
|
server {
|
||||||
server_name ${toString server-names};
|
server_name ${toString (unique server-names)};
|
||||||
${concatMapStringsSep "\n" (x: indent "listen ${x};") listen}
|
${concatMapStringsSep "\n" (x: indent "listen ${x};") listen}
|
||||||
${optionalString ssl.enable (indent ''
|
${optionalString ssl.enable (indent ''
|
||||||
listen 443 ssl;
|
listen 443 ssl;
|
||||||
|
|
|
@ -66,7 +66,52 @@ rec {
|
||||||
mv "$textPath" $out
|
mv "$textPath" $out
|
||||||
'';
|
'';
|
||||||
|
|
||||||
writeNixFromCabal = name: path: pkgs.runCommand name {} ''
|
writeHaskellBin =
|
||||||
${pkgs.cabal2nix}/bin/cabal2nix ${path} > $out
|
k:
|
||||||
|
let
|
||||||
|
k' = parseDrvName k;
|
||||||
|
name = k'.name;
|
||||||
|
version = if k'.version != "" then k'.version else "0";
|
||||||
|
in
|
||||||
|
{ build-depends ? ["base"] ++ depends
|
||||||
|
, depends ? []
|
||||||
|
, ghc-options ? ["-Wall" "-O3" "-threaded" "-rtsopts"]
|
||||||
|
, haskellPackages ? pkgs.haskellPackages
|
||||||
|
, license ? "WTFPL"
|
||||||
|
}:
|
||||||
|
main-text:
|
||||||
|
let
|
||||||
|
cabal-file = pkgs.writeText "${name}-${version}.cabal" ''
|
||||||
|
build-type: Simple
|
||||||
|
cabal-version: >= 1.2
|
||||||
|
name: ${name}
|
||||||
|
version: ${version}
|
||||||
|
|
||||||
|
executable ${name}
|
||||||
|
build-depends: ${concatStringsSep "," build-depends}
|
||||||
|
ghc-options: ${toString ghc-options}
|
||||||
|
main-is: ${main-file.name}
|
||||||
'';
|
'';
|
||||||
|
main-file = pkgs.writeText "${name}-${version}.hs" main-text;
|
||||||
|
in
|
||||||
|
haskellPackages.mkDerivation rec {
|
||||||
|
inherit license version;
|
||||||
|
executableHaskellDepends = attrVals build-depends haskellPackages;
|
||||||
|
isExecutable = true;
|
||||||
|
isLibrary = false;
|
||||||
|
pname = name;
|
||||||
|
src = pkgs.runCommand "${name}-${version}-src" {} ''
|
||||||
|
install -D ${cabal-file} $out/${cabal-file.name}
|
||||||
|
install -D ${main-file} $out/${main-file.name}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
writeNixFromCabal =
|
||||||
|
trace (toString [
|
||||||
|
"The function `writeNixFromCabal` has been deprecated in favour of"
|
||||||
|
"`writeHaskellBin'."
|
||||||
|
])
|
||||||
|
(name: path: pkgs.runCommand name {} ''
|
||||||
|
${pkgs.cabal2nix}/bin/cabal2nix ${path} > $out
|
||||||
|
'');
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,13 +36,13 @@ with config.krebs.lib;
|
||||||
|
|
||||||
ReaktorPlugins = callPackage ./Reaktor/plugins.nix {};
|
ReaktorPlugins = callPackage ./Reaktor/plugins.nix {};
|
||||||
|
|
||||||
buildbot = callPackage <nixpkgs/pkgs/development/tools/build-managers/buildbot> {
|
#buildbot = callPackage <nixpkgs/pkgs/development/tools/build-managers/buildbot> {
|
||||||
inherit (pkgs.pythonPackages) twisted jinja2;
|
# inherit (pkgs.pythonPackages) twisted jinja2;
|
||||||
dateutil = pkgs.pythonPackages.dateutil_1_5;
|
# dateutil = pkgs.pythonPackages.dateutil_1_5;
|
||||||
sqlalchemy_migrate_0_7 = pkgs.pythonPackages.sqlalchemy_migrate_func (pkgs.pythonPackages.sqlalchemy7.override {
|
# sqlalchemy_migrate_0_7 = pkgs.pythonPackages.sqlalchemy_migrate_func (pkgs.pythonPackages.sqlalchemy7.override {
|
||||||
doCheck = false;
|
# doCheck = false;
|
||||||
});
|
# });
|
||||||
};
|
#};
|
||||||
|
|
||||||
# XXX symlinkJoin changed arguments somewhere around nixpkgs d541e0d
|
# XXX symlinkJoin changed arguments somewhere around nixpkgs d541e0d
|
||||||
symlinkJoin = { name, paths, ... }@args: let
|
symlinkJoin = { name, paths, ... }@args: let
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
../2configs/elster.nix
|
../2configs/elster.nix
|
||||||
../2configs/steam.nix
|
../2configs/steam.nix
|
||||||
../2configs/wine.nix
|
../2configs/wine.nix
|
||||||
../2configs/texlive.nix
|
#../2configs/texlive.nix
|
||||||
../2configs/binary-caches.nix
|
../2configs/binary-caches.nix
|
||||||
#../2configs/ircd.nix
|
#../2configs/ircd.nix
|
||||||
../2configs/chromium-patched.nix
|
../2configs/chromium-patched.nix
|
||||||
|
@ -175,14 +175,14 @@
|
||||||
emulateWheel = true;
|
emulateWheel = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
#services.xserver = {
|
services.xserver = {
|
||||||
# videoDriver = "intel";
|
videoDriver = "intel";
|
||||||
# vaapiDrivers = [ pkgs.vaapiIntel ];
|
vaapiDrivers = [ pkgs.vaapiIntel ];
|
||||||
# deviceSection = ''
|
deviceSection = ''
|
||||||
# Option "AccelMethod" "sna"
|
Option "AccelMethod" "sna"
|
||||||
# BusID "PCI:0:2:0"
|
BusID "PCI:0:2:0"
|
||||||
# '';
|
'';
|
||||||
#};
|
};
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
acronym
|
acronym
|
||||||
|
@ -193,6 +193,7 @@
|
||||||
hashPassword
|
hashPassword
|
||||||
urban
|
urban
|
||||||
mk_sql_pair
|
mk_sql_pair
|
||||||
|
remmina
|
||||||
];
|
];
|
||||||
|
|
||||||
#TODO: fix this shit
|
#TODO: fix this shit
|
||||||
|
|
|
@ -3,8 +3,9 @@
|
||||||
let
|
let
|
||||||
ip = config.krebs.build.host.nets.internet.ip4.addr;
|
ip = config.krebs.build.host.nets.internet.ip4.addr;
|
||||||
|
|
||||||
inherit (import ../../4lib { inherit lib pkgs; })
|
inherit (import <stockholm/lass/2configs/websites/util.nix> {inherit lib pkgs;})
|
||||||
manageCerts;
|
manageCerts
|
||||||
|
;
|
||||||
|
|
||||||
in {
|
in {
|
||||||
imports = [
|
imports = [
|
||||||
|
@ -12,16 +13,19 @@ in {
|
||||||
../2configs/default.nix
|
../2configs/default.nix
|
||||||
../2configs/exim-smarthost.nix
|
../2configs/exim-smarthost.nix
|
||||||
../2configs/downloading.nix
|
../2configs/downloading.nix
|
||||||
../2configs/git.nix
|
|
||||||
../2configs/ts3.nix
|
../2configs/ts3.nix
|
||||||
../2configs/bitlbee.nix
|
../2configs/bitlbee.nix
|
||||||
../2configs/weechat.nix
|
../2configs/weechat.nix
|
||||||
../2configs/privoxy-retiolum.nix
|
../2configs/privoxy-retiolum.nix
|
||||||
../2configs/radio.nix
|
../2configs/radio.nix
|
||||||
{
|
|
||||||
#we need to use old sqlite for buildbot
|
|
||||||
imports = [
|
|
||||||
../2configs/buildbot-standalone.nix
|
../2configs/buildbot-standalone.nix
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
../2configs/git.nix
|
||||||
|
( manageCerts [ "cgit.lassul.us" ])
|
||||||
|
];
|
||||||
|
krebs.nginx.servers.cgit.server-names = [
|
||||||
|
"cgit.lassul.us"
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
|
@ -196,6 +200,16 @@ in {
|
||||||
{ predicate = "-p tcp --dport xmpp-server"; target = "ACCEPT"; }
|
{ predicate = "-p tcp --dport xmpp-server"; target = "ACCEPT"; }
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
../2configs/realwallpaper-server.nix
|
||||||
|
];
|
||||||
|
krebs.nginx.servers."lassul.us".locations = [
|
||||||
|
(lib.nameValuePair "/wallpaper.png" ''
|
||||||
|
alias /tmp/wallpaper.png;
|
||||||
|
'')
|
||||||
|
];
|
||||||
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
krebs.build.host = config.krebs.hosts.prism;
|
krebs.build.host = config.krebs.hosts.prism;
|
||||||
|
|
|
@ -63,5 +63,6 @@ in {
|
||||||
( createChromiumUser "wk" [ "video" "audio" ] [ pkgs.chromium ] )
|
( createChromiumUser "wk" [ "video" "audio" ] [ pkgs.chromium ] )
|
||||||
( createChromiumUser "fb" [ "video" "audio" ] [ pkgs.chromium ] )
|
( createChromiumUser "fb" [ "video" "audio" ] [ pkgs.chromium ] )
|
||||||
( createChromiumUser "gm" [ "video" "audio" ] [ pkgs.chromium ] )
|
( createChromiumUser "gm" [ "video" "audio" ] [ pkgs.chromium ] )
|
||||||
|
( createChromiumUser "com" [ "video" "audio" ] [ pkgs.chromium ] )
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,7 @@ with config.krebs.lib;
|
||||||
createHome = true;
|
createHome = true;
|
||||||
useDefaultShell = true;
|
useDefaultShell = true;
|
||||||
extraGroups = [
|
extraGroups = [
|
||||||
|
"fuse"
|
||||||
];
|
];
|
||||||
openssh.authorizedKeys.keys = [
|
openssh.authorizedKeys.keys = [
|
||||||
config.krebs.users.lass.pubkey
|
config.krebs.users.lass.pubkey
|
||||||
|
@ -55,8 +56,8 @@ with config.krebs.lib;
|
||||||
#secrets-common = "/home/lass/secrets/common";
|
#secrets-common = "/home/lass/secrets/common";
|
||||||
stockholm = "/home/lass/stockholm";
|
stockholm = "/home/lass/stockholm";
|
||||||
nixpkgs = {
|
nixpkgs = {
|
||||||
url = https://github.com/NixOS/nixpkgs;
|
url = https://github.com/lassulus/nixpkgs;
|
||||||
rev = "d541e0dc1c05f5514bf30f8039e687adddb45616";
|
rev = "f632f8edaf80ffa8bf0b8c9b9064cae3ccbe3894";
|
||||||
dev = "/home/lass/src/nixpkgs";
|
dev = "/home/lass/src/nixpkgs";
|
||||||
};
|
};
|
||||||
} // optionalAttrs config.krebs.build.host.secure {
|
} // optionalAttrs config.krebs.build.host.secure {
|
||||||
|
|
|
@ -26,6 +26,8 @@ with config.krebs.lib;
|
||||||
{ from = "steuer@aidsballs.de"; to = lass.mail; }
|
{ from = "steuer@aidsballs.de"; to = lass.mail; }
|
||||||
{ from = "lass@aidsballs.de"; to = lass.mail; }
|
{ from = "lass@aidsballs.de"; to = lass.mail; }
|
||||||
{ from = "wordpress@ubikmedia.de"; to = lass.mail; }
|
{ from = "wordpress@ubikmedia.de"; to = lass.mail; }
|
||||||
|
{ from = "finanzamt@lassul.us"; to = lass.mail; }
|
||||||
|
{ from = "dominik@apanowicz.de"; to = "dma@ubikmedia.eu"; }
|
||||||
];
|
];
|
||||||
system-aliases = [
|
system-aliases = [
|
||||||
{ from = "mailer-daemon"; to = "postmaster"; }
|
{ from = "mailer-daemon"; to = "postmaster"; }
|
||||||
|
|
|
@ -37,6 +37,8 @@ let
|
||||||
realwallpaper = {};
|
realwallpaper = {};
|
||||||
xmonad-stockholm = {};
|
xmonad-stockholm = {};
|
||||||
the_playlist = {};
|
the_playlist = {};
|
||||||
|
} // mapAttrs make-public-repo-silent {
|
||||||
|
the_playlist = {};
|
||||||
};
|
};
|
||||||
|
|
||||||
restricted-repos = mapAttrs make-restricted-repo (
|
restricted-repos = mapAttrs make-restricted-repo (
|
||||||
|
@ -64,6 +66,11 @@ let
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
make-public-repo-silent = name: { desc ? null, ... }: {
|
||||||
|
inherit name desc;
|
||||||
|
public = true;
|
||||||
|
};
|
||||||
|
|
||||||
make-restricted-repo = name: { collaborators ? [], desc ? null, ... }: {
|
make-restricted-repo = name: { collaborators ? [], desc ? null, ... }: {
|
||||||
inherit name collaborators desc;
|
inherit name collaborators desc;
|
||||||
public = false;
|
public = false;
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
{ config, pkgs, ... }:
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
with config.krebs.lib;
|
||||||
|
|
||||||
let
|
let
|
||||||
name = "radio";
|
name = "radio";
|
||||||
mainUser = config.users.extraUsers.mainUser;
|
mainUser = config.users.extraUsers.mainUser;
|
||||||
|
@ -7,6 +10,22 @@ let
|
||||||
admin-password = import <secrets/icecast-admin-pw>;
|
admin-password = import <secrets/icecast-admin-pw>;
|
||||||
source-password = import <secrets/icecast-source-pw>;
|
source-password = import <secrets/icecast-source-pw>;
|
||||||
|
|
||||||
|
add_random = pkgs.writeDashBin "add_random" ''
|
||||||
|
mpc add "$(mpc ls | shuf -n1)"
|
||||||
|
'';
|
||||||
|
|
||||||
|
skip_track = pkgs.writeDashBin "skip_track" ''
|
||||||
|
${add_random}/bin/add_random
|
||||||
|
echo skipping: "$(${print_current}/bin/print_current)"
|
||||||
|
${pkgs.mpc_cli}/bin/mpc -q next
|
||||||
|
'';
|
||||||
|
|
||||||
|
print_current = pkgs.writeDashBin "print_current" ''
|
||||||
|
echo "$(${pkgs.mpc_cli}/bin/mpc current -f %file%) \
|
||||||
|
$(${pkgs.mpc_cli}/bin/mpc current -f %file% \
|
||||||
|
| ${pkgs.gnused}/bin/sed 's@.*\(.\{11\}\)\.ogg@http://www.youtube.com/watch?v=\1@')"
|
||||||
|
'';
|
||||||
|
|
||||||
in {
|
in {
|
||||||
users.users = {
|
users.users = {
|
||||||
"${name}" = rec {
|
"${name}" = rec {
|
||||||
|
@ -28,6 +47,9 @@ in {
|
||||||
};
|
};
|
||||||
|
|
||||||
krebs.per-user.${name}.packages = with pkgs; [
|
krebs.per-user.${name}.packages = with pkgs; [
|
||||||
|
add_random
|
||||||
|
skip_track
|
||||||
|
print_current
|
||||||
ncmpcpp
|
ncmpcpp
|
||||||
mpc_cli
|
mpc_cli
|
||||||
tmux
|
tmux
|
||||||
|
@ -100,10 +122,6 @@ in {
|
||||||
autoAdd = pkgs.writeDash "autoAdd" ''
|
autoAdd = pkgs.writeDash "autoAdd" ''
|
||||||
LIMIT=$1 #in secconds
|
LIMIT=$1 #in secconds
|
||||||
|
|
||||||
addRandom () {
|
|
||||||
mpc add "$(mpc ls | shuf -n1)"
|
|
||||||
}
|
|
||||||
|
|
||||||
timeLeft () {
|
timeLeft () {
|
||||||
playlistDuration=$(mpc --format '%time%' playlist | awk -F ':' 'BEGIN{t=0} {t+=$1*60+$2} END{print t}')
|
playlistDuration=$(mpc --format '%time%' playlist | awk -F ':' 'BEGIN{t=0} {t+=$1*60+$2} END{print t}')
|
||||||
currentTime=$(mpc status | awk '/^\[playing\]/ { sub(/\/.+/,"",$3); split($3,a,/:/); print a[1]*60+a[2] }')
|
currentTime=$(mpc status | awk '/^\[playing\]/ { sub(/\/.+/,"",$3); split($3,a,/:/); print a[1]*60+a[2] }')
|
||||||
|
@ -111,7 +129,7 @@ in {
|
||||||
}
|
}
|
||||||
|
|
||||||
if test $(timeLeft) -le $LIMIT; then
|
if test $(timeLeft) -le $LIMIT; then
|
||||||
addRandom
|
${add_random}/bin/add_random
|
||||||
fi
|
fi
|
||||||
'';
|
'';
|
||||||
in {
|
in {
|
||||||
|
@ -130,4 +148,48 @@ in {
|
||||||
ExecStart = "${autoAdd} 100";
|
ExecStart = "${autoAdd} 100";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
krebs.Reaktor = {
|
||||||
|
enable = true;
|
||||||
|
nickname = "the_playlist|r";
|
||||||
|
channels = [ "#the_playlist" ];
|
||||||
|
extraEnviron = {
|
||||||
|
REAKTOR_HOST = "irc.freenode.org";
|
||||||
|
};
|
||||||
|
plugins = with pkgs.ReaktorPlugins; [
|
||||||
|
(buildSimpleReaktorPlugin "skip" {
|
||||||
|
script = "${skip_track}/bin/skip_track";
|
||||||
|
pattern = "^skip$";
|
||||||
|
})
|
||||||
|
(buildSimpleReaktorPlugin "current" {
|
||||||
|
script = "${print_current}/bin/print_current";
|
||||||
|
pattern = "^current$";
|
||||||
|
})
|
||||||
|
];
|
||||||
|
};
|
||||||
|
krebs.nginx.servers."lassul.us".locations = let
|
||||||
|
html = pkgs.writeText "index.html" ''
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>lassulus playlist</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div style="display:inline-block;margin:0px;padding:0px;overflow:hidden">
|
||||||
|
<iframe src="https://kiwiirc.com/client/irc.freenode.org/?nick=kiwi_test|?&theme=cli#the_playlist" frameborder="0" style="overflow:hidden;overflow-x:hidden;overflow-y:hidden;height:95%;width:100%;position:absolute;top:0px;left:0px;right:0px;bottom:0px" height="95%" width="100%"></iframe>
|
||||||
|
</div>
|
||||||
|
<div style="position:absolute;bottom:1px;display:inline-block;background-color:red;">
|
||||||
|
<audio controls autoplay="autoplay"><source src="http://lassul.us:8000/radio.ogg" type="audio/ogg">Your browser does not support the audio element.</audio>
|
||||||
|
</div>
|
||||||
|
<!-- page content -->
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
'';
|
||||||
|
in [
|
||||||
|
(nameValuePair "/the_playlist" ''
|
||||||
|
default_type "text/html";
|
||||||
|
alias ${html};
|
||||||
|
'')
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,10 @@
|
||||||
{ config, pkgs, lib, ... }:
|
{ config, pkgs, lib, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
inherit (config.krebs.lib)
|
inherit (import <stockholm/krebs/4lib> { config = {}; inherit lib; })
|
||||||
genid
|
genid
|
||||||
readFile
|
|
||||||
;
|
;
|
||||||
inherit (import ../../4lib { inherit lib pkgs; })
|
inherit (import <stockholm/lass/2configs/websites/util.nix> {inherit lib pkgs;})
|
||||||
manageCert
|
|
||||||
manageCerts
|
|
||||||
activateACME
|
|
||||||
ssl
|
ssl
|
||||||
servePage
|
servePage
|
||||||
serveOwncloud
|
serveOwncloud
|
||||||
|
@ -26,16 +22,17 @@ let
|
||||||
|
|
||||||
in {
|
in {
|
||||||
imports = [
|
imports = [
|
||||||
|
./sqlBackup.nix
|
||||||
(ssl [ "reich-gebaeudereinigung.de" ])
|
(ssl [ "reich-gebaeudereinigung.de" ])
|
||||||
(servePage [ "reich-gebaeudereinigung.de" ])
|
(servePage [ "reich-gebaeudereinigung.de" ])
|
||||||
|
|
||||||
( manageCerts [ "karlaskop.de" ])
|
(ssl [ "karlaskop.de" ])
|
||||||
(servePage [ "karlaskop.de" ])
|
(servePage [ "karlaskop.de" ])
|
||||||
|
|
||||||
(ssl [ "makeup.apanowicz.de" ])
|
(ssl [ "makeup.apanowicz.de" ])
|
||||||
(servePage [ "makeup.apanowicz.de" ])
|
(servePage [ "makeup.apanowicz.de" ])
|
||||||
|
|
||||||
( manageCerts [ "pixelpocket.de" ])
|
(ssl [ "pixelpocket.de" ])
|
||||||
(servePage [ "pixelpocket.de" ])
|
(servePage [ "pixelpocket.de" ])
|
||||||
|
|
||||||
(ssl [ "o.ubikmedia.de" ])
|
(ssl [ "o.ubikmedia.de" ])
|
||||||
|
@ -45,30 +42,10 @@ in {
|
||||||
(serveWordpress [ "ubikmedia.de" "*.ubikmedia.de" "apanowicz.de" "nirwanabluete.de" "aldonasiech.com" "360gradvideo.tv" "ubikmedia.eu" ])
|
(serveWordpress [ "ubikmedia.de" "*.ubikmedia.de" "apanowicz.de" "nirwanabluete.de" "aldonasiech.com" "360gradvideo.tv" "ubikmedia.eu" ])
|
||||||
];
|
];
|
||||||
|
|
||||||
services.mysql = {
|
lass.mysqlBackup.config.all.databases = [
|
||||||
enable = true;
|
|
||||||
package = pkgs.mariadb;
|
|
||||||
rootPassword = toString (<secrets/mysql_rootPassword>);
|
|
||||||
};
|
|
||||||
|
|
||||||
lass.mysqlBackup = {
|
|
||||||
enable = true;
|
|
||||||
config.domsen = {
|
|
||||||
password = toString (<secrets/mysql_rootPassword>);
|
|
||||||
databases = [
|
|
||||||
"ubikmedia_de"
|
"ubikmedia_de"
|
||||||
"o_ubikmedia_de"
|
"o_ubikmedia_de"
|
||||||
];
|
];
|
||||||
};
|
|
||||||
};
|
|
||||||
services.mysqlBackup = {
|
|
||||||
enable = true;
|
|
||||||
databases = [
|
|
||||||
"ubikmedia_de"
|
|
||||||
"o_ubikmedia_de"
|
|
||||||
];
|
|
||||||
location = "/bku/sql_dumps";
|
|
||||||
};
|
|
||||||
|
|
||||||
users.users.domsen = {
|
users.users.domsen = {
|
||||||
uid = genid "domsen";
|
uid = genid "domsen";
|
||||||
|
@ -79,9 +56,18 @@ in {
|
||||||
createHome = true;
|
createHome = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
services.phpfpm.phpOptions = ''
|
#services.phpfpm.phpOptions = ''
|
||||||
|
# extension=${pkgs.phpPackages.apcu}/lib/php/extensions/apcu.so
|
||||||
|
# sendmail_path = ${sendmail} -t
|
||||||
|
#'';
|
||||||
|
services.phpfpm.phpIni = pkgs.runCommand "php.ini" {
|
||||||
|
options = ''
|
||||||
extension=${pkgs.phpPackages.apcu}/lib/php/extensions/apcu.so
|
extension=${pkgs.phpPackages.apcu}/lib/php/extensions/apcu.so
|
||||||
sendmail_path = ${sendmail} -t
|
sendmail_path = ${sendmail} -t -i"
|
||||||
|
'';
|
||||||
|
} ''
|
||||||
|
cat ${pkgs.php}/etc/php-recommended.ini > $out
|
||||||
|
echo "$options" >> $out
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,57 +1,54 @@
|
||||||
{ config, pkgs, lib, ... }:
|
{ config, pkgs, lib, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
inherit (import ../../4lib { inherit lib pkgs; })
|
inherit (import <stockholm/krebs/4lib> { config = {}; inherit lib; })
|
||||||
manageCerts
|
genid
|
||||||
activateACME
|
head
|
||||||
|
nameValuePair
|
||||||
|
;
|
||||||
|
inherit (import <stockholm/lass/2configs/websites/util.nix> {inherit lib pkgs;})
|
||||||
ssl
|
ssl
|
||||||
servePage
|
servePage
|
||||||
serveWordpress;
|
serveWordpress
|
||||||
|
;
|
||||||
|
|
||||||
in {
|
in {
|
||||||
imports = [
|
imports = [
|
||||||
( manageCerts [ "biostase.de" "www.biostase.de" ])
|
./sqlBackup.nix
|
||||||
#( serveWordpress [ "biostase.de" "www.biostase.de" ])
|
(ssl [ "biostase.de" "www.biostase.de" ])
|
||||||
|
(serveWordpress [ "biostase.de" "www.biostase.de" ])
|
||||||
|
|
||||||
( manageCerts [ "radical-dreamers.de" ])
|
(ssl [ "radical-dreamers.de" "www.radical-dreamers.de" ])
|
||||||
( serveWordpress [ "radical-dreamers.de" ])
|
(serveWordpress [ "radical-dreamers.de" "www.radical-dreamers.de" ])
|
||||||
|
|
||||||
( manageCerts [ "gs-maubach.de" ])
|
(ssl [ "gs-maubach.de" "www.gs-maubach.de" ])
|
||||||
( serveWordpress [ "gs-maubach.de" ])
|
(serveWordpress [ "gs-maubach.de" "www.gs-maubach.de" ])
|
||||||
|
|
||||||
( manageCerts [ "spielwaren-kern.de" ])
|
(ssl [ "spielwaren-kern.de" "www.spielwaren-kern.de" ])
|
||||||
( serveWordpress [ "spielwaren-kern.de" ])
|
(serveWordpress [ "spielwaren-kern.de" "www.spielwaren-kern.de" ])
|
||||||
|
|
||||||
( manageCerts [ "familienpraxis-korntal.de" ])
|
(ssl [ "familienpraxis-korntal.de" "www.familienpraxis-korntal.de" ])
|
||||||
( servePage [ "familienpraxis-korntal.de" ])
|
(servePage [ "familienpraxis-korntal.de" "www.familienpraxis-korntal.de" ])
|
||||||
|
|
||||||
( manageCerts [ "ttf-kleinaspach.de" ])
|
(ssl [ "ttf-kleinaspach.de" "www.ttf-kleinaspach.de" ])
|
||||||
( serveWordpress [ "ttf-kleinaspach.de" ])
|
(serveWordpress [ "ttf-kleinaspach.de" "www.ttf-kleinaspach.de" ])
|
||||||
|
|
||||||
( ssl [ "eastuttgart.de" ])
|
(ssl [ "eastuttgart.de" "www.eastuttgart.de" ])
|
||||||
( serveWordpress [ "eastuttgart.de" ])
|
(serveWordpress [ "eastuttgart.de" "www.eastuttgart.de" ])
|
||||||
|
|
||||||
( ssl [ "habsys.de" "habsys.eu" ])
|
(ssl [ "habsys.de" "www.habsys.de" "habsys.eu" "www.habsys.eu" ])
|
||||||
( servePage [ "habsys.de" "habsys.eu" ])
|
(servePage [ "habsys.de" "www.habsys.de" "habsys.eu" "www.habsys.eu" ])
|
||||||
];
|
];
|
||||||
|
|
||||||
services.mysql = {
|
lass.mysqlBackup.config.all.databases = [
|
||||||
enable = true;
|
|
||||||
package = pkgs.mariadb;
|
|
||||||
rootPassword = toString (<secrets/mysql_rootPassword>);
|
|
||||||
};
|
|
||||||
|
|
||||||
lass.mysqlBackup = {
|
|
||||||
enable = true;
|
|
||||||
config.fritz = {
|
|
||||||
password = toString (<secrets/mysql_rootPassword>);
|
|
||||||
databases = [
|
|
||||||
"biostase_de"
|
"biostase_de"
|
||||||
"eastuttgart_de"
|
"eastuttgart_de"
|
||||||
"radical_dreamers_de"
|
"radical_dreamers_de"
|
||||||
"spielwaren_kern_de"
|
"spielwaren_kern_de"
|
||||||
"ttf_kleinaspach_de"
|
"ttf_kleinaspach_de"
|
||||||
];
|
];
|
||||||
};
|
|
||||||
};
|
users.users.root.openssh.authorizedKeys.keys = [
|
||||||
|
config.krebs.users.fritz.pubkey
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
28
lass/2configs/websites/sqlBackup.nix
Normal file
28
lass/2configs/websites/sqlBackup.nix
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
krebs.secret.files.mysql_rootPassword = {
|
||||||
|
path = "${config.services.mysql.dataDir}/mysql_rootPassword";
|
||||||
|
owner.name = "root";
|
||||||
|
source-path = toString <secrets> + "/mysql_rootPassword";
|
||||||
|
};
|
||||||
|
|
||||||
|
services.mysql = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.mariadb;
|
||||||
|
rootPassword = config.krebs.secret.files.mysql_rootPassword.path;
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.services.mysql = {
|
||||||
|
requires = [ "secret.service" ];
|
||||||
|
after = [ "secret.service" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
lass.mysqlBackup = {
|
||||||
|
enable = true;
|
||||||
|
config.all = {
|
||||||
|
password = toString (<secrets/mysql_rootPassword>);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
229
lass/2configs/websites/util.nix
Normal file
229
lass/2configs/websites/util.nix
Normal file
|
@ -0,0 +1,229 @@
|
||||||
|
{ lib, pkgs, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
rec {
|
||||||
|
|
||||||
|
manageCerts = domains:
|
||||||
|
let
|
||||||
|
domain = head domains;
|
||||||
|
in {
|
||||||
|
security.acme = {
|
||||||
|
certs."${domain}" = {
|
||||||
|
email = "lassulus@gmail.com";
|
||||||
|
webroot = "/var/lib/acme/challenges/${domain}";
|
||||||
|
plugins = [
|
||||||
|
"account_key.json"
|
||||||
|
"key.pem"
|
||||||
|
"fullchain.pem"
|
||||||
|
];
|
||||||
|
group = "nginx";
|
||||||
|
allowKeysForGroup = true;
|
||||||
|
extraDomains = genAttrs domains (_: null);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
krebs.nginx.servers."${domain}" = {
|
||||||
|
server-names = domains;
|
||||||
|
locations = [
|
||||||
|
(nameValuePair "/.well-known/acme-challenge" ''
|
||||||
|
root /var/lib/acme/challenges/${domain}/;
|
||||||
|
'')
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
ssl = domains:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
( manageCerts domains )
|
||||||
|
( activateACME (head domains) )
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
activateACME = domain:
|
||||||
|
{
|
||||||
|
krebs.nginx.servers.${domain} = {
|
||||||
|
ssl = {
|
||||||
|
enable = true;
|
||||||
|
certificate = "/var/lib/acme/${domain}/fullchain.pem";
|
||||||
|
certificate_key = "/var/lib/acme/${domain}/key.pem";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
servePage = domains:
|
||||||
|
let
|
||||||
|
domain = head domains;
|
||||||
|
in {
|
||||||
|
krebs.nginx.servers.${domain} = {
|
||||||
|
server-names = domains;
|
||||||
|
locations = [
|
||||||
|
(nameValuePair "/" ''
|
||||||
|
root /srv/http/${domain};
|
||||||
|
'')
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
serveOwncloud = domains:
|
||||||
|
let
|
||||||
|
domain = head domains;
|
||||||
|
in {
|
||||||
|
krebs.nginx.servers."${domain}" = {
|
||||||
|
server-names = domains;
|
||||||
|
extraConfig = ''
|
||||||
|
# Add headers to serve security related headers
|
||||||
|
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
|
||||||
|
add_header X-Content-Type-Options nosniff;
|
||||||
|
add_header X-Frame-Options "SAMEORIGIN";
|
||||||
|
add_header X-XSS-Protection "1; mode=block";
|
||||||
|
add_header X-Robots-Tag none;
|
||||||
|
|
||||||
|
# Path to the root of your installation
|
||||||
|
root /srv/http/${domain}/;
|
||||||
|
# set max upload size
|
||||||
|
client_max_body_size 10G;
|
||||||
|
fastcgi_buffers 64 4K;
|
||||||
|
|
||||||
|
# Disable gzip to avoid the removal of the ETag header
|
||||||
|
gzip off;
|
||||||
|
|
||||||
|
# Uncomment if your server is build with the ngx_pagespeed module
|
||||||
|
# This module is currently not supported.
|
||||||
|
#pagespeed off;
|
||||||
|
|
||||||
|
index index.php;
|
||||||
|
error_page 403 /core/templates/403.php;
|
||||||
|
error_page 404 /core/templates/404.php;
|
||||||
|
|
||||||
|
rewrite ^/.well-known/carddav /remote.php/carddav/ permanent;
|
||||||
|
rewrite ^/.well-known/caldav /remote.php/caldav/ permanent;
|
||||||
|
|
||||||
|
# The following 2 rules are only needed for the user_webfinger app.
|
||||||
|
# Uncomment it if you're planning to use this app.
|
||||||
|
rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
|
||||||
|
rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;
|
||||||
|
'';
|
||||||
|
locations = [
|
||||||
|
(nameValuePair "/robots.txt" ''
|
||||||
|
allow all;
|
||||||
|
log_not_found off;
|
||||||
|
access_log off;
|
||||||
|
'')
|
||||||
|
(nameValuePair "~ ^/(build|tests|config|lib|3rdparty|templates|data)/" ''
|
||||||
|
deny all;
|
||||||
|
'')
|
||||||
|
|
||||||
|
(nameValuePair "~ ^/(?:autotest|occ|issue|indie|db_|console)" ''
|
||||||
|
deny all;
|
||||||
|
'')
|
||||||
|
|
||||||
|
(nameValuePair "/" ''
|
||||||
|
rewrite ^/remote/(.*) /remote.php last;
|
||||||
|
rewrite ^(/core/doc/[^\/]+/)$ $1/index.html;
|
||||||
|
try_files $uri $uri/ =404;
|
||||||
|
'')
|
||||||
|
|
||||||
|
(nameValuePair "~ \.php(?:$|/)" ''
|
||||||
|
fastcgi_split_path_info ^(.+\.php)(/.+)$;
|
||||||
|
include ${pkgs.nginx}/conf/fastcgi_params;
|
||||||
|
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||||||
|
fastcgi_param PATH_INFO $fastcgi_path_info;
|
||||||
|
fastcgi_param HTTPS on;
|
||||||
|
fastcgi_param modHeadersAvailable true; #Avoid sending the security headers twice
|
||||||
|
fastcgi_pass unix:/srv/http/${domain}/phpfpm.pool;
|
||||||
|
fastcgi_intercept_errors on;
|
||||||
|
'')
|
||||||
|
|
||||||
|
# Adding the cache control header for js and css files
|
||||||
|
# Make sure it is BELOW the location ~ \.php(?:$|/) { block
|
||||||
|
(nameValuePair "~* \.(?:css|js)$" ''
|
||||||
|
add_header Cache-Control "public, max-age=7200";
|
||||||
|
# Add headers to serve security related headers
|
||||||
|
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
|
||||||
|
add_header X-Content-Type-Options nosniff;
|
||||||
|
add_header X-Frame-Options "SAMEORIGIN";
|
||||||
|
add_header X-XSS-Protection "1; mode=block";
|
||||||
|
add_header X-Robots-Tag none;
|
||||||
|
# Optional: Don't log access to assets
|
||||||
|
access_log off;
|
||||||
|
'')
|
||||||
|
|
||||||
|
# Optional: Don't log access to other assets
|
||||||
|
(nameValuePair "~* \.(?:jpg|jpeg|gif|bmp|ico|png|swf)$" ''
|
||||||
|
access_log off;
|
||||||
|
'')
|
||||||
|
];
|
||||||
|
};
|
||||||
|
services.phpfpm.poolConfigs."${domain}" = ''
|
||||||
|
listen = /srv/http/${domain}/phpfpm.pool
|
||||||
|
user = nginx
|
||||||
|
group = nginx
|
||||||
|
pm = dynamic
|
||||||
|
pm.max_children = 5
|
||||||
|
pm.start_servers = 2
|
||||||
|
pm.min_spare_servers = 1
|
||||||
|
pm.max_spare_servers = 3
|
||||||
|
listen.owner = nginx
|
||||||
|
listen.group = nginx
|
||||||
|
# errors to journal
|
||||||
|
php_admin_value[error_log] = 'stderr'
|
||||||
|
php_admin_flag[log_errors] = on
|
||||||
|
catch_workers_output = yes
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
serveWordpress = domains:
|
||||||
|
let
|
||||||
|
domain = head domains;
|
||||||
|
|
||||||
|
in {
|
||||||
|
krebs.nginx.servers."${domain}" = {
|
||||||
|
server-names = domains;
|
||||||
|
extraConfig = ''
|
||||||
|
root /srv/http/${domain}/;
|
||||||
|
index index.php;
|
||||||
|
access_log /tmp/nginx_acc.log;
|
||||||
|
error_log /tmp/nginx_err.log;
|
||||||
|
error_page 404 /404.html;
|
||||||
|
error_page 500 502 503 504 /50x.html;
|
||||||
|
'';
|
||||||
|
locations = [
|
||||||
|
(nameValuePair "/" ''
|
||||||
|
try_files $uri $uri/ /index.php?$args;
|
||||||
|
'')
|
||||||
|
(nameValuePair "~ \.php$" ''
|
||||||
|
fastcgi_pass unix:/srv/http/${domain}/phpfpm.pool;
|
||||||
|
include ${pkgs.nginx}/conf/fastcgi.conf;
|
||||||
|
'')
|
||||||
|
#(nameValuePair "~ /\\." ''
|
||||||
|
# deny all;
|
||||||
|
#'')
|
||||||
|
#Directives to send expires headers and turn off 404 error logging.
|
||||||
|
(nameValuePair "~* ^.+\.(xml|ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$" ''
|
||||||
|
access_log off;
|
||||||
|
log_not_found off;
|
||||||
|
expires max;
|
||||||
|
'')
|
||||||
|
];
|
||||||
|
};
|
||||||
|
services.phpfpm.poolConfigs."${domain}" = ''
|
||||||
|
listen = /srv/http/${domain}/phpfpm.pool
|
||||||
|
user = nginx
|
||||||
|
group = nginx
|
||||||
|
pm = dynamic
|
||||||
|
pm.max_children = 5
|
||||||
|
pm.start_servers = 2
|
||||||
|
pm.min_spare_servers = 1
|
||||||
|
pm.max_spare_servers = 3
|
||||||
|
listen.owner = nginx
|
||||||
|
listen.group = nginx
|
||||||
|
# errors to journal
|
||||||
|
php_admin_value[error_log] = 'stderr'
|
||||||
|
php_admin_flag[log_errors] = on
|
||||||
|
catch_workers_output = yes
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
|
@ -1,11 +1,13 @@
|
||||||
{ config, pkgs, lib, ... }:
|
{ config, pkgs, lib, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
inherit (config.krebs.lib) genid;
|
inherit (import <stockholm/krebs/4lib> { config = {}; inherit lib; })
|
||||||
inherit (import ../../4lib { inherit lib pkgs; })
|
genid
|
||||||
|
;
|
||||||
|
inherit (import <stockholm/lass/2configs/websites/util.nix> {inherit lib pkgs;})
|
||||||
ssl
|
ssl
|
||||||
servePage;
|
servePage
|
||||||
|
;
|
||||||
in {
|
in {
|
||||||
imports = [
|
imports = [
|
||||||
( ssl [ "wohnprojekt-rhh.de" ])
|
( ssl [ "wohnprojekt-rhh.de" ])
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{ lib, pkgs, ... }:
|
{ lib, ... }:
|
||||||
|
|
||||||
with lib;
|
with lib;
|
||||||
|
|
||||||
|
@ -7,225 +7,4 @@ rec {
|
||||||
getDefaultGateway = ip:
|
getDefaultGateway = ip:
|
||||||
concatStringsSep "." (take 3 (splitString "." ip) ++ ["1"]);
|
concatStringsSep "." (take 3 (splitString "." ip) ++ ["1"]);
|
||||||
|
|
||||||
manageCerts = domains:
|
|
||||||
let
|
|
||||||
domain = head domains;
|
|
||||||
in {
|
|
||||||
security.acme = {
|
|
||||||
certs."${domain}" = {
|
|
||||||
email = "lassulus@gmail.com";
|
|
||||||
webroot = "/var/lib/acme/challenges/${domain}";
|
|
||||||
plugins = [
|
|
||||||
"account_key.json"
|
|
||||||
"key.pem"
|
|
||||||
"fullchain.pem"
|
|
||||||
];
|
|
||||||
group = "nginx";
|
|
||||||
allowKeysForGroup = true;
|
|
||||||
extraDomains = genAttrs domains (_: null);
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
krebs.nginx.servers."${domain}" = {
|
|
||||||
locations = [
|
|
||||||
(nameValuePair "/.well-known/acme-challenge" ''
|
|
||||||
root /var/lib/acme/challenges/${domain}/;
|
|
||||||
'')
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
ssl = domains:
|
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
( manageCerts domains )
|
|
||||||
( activateACME (head domains) )
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
activateACME = domain:
|
|
||||||
{
|
|
||||||
krebs.nginx.servers."${domain}" = {
|
|
||||||
ssl = {
|
|
||||||
enable = true;
|
|
||||||
certificate = "/var/lib/acme/${domain}/fullchain.pem";
|
|
||||||
certificate_key = "/var/lib/acme/${domain}/key.pem";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
servePage = domains:
|
|
||||||
let
|
|
||||||
domain = head domains;
|
|
||||||
in {
|
|
||||||
krebs.nginx.servers."${domain}" = {
|
|
||||||
server-names = domains;
|
|
||||||
locations = [
|
|
||||||
(nameValuePair "/" ''
|
|
||||||
root /srv/http/${domain};
|
|
||||||
'')
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
serveOwncloud = domains:
|
|
||||||
let
|
|
||||||
domain = head domains;
|
|
||||||
in {
|
|
||||||
krebs.nginx.servers."${domain}" = {
|
|
||||||
server-names = domains;
|
|
||||||
extraConfig = ''
|
|
||||||
# Add headers to serve security related headers
|
|
||||||
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
|
|
||||||
add_header X-Content-Type-Options nosniff;
|
|
||||||
add_header X-Frame-Options "SAMEORIGIN";
|
|
||||||
add_header X-XSS-Protection "1; mode=block";
|
|
||||||
add_header X-Robots-Tag none;
|
|
||||||
|
|
||||||
# Path to the root of your installation
|
|
||||||
root /srv/http/${domain}/;
|
|
||||||
# set max upload size
|
|
||||||
client_max_body_size 10G;
|
|
||||||
fastcgi_buffers 64 4K;
|
|
||||||
|
|
||||||
# Disable gzip to avoid the removal of the ETag header
|
|
||||||
gzip off;
|
|
||||||
|
|
||||||
# Uncomment if your server is build with the ngx_pagespeed module
|
|
||||||
# This module is currently not supported.
|
|
||||||
#pagespeed off;
|
|
||||||
|
|
||||||
index index.php;
|
|
||||||
error_page 403 /core/templates/403.php;
|
|
||||||
error_page 404 /core/templates/404.php;
|
|
||||||
|
|
||||||
rewrite ^/.well-known/carddav /remote.php/carddav/ permanent;
|
|
||||||
rewrite ^/.well-known/caldav /remote.php/caldav/ permanent;
|
|
||||||
|
|
||||||
# The following 2 rules are only needed for the user_webfinger app.
|
|
||||||
# Uncomment it if you're planning to use this app.
|
|
||||||
rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
|
|
||||||
rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;
|
|
||||||
'';
|
|
||||||
locations = [
|
|
||||||
(nameValuePair "/robots.txt" ''
|
|
||||||
allow all;
|
|
||||||
log_not_found off;
|
|
||||||
access_log off;
|
|
||||||
'')
|
|
||||||
(nameValuePair "~ ^/(build|tests|config|lib|3rdparty|templates|data)/" ''
|
|
||||||
deny all;
|
|
||||||
'')
|
|
||||||
|
|
||||||
(nameValuePair "~ ^/(?:autotest|occ|issue|indie|db_|console)" ''
|
|
||||||
deny all;
|
|
||||||
'')
|
|
||||||
|
|
||||||
(nameValuePair "/" ''
|
|
||||||
rewrite ^/remote/(.*) /remote.php last;
|
|
||||||
rewrite ^(/core/doc/[^\/]+/)$ $1/index.html;
|
|
||||||
try_files $uri $uri/ =404;
|
|
||||||
'')
|
|
||||||
|
|
||||||
(nameValuePair "~ \.php(?:$|/)" ''
|
|
||||||
fastcgi_split_path_info ^(.+\.php)(/.+)$;
|
|
||||||
include ${pkgs.nginx}/conf/fastcgi_params;
|
|
||||||
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
|
||||||
fastcgi_param PATH_INFO $fastcgi_path_info;
|
|
||||||
fastcgi_param HTTPS on;
|
|
||||||
fastcgi_param modHeadersAvailable true; #Avoid sending the security headers twice
|
|
||||||
fastcgi_pass unix:/srv/http/${domain}/phpfpm.pool;
|
|
||||||
fastcgi_intercept_errors on;
|
|
||||||
'')
|
|
||||||
|
|
||||||
# Adding the cache control header for js and css files
|
|
||||||
# Make sure it is BELOW the location ~ \.php(?:$|/) { block
|
|
||||||
(nameValuePair "~* \.(?:css|js)$" ''
|
|
||||||
add_header Cache-Control "public, max-age=7200";
|
|
||||||
# Add headers to serve security related headers
|
|
||||||
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
|
|
||||||
add_header X-Content-Type-Options nosniff;
|
|
||||||
add_header X-Frame-Options "SAMEORIGIN";
|
|
||||||
add_header X-XSS-Protection "1; mode=block";
|
|
||||||
add_header X-Robots-Tag none;
|
|
||||||
# Optional: Don't log access to assets
|
|
||||||
access_log off;
|
|
||||||
'')
|
|
||||||
|
|
||||||
# Optional: Don't log access to other assets
|
|
||||||
(nameValuePair "~* \.(?:jpg|jpeg|gif|bmp|ico|png|swf)$" ''
|
|
||||||
access_log off;
|
|
||||||
'')
|
|
||||||
];
|
|
||||||
};
|
|
||||||
services.phpfpm.poolConfigs."${domain}" = ''
|
|
||||||
listen = /srv/http/${domain}/phpfpm.pool
|
|
||||||
user = nginx
|
|
||||||
group = nginx
|
|
||||||
pm = dynamic
|
|
||||||
pm.max_children = 5
|
|
||||||
pm.start_servers = 2
|
|
||||||
pm.min_spare_servers = 1
|
|
||||||
pm.max_spare_servers = 3
|
|
||||||
listen.owner = nginx
|
|
||||||
listen.group = nginx
|
|
||||||
# errors to journal
|
|
||||||
php_admin_value[error_log] = 'stderr'
|
|
||||||
php_admin_flag[log_errors] = on
|
|
||||||
catch_workers_output = yes
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
serveWordpress = domains:
|
|
||||||
let
|
|
||||||
domain = head domains;
|
|
||||||
|
|
||||||
in {
|
|
||||||
krebs.nginx.servers."${domain}" = {
|
|
||||||
server-names = domains;
|
|
||||||
extraConfig = ''
|
|
||||||
root /srv/http/${domain}/;
|
|
||||||
index index.php;
|
|
||||||
access_log /tmp/nginx_acc.log;
|
|
||||||
error_log /tmp/nginx_err.log;
|
|
||||||
error_page 404 /404.html;
|
|
||||||
error_page 500 502 503 504 /50x.html;
|
|
||||||
'';
|
|
||||||
locations = [
|
|
||||||
(nameValuePair "/" ''
|
|
||||||
try_files $uri $uri/ /index.php?$args;
|
|
||||||
'')
|
|
||||||
(nameValuePair "~ \.php$" ''
|
|
||||||
fastcgi_pass unix:/srv/http/${domain}/phpfpm.pool;
|
|
||||||
include ${pkgs.nginx}/conf/fastcgi.conf;
|
|
||||||
'')
|
|
||||||
#(nameValuePair "~ /\\." ''
|
|
||||||
# deny all;
|
|
||||||
#'')
|
|
||||||
#Directives to send expires headers and turn off 404 error logging.
|
|
||||||
(nameValuePair "~* ^.+\.(xml|ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$" ''
|
|
||||||
access_log off;
|
|
||||||
log_not_found off;
|
|
||||||
expires max;
|
|
||||||
'')
|
|
||||||
];
|
|
||||||
};
|
|
||||||
services.phpfpm.poolConfigs."${domain}" = ''
|
|
||||||
listen = /srv/http/${domain}/phpfpm.pool
|
|
||||||
user = nginx
|
|
||||||
group = nginx
|
|
||||||
pm = dynamic
|
|
||||||
pm.max_children = 5
|
|
||||||
pm.start_servers = 2
|
|
||||||
pm.min_spare_servers = 1
|
|
||||||
pm.max_spare_servers = 3
|
|
||||||
listen.owner = nginx
|
|
||||||
listen.group = nginx
|
|
||||||
# errors to journal
|
|
||||||
php_admin_value[error_log] = 'stderr'
|
|
||||||
php_admin_flag[log_errors] = on
|
|
||||||
catch_workers_output = yes
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -111,6 +111,13 @@ let
|
||||||
syn match String /"\([^\\"]\|\\.\)*"/
|
syn match String /"\([^\\"]\|\\.\)*"/
|
||||||
syn match Comment /\(^\|\s\)#.*/
|
syn match Comment /\(^\|\s\)#.*/
|
||||||
|
|
||||||
|
" Haskell comments
|
||||||
|
syn region Comment start=/\(^\|\s\){-#/ end=/#-}/
|
||||||
|
syn match Comment /\(^\|\s\)--.*/
|
||||||
|
|
||||||
|
" Vim comments
|
||||||
|
syn match Comment /\(^\|\s\)"[^"]*$/
|
||||||
|
|
||||||
let b:current_syntax = "nix"
|
let b:current_syntax = "nix"
|
||||||
''}
|
''}
|
||||||
|
|
||||||
|
|
27
tv/2configs/xserver/Xmodmap.nix
Normal file
27
tv/2configs/xserver/Xmodmap.nix
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
with config.krebs.lib;
|
||||||
|
|
||||||
|
pkgs.writeText "Xmodmap" ''
|
||||||
|
!keycode 66 = Caps_Lock
|
||||||
|
!remove Lock = Caps_Lock
|
||||||
|
clear Lock
|
||||||
|
|
||||||
|
! caps lock
|
||||||
|
keycode 66 = Mode_switch
|
||||||
|
|
||||||
|
keycode 13 = 4 dollar EuroSign cent
|
||||||
|
keycode 30 = u U udiaeresis Udiaeresis
|
||||||
|
keycode 32 = o O odiaeresis Odiaeresis
|
||||||
|
keycode 38 = a A adiaeresis Adiaeresis
|
||||||
|
keycode 39 = s S ssharp
|
||||||
|
|
||||||
|
keycode 33 = p P Greek_pi Greek_PI
|
||||||
|
keycode 46 = l L Greek_lambda Greek_LAMBDA
|
||||||
|
|
||||||
|
keycode 54 = c C cacute Cacute
|
||||||
|
|
||||||
|
! BULLET OPERATOR
|
||||||
|
keycode 17 = 8 asterisk U2219
|
||||||
|
keycode 27 = r R r U211D
|
||||||
|
''
|
|
@ -37,15 +37,21 @@ let
|
||||||
pkgs.ff
|
pkgs.ff
|
||||||
pkgs.gitAndTools.qgit
|
pkgs.gitAndTools.qgit
|
||||||
pkgs.mpv
|
pkgs.mpv
|
||||||
pkgs.slock
|
|
||||||
pkgs.sxiv
|
pkgs.sxiv
|
||||||
pkgs.xsel
|
pkgs.xsel
|
||||||
pkgs.zathura
|
pkgs.zathura
|
||||||
];
|
];
|
||||||
|
|
||||||
security.setuidPrograms = [
|
# TODO dedicated group, i.e. with a single user
|
||||||
"slock"
|
# TODO krebs.setuid.slock.path vs /var/setuid-wrappers
|
||||||
];
|
krebs.setuid.slock = {
|
||||||
|
filename = "${pkgs.slock}/bin/slock";
|
||||||
|
group = "wheel";
|
||||||
|
envp = {
|
||||||
|
DISPLAY = ":${toString config.services.xserver.display}";
|
||||||
|
USER = user.name;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
systemd.services.display-manager.enable = false;
|
systemd.services.display-manager.enable = false;
|
||||||
|
|
||||||
|
@ -56,8 +62,8 @@ let
|
||||||
requires = [ "xserver.service" ];
|
requires = [ "xserver.service" ];
|
||||||
environment = xmonad-environment;
|
environment = xmonad-environment;
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
ExecStart = "${xmonad-start}/bin/xmonad";
|
ExecStart = "${pkgs.xmonad-tv}/bin/xmonad-tv";
|
||||||
ExecStop = "${xmonad-stop}/bin/xmonad-stop";
|
ExecStop = "${pkgs.xmonad-tv}/bin/xmonad-tv --shutdown";
|
||||||
User = user.name;
|
User = user.name;
|
||||||
WorkingDirectory = user.home;
|
WorkingDirectory = user.home;
|
||||||
};
|
};
|
||||||
|
@ -73,13 +79,30 @@ let
|
||||||
environment = xserver-environment;
|
environment = xserver-environment;
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
ExecReload = need-reload "xserver.service";
|
ExecReload = need-reload "xserver.service";
|
||||||
ExecStart = "${xserver}/bin/xserver";
|
ExecStart = toString [
|
||||||
|
"${pkgs.xorg.xorgserver}/bin/X"
|
||||||
|
":${toString config.services.xserver.display}"
|
||||||
|
"vt${toString config.services.xserver.tty}"
|
||||||
|
"-config ${import ./xserver.conf.nix args}"
|
||||||
|
"-logfile /var/log/X.${toString config.services.xserver.display}.log"
|
||||||
|
"-nolisten tcp"
|
||||||
|
"-xkbdir ${pkgs.xkeyboard_config}/etc/X11/xkb"
|
||||||
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
xmonad-environment = {
|
xmonad-environment = {
|
||||||
DISPLAY = ":${toString config.services.xserver.display}";
|
DISPLAY = ":${toString config.services.xserver.display}";
|
||||||
|
|
||||||
|
XMONAD_STARTUP_HOOK = pkgs.writeDash "xmonad-startup-hook" ''
|
||||||
|
${pkgs.xorg.xhost}/bin/xhost +LOCAL: &
|
||||||
|
${pkgs.xorg.xmodmap}/bin/xmodmap ${import ./Xmodmap.nix args} &
|
||||||
|
${pkgs.xorg.xrdb}/bin/xrdb -merge ${import ./Xresources.nix args} &
|
||||||
|
${pkgs.xorg.xsetroot}/bin/xsetroot -solid '#1c1c1c' &
|
||||||
|
wait
|
||||||
|
'';
|
||||||
|
|
||||||
XMONAD_STATE = "/tmp/xmonad.state";
|
XMONAD_STATE = "/tmp/xmonad.state";
|
||||||
|
|
||||||
# XXX JSON is close enough :)
|
# XXX JSON is close enough :)
|
||||||
|
@ -96,34 +119,6 @@ let
|
||||||
]);
|
]);
|
||||||
};
|
};
|
||||||
|
|
||||||
xmonad-start = pkgs.writeScriptBin "xmonad" ''
|
|
||||||
#! ${pkgs.bash}/bin/bash
|
|
||||||
set -efu
|
|
||||||
export PATH; PATH=${makeSearchPath "bin" [
|
|
||||||
# TODO put paths into a Haskell module instead of PATH
|
|
||||||
pkgs.alsaUtils
|
|
||||||
pkgs.rxvt_unicode
|
|
||||||
]}:/var/setuid-wrappers
|
|
||||||
settle() {(
|
|
||||||
# Use PATH for a clean journal
|
|
||||||
command=''${1##*/}
|
|
||||||
PATH=''${1%/*}; export PATH
|
|
||||||
shift
|
|
||||||
until "$command" "$@"; do
|
|
||||||
${pkgs.coreutils}/bin/sleep 1
|
|
||||||
done
|
|
||||||
)&}
|
|
||||||
settle ${pkgs.xorg.xhost}/bin/xhost +LOCAL:
|
|
||||||
settle ${pkgs.xorg.xrdb}/bin/xrdb -merge ${import ./Xresources.nix args}
|
|
||||||
settle ${pkgs.xorg.xsetroot}/bin/xsetroot -solid '#1c1c1c'
|
|
||||||
exec ${pkgs.xmonad-tv}/bin/xmonad
|
|
||||||
'';
|
|
||||||
|
|
||||||
xmonad-stop = pkgs.writeScriptBin "xmonad-stop" ''
|
|
||||||
#! /bin/sh
|
|
||||||
exec ${pkgs.xmonad-tv}/bin/xmonad --shutdown
|
|
||||||
'';
|
|
||||||
|
|
||||||
xserver-environment = {
|
xserver-environment = {
|
||||||
XKB_BINDIR = "${pkgs.xorg.xkbcomp}/bin"; # Needed for the Xkb extension.
|
XKB_BINDIR = "${pkgs.xorg.xkbcomp}/bin"; # Needed for the Xkb extension.
|
||||||
XORG_DRI_DRIVER_PATH = "/run/opengl-driver/lib/dri"; # !!! Depends on the driver selected at runtime.
|
XORG_DRI_DRIVER_PATH = "/run/opengl-driver/lib/dri"; # !!! Depends on the driver selected at runtime.
|
||||||
|
@ -132,23 +127,9 @@ let
|
||||||
++ concatLists (catAttrs "libPath" config.services.xserver.drivers));
|
++ concatLists (catAttrs "libPath" config.services.xserver.drivers));
|
||||||
};
|
};
|
||||||
|
|
||||||
xserver = pkgs.writeScriptBin "xserver" ''
|
need-reload = s: toString [
|
||||||
#! /bin/sh
|
"${pkgs.writeDashBin "need-reload" ''echo "$*"''}/bin/need-reload"
|
||||||
set -efu
|
(shell.escape s)
|
||||||
exec ${pkgs.xorg.xorgserver}/bin/X \
|
];
|
||||||
:${toString config.services.xserver.display} \
|
|
||||||
vt${toString config.services.xserver.tty} \
|
|
||||||
-config ${import ./xserver.conf.nix args} \
|
|
||||||
-logfile /var/log/X.${toString config.services.xserver.display}.log \
|
|
||||||
-nolisten tcp \
|
|
||||||
-xkbdir ${pkgs.xkeyboard_config}/etc/X11/xkb \
|
|
||||||
'';
|
|
||||||
|
|
||||||
need-reload = s: let
|
|
||||||
pkg = pkgs.writeScriptBin "need-reload" ''
|
|
||||||
#! /bin/sh
|
|
||||||
echo "$*"
|
|
||||||
'';
|
|
||||||
in "${pkg}/bin/need-reload ${s}";
|
|
||||||
|
|
||||||
in out
|
in out
|
||||||
|
|
|
@ -18,8 +18,6 @@
|
||||||
};
|
};
|
||||||
ff = pkgs.callPackage ./ff {};
|
ff = pkgs.callPackage ./ff {};
|
||||||
viljetic-pages = pkgs.callPackage ./viljetic-pages {};
|
viljetic-pages = pkgs.callPackage ./viljetic-pages {};
|
||||||
xmonad-tv =
|
xmonad-tv = import ./xmonad-tv.nix { inherit pkgs; };
|
||||||
let src = pkgs.writeNixFromCabal "xmonad-tv.nix" ./xmonad-tv; in
|
|
||||||
pkgs.haskellPackages.callPackage src {};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,14 @@
|
||||||
|
{ pkgs, ... }:
|
||||||
|
pkgs.writeHaskellBin "xmonad-tv" {
|
||||||
|
depends = [
|
||||||
|
"containers"
|
||||||
|
"unix"
|
||||||
|
"X11"
|
||||||
|
"xmonad"
|
||||||
|
"xmonad-contrib"
|
||||||
|
"xmonad-stockholm"
|
||||||
|
];
|
||||||
|
} ''
|
||||||
{-# LANGUAGE DeriveDataTypeable #-} -- for XS
|
{-# LANGUAGE DeriveDataTypeable #-} -- for XS
|
||||||
{-# LANGUAGE FlexibleContexts #-} -- for xmonad'
|
{-# LANGUAGE FlexibleContexts #-} -- for xmonad'
|
||||||
{-# LANGUAGE LambdaCase #-}
|
{-# LANGUAGE LambdaCase #-}
|
||||||
|
@ -40,11 +51,11 @@ import XMonad.Stockholm.Rhombus
|
||||||
import XMonad.Stockholm.Shutdown
|
import XMonad.Stockholm.Shutdown
|
||||||
|
|
||||||
|
|
||||||
myTerm :: String
|
amixerPath :: FilePath
|
||||||
myTerm = "urxvtc"
|
amixerPath = "${pkgs.alsaUtils}/bin/amixer"
|
||||||
|
|
||||||
myRootTerm :: String
|
urxvtcPath :: FilePath
|
||||||
myRootTerm = "urxvtc -name root-urxvt -e su -"
|
urxvtcPath = "${pkgs.rxvt_unicode}/bin/urxvtc"
|
||||||
|
|
||||||
myFont :: String
|
myFont :: String
|
||||||
myFont = "-schumacher-*-*-*-*-*-*-*-*-*-*-*-iso10646-*"
|
myFont = "-schumacher-*-*-*-*-*-*-*-*-*-*-*-iso10646-*"
|
||||||
|
@ -64,7 +75,7 @@ mainNoArgs = do
|
||||||
-- $ withUrgencyHookC BorderUrgencyHook { urgencyBorderColor = "magenta" } urgencyConfig { suppressWhen = Never }
|
-- $ withUrgencyHookC BorderUrgencyHook { urgencyBorderColor = "magenta" } urgencyConfig { suppressWhen = Never }
|
||||||
$ withUrgencyHook (SpawnUrgencyHook "echo emit Urgency ")
|
$ withUrgencyHook (SpawnUrgencyHook "echo emit Urgency ")
|
||||||
$ def
|
$ def
|
||||||
{ terminal = myTerm
|
{ terminal = urxvtcPath
|
||||||
, modMask = mod4Mask
|
, modMask = mod4Mask
|
||||||
, keys = myKeys
|
, keys = myKeys
|
||||||
, workspaces = workspaces0
|
, workspaces = workspaces0
|
||||||
|
@ -72,7 +83,9 @@ mainNoArgs = do
|
||||||
-- , handleEventHook = myHandleEventHooks <+> handleTimerEvent
|
-- , handleEventHook = myHandleEventHooks <+> handleTimerEvent
|
||||||
--, handleEventHook = handleTimerEvent
|
--, handleEventHook = handleTimerEvent
|
||||||
, manageHook = placeHook (smart (1,0)) <+> floatNextHook
|
, manageHook = placeHook (smart (1,0)) <+> floatNextHook
|
||||||
, startupHook = spawn "echo emit XMonadStartup"
|
, startupHook = do
|
||||||
|
path <- liftIO (getEnv "XMONAD_STARTUP_HOOK")
|
||||||
|
forkFile path [] Nothing
|
||||||
, normalBorderColor = "#1c1c1c"
|
, normalBorderColor = "#1c1c1c"
|
||||||
, focusedBorderColor = "#f000b0"
|
, focusedBorderColor = "#f000b0"
|
||||||
, handleEventHook = handleShutdownEvent
|
, handleEventHook = handleShutdownEvent
|
||||||
|
@ -110,24 +123,30 @@ displaySomeException :: SomeException -> String
|
||||||
displaySomeException = displayException
|
displaySomeException = displayException
|
||||||
|
|
||||||
|
|
||||||
|
forkFile :: FilePath -> [String] -> Maybe [(String, String)] -> X ()
|
||||||
|
forkFile path args env =
|
||||||
|
xfork (executeFile path False args env) >> return ()
|
||||||
|
|
||||||
|
spawnRootTerm :: X ()
|
||||||
|
spawnRootTerm =
|
||||||
|
forkFile
|
||||||
|
urxvtcPath
|
||||||
|
["-name", "root-urxvt", "-e", "/var/setuid-wrappers/su", "-"]
|
||||||
|
Nothing
|
||||||
|
|
||||||
spawnTermAt :: String -> X ()
|
spawnTermAt :: String -> X ()
|
||||||
--spawnTermAt _ = floatNext True >> spawn myTerm
|
|
||||||
--spawnTermAt "ff" = floatNext True >> spawn myTerm
|
|
||||||
--spawnTermAt _ = spawn myTerm
|
|
||||||
spawnTermAt ws = do
|
spawnTermAt ws = do
|
||||||
env <- liftIO getEnvironment
|
env <- liftIO getEnvironment
|
||||||
let env' = ("XMONAD_SPAWN_WORKSPACE", ws) : env
|
let env' = ("XMONAD_SPAWN_WORKSPACE", ws) : env
|
||||||
xfork (executeFile "urxvtc" True [] (Just env')) >> return ()
|
forkFile urxvtcPath [] (Just env')
|
||||||
|
|
||||||
myKeys :: XConfig Layout -> Map (KeyMask, KeySym) (X ())
|
myKeys :: XConfig Layout -> Map (KeyMask, KeySym) (X ())
|
||||||
myKeys conf = Map.fromList $
|
myKeys conf = Map.fromList $
|
||||||
[ ((_4 , xK_Escape ), spawn "/var/setuid-wrappers/slock")
|
[ ((_4 , xK_Escape ), forkFile "/var/setuid-wrappers/slock" [] Nothing)
|
||||||
, ((_4S , xK_c ), kill)
|
, ((_4S , xK_c ), kill)
|
||||||
|
|
||||||
, ((_4 , xK_x ), chooseAction spawnTermAt)
|
, ((_4 , xK_x ), chooseAction spawnTermAt)
|
||||||
, ((_4C , xK_x ), spawn myRootTerm)
|
, ((_4C , xK_x ), spawnRootTerm)
|
||||||
--, ((_4M , xK_x ), spawn "xterm")
|
|
||||||
--, ((_4M , xK_x ), mySpawn "xterm")
|
|
||||||
|
|
||||||
--, ((_4 , xK_F1 ), withFocused jojo)
|
--, ((_4 , xK_F1 ), withFocused jojo)
|
||||||
--, ((_4 , xK_F1 ), printAllGeometries)
|
--, ((_4 , xK_F1 ), printAllGeometries)
|
||||||
|
@ -187,9 +206,9 @@ myKeys conf = Map.fromList $
|
||||||
--, (_4 , xK_v ) & \k -> (k, gridselectWorkspace wsGSConfig { gs_navigate = makeGSNav k } W.view)
|
--, (_4 , xK_v ) & \k -> (k, gridselectWorkspace wsGSConfig { gs_navigate = makeGSNav k } W.view)
|
||||||
--, (_4S , xK_v ) & \k -> (k, gridselectWorkspace wsGSConfig { gs_navigate = makeGSNav k } W.shift)
|
--, (_4S , xK_v ) & \k -> (k, gridselectWorkspace wsGSConfig { gs_navigate = makeGSNav k } W.shift)
|
||||||
--, (_4 , xK_b ) & \k -> (k, goToSelected wGSConfig { gs_navigate = makeGSNav k })
|
--, (_4 , xK_b ) & \k -> (k, goToSelected wGSConfig { gs_navigate = makeGSNav k })
|
||||||
, ((noModMask, xF86XK_AudioLowerVolume), spawn "amixer sset Master 5%-")
|
, ((noModMask, xF86XK_AudioLowerVolume), amixer ["sset", "Master", "5%+"])
|
||||||
, ((noModMask, xF86XK_AudioRaiseVolume), spawn "amixer sset Master 5%+")
|
, ((noModMask, xF86XK_AudioRaiseVolume), amixer ["sset", "Master", "5%-"])
|
||||||
, ((noModMask, xF86XK_AudioMute), spawn "amixer sset Master toggle")
|
, ((noModMask, xF86XK_AudioMute), amixer ["sset", "Master", "toggle"])
|
||||||
]
|
]
|
||||||
where
|
where
|
||||||
_4 = mod4Mask
|
_4 = mod4Mask
|
||||||
|
@ -202,6 +221,8 @@ myKeys conf = Map.fromList $
|
||||||
_4CM = _4 .|. _C .|. _M
|
_4CM = _4 .|. _C .|. _M
|
||||||
_4SM = _4 .|. _S .|. _M
|
_4SM = _4 .|. _S .|. _M
|
||||||
|
|
||||||
|
amixer args = forkFile amixerPath args Nothing
|
||||||
|
|
||||||
|
|
||||||
pagerConfig :: PagerConfig
|
pagerConfig :: PagerConfig
|
||||||
pagerConfig = def
|
pagerConfig = def
|
||||||
|
@ -278,3 +299,4 @@ wGSConfig = def
|
||||||
allWorkspaceNames :: W.StackSet i l a sid sd -> X [i]
|
allWorkspaceNames :: W.StackSet i l a sid sd -> X [i]
|
||||||
allWorkspaceNames ws =
|
allWorkspaceNames ws =
|
||||||
return $ map W.tag (W.hidden ws) ++ [W.tag $ W.workspace $ W.current ws]
|
return $ map W.tag (W.hidden ws) ++ [W.tag $ W.workspace $ W.current ws]
|
||||||
|
''
|
1
tv/5pkgs/xmonad-tv/.gitignore
vendored
1
tv/5pkgs/xmonad-tv/.gitignore
vendored
|
@ -1 +0,0 @@
|
||||||
/shell.nix
|
|
|
@ -1,6 +0,0 @@
|
||||||
.PHONY: ghci
|
|
||||||
ghci: shell.nix
|
|
||||||
nix-shell --command 'exec ghci -Wall'
|
|
||||||
|
|
||||||
shell.nix: xmonad.cabal
|
|
||||||
cabal2nix --shell . > $@
|
|
|
@ -1,18 +0,0 @@
|
||||||
Author: tv
|
|
||||||
Build-Type: Simple
|
|
||||||
Cabal-Version: >= 1.2
|
|
||||||
License: MIT
|
|
||||||
Name: xmonad-tv
|
|
||||||
Version: 0
|
|
||||||
|
|
||||||
Executable xmonad
|
|
||||||
Build-Depends:
|
|
||||||
base,
|
|
||||||
containers,
|
|
||||||
unix,
|
|
||||||
X11,
|
|
||||||
xmonad,
|
|
||||||
xmonad-contrib,
|
|
||||||
xmonad-stockholm
|
|
||||||
GHC-Options: -Wall -O3 -threaded -rtsopts
|
|
||||||
Main-Is: Main.hs
|
|
Loading…
Reference in New Issue
Block a user