summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--krebs/3modules/iptables.nix2
-rw-r--r--krebs/3modules/lass/default.nix3
-rw-r--r--krebs/3modules/nginx.nix2
-rw-r--r--krebs/5pkgs/builders.nix51
-rw-r--r--krebs/5pkgs/default.nix14
-rw-r--r--lass/1systems/mors.nix19
-rw-r--r--lass/1systems/prism.nix24
-rw-r--r--lass/2configs/browsers.nix1
-rw-r--r--lass/2configs/default.nix5
-rw-r--r--lass/2configs/exim-smarthost.nix2
-rw-r--r--lass/2configs/git.nix7
-rw-r--r--lass/2configs/radio.nix72
-rw-r--r--lass/2configs/websites/domsen.nix76
-rw-r--r--lass/2configs/websites/fritz.nix75
-rw-r--r--lass/2configs/websites/sqlBackup.nix28
-rw-r--r--lass/2configs/websites/util.nix229
-rw-r--r--lass/2configs/websites/wohnprojekt-rhh.de.nix10
-rw-r--r--lass/4lib/default.nix223
-rw-r--r--tv/2configs/vim.nix7
-rw-r--r--tv/2configs/xserver/Xmodmap.nix27
-rw-r--r--tv/2configs/xserver/default.nix87
-rw-r--r--tv/5pkgs/default.nix4
-rw-r--r--tv/5pkgs/xmonad-tv.nix (renamed from tv/5pkgs/xmonad-tv/Main.hs)56
-rw-r--r--tv/5pkgs/xmonad-tv/.gitignore1
-rw-r--r--tv/5pkgs/xmonad-tv/Makefile6
-rw-r--r--tv/5pkgs/xmonad-tv/xmonad.cabal18
26 files changed, 608 insertions, 441 deletions
diff --git a/krebs/3modules/iptables.nix b/krebs/3modules/iptables.nix
index 4b99873a1..bb06a9388 100644
--- a/krebs/3modules/iptables.nix
+++ b/krebs/3modules/iptables.nix
@@ -124,7 +124,7 @@ let
buildRule = tn: cn: rule:
#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:
#maybe use iptables-test
diff --git a/krebs/3modules/lass/default.nix b/krebs/3modules/lass/default.nix
index 03e067f35..65da85ac4 100644
--- a/krebs/3modules/lass/default.nix
+++ b/krebs/3modules/lass/default.nix
@@ -311,5 +311,8 @@ with config.krebs.lib;
pubkey = builtins.readFile ./ssh/shodan.rsa;
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";
+ };
};
}
diff --git a/krebs/3modules/nginx.nix b/krebs/3modules/nginx.nix
index 6af93a570..fc7fcca6f 100644
--- a/krebs/3modules/nginx.nix
+++ b/krebs/3modules/nginx.nix
@@ -119,7 +119,7 @@ let
to-server = { server-names, listen, locations, extraConfig, ssl, ... }: ''
server {
- server_name ${toString server-names};
+ server_name ${toString (unique server-names)};
${concatMapStringsSep "\n" (x: indent "listen ${x};") listen}
${optionalString ssl.enable (indent ''
listen 443 ssl;
diff --git a/krebs/5pkgs/builders.nix b/krebs/5pkgs/builders.nix
index 19169b186..39b91d144 100644
--- a/krebs/5pkgs/builders.nix
+++ b/krebs/5pkgs/builders.nix
@@ -66,7 +66,52 @@ rec {
mv "$textPath" $out
'';
- writeNixFromCabal = name: path: pkgs.runCommand name {} ''
- ${pkgs.cabal2nix}/bin/cabal2nix ${path} > $out
- '';
+ writeHaskellBin =
+ 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
+ '');
}
diff --git a/krebs/5pkgs/default.nix b/krebs/5pkgs/default.nix
index c96e71538..53fc4de44 100644
--- a/krebs/5pkgs/default.nix
+++ b/krebs/5pkgs/default.nix
@@ -36,13 +36,13 @@ with config.krebs.lib;
ReaktorPlugins = callPackage ./Reaktor/plugins.nix {};
- buildbot = callPackage <nixpkgs/pkgs/development/tools/build-managers/buildbot> {
- inherit (pkgs.pythonPackages) twisted jinja2;
- dateutil = pkgs.pythonPackages.dateutil_1_5;
- sqlalchemy_migrate_0_7 = pkgs.pythonPackages.sqlalchemy_migrate_func (pkgs.pythonPackages.sqlalchemy7.override {
- doCheck = false;
- });
- };
+ #buildbot = callPackage <nixpkgs/pkgs/development/tools/build-managers/buildbot> {
+ # inherit (pkgs.pythonPackages) twisted jinja2;
+ # dateutil = pkgs.pythonPackages.dateutil_1_5;
+ # sqlalchemy_migrate_0_7 = pkgs.pythonPackages.sqlalchemy_migrate_func (pkgs.pythonPackages.sqlalchemy7.override {
+ # doCheck = false;
+ # });
+ #};
# XXX symlinkJoin changed arguments somewhere around nixpkgs d541e0d
symlinkJoin = { name, paths, ... }@args: let
diff --git a/lass/1systems/mors.nix b/lass/1systems/mors.nix
index e2ab562fa..a7a1fd253 100644
--- a/lass/1systems/mors.nix
+++ b/lass/1systems/mors.nix
@@ -14,7 +14,7 @@
../2configs/elster.nix
../2configs/steam.nix
../2configs/wine.nix
- ../2configs/texlive.nix
+ #../2configs/texlive.nix
../2configs/binary-caches.nix
#../2configs/ircd.nix
../2configs/chromium-patched.nix
@@ -175,14 +175,14 @@
emulateWheel = true;
};
- #services.xserver = {
- # videoDriver = "intel";
- # vaapiDrivers = [ pkgs.vaapiIntel ];
- # deviceSection = ''
- # Option "AccelMethod" "sna"
- # BusID "PCI:0:2:0"
- # '';
- #};
+ services.xserver = {
+ videoDriver = "intel";
+ vaapiDrivers = [ pkgs.vaapiIntel ];
+ deviceSection = ''
+ Option "AccelMethod" "sna"
+ BusID "PCI:0:2:0"
+ '';
+ };
environment.systemPackages = with pkgs; [
acronym
@@ -193,6 +193,7 @@
hashPassword
urban
mk_sql_pair
+ remmina
];
#TODO: fix this shit
diff --git a/lass/1systems/prism.nix b/lass/1systems/prism.nix
index aa524720d..6ed80ac39 100644
--- a/lass/1systems/prism.nix
+++ b/lass/1systems/prism.nix
@@ -3,8 +3,9 @@
let
ip = config.krebs.build.host.nets.internet.ip4.addr;
- inherit (import ../../4lib { inherit lib pkgs; })
- manageCerts;
+ inherit (import <stockholm/lass/2configs/websites/util.nix> {inherit lib pkgs;})
+ manageCerts
+ ;
in {
imports = [
@@ -12,16 +13,19 @@ in {
../2configs/default.nix
../2configs/exim-smarthost.nix
../2configs/downloading.nix
- ../2configs/git.nix
../2configs/ts3.nix
../2configs/bitlbee.nix
../2configs/weechat.nix
../2configs/privoxy-retiolum.nix
../2configs/radio.nix
+ ../2configs/buildbot-standalone.nix
{
- #we need to use old sqlite for buildbot
imports = [
- ../2configs/buildbot-standalone.nix
+ ../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"; }
];
}
+ {
+ 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;
diff --git a/lass/2configs/browsers.nix b/lass/2configs/browsers.nix
index e230fff43..ea79053ce 100644
--- a/lass/2configs/browsers.nix
+++ b/lass/2configs/browsers.nix
@@ -63,5 +63,6 @@ in {
( createChromiumUser "wk" [ "video" "audio" ] [ pkgs.chromium ] )
( createChromiumUser "fb" [ "video" "audio" ] [ pkgs.chromium ] )
( createChromiumUser "gm" [ "video" "audio" ] [ pkgs.chromium ] )
+ ( createChromiumUser "com" [ "video" "audio" ] [ pkgs.chromium ] )
];
}
diff --git a/lass/2configs/default.nix b/lass/2configs/default.nix
index ee320b9c9..1c06acf38 100644
--- a/lass/2configs/default.nix
+++ b/lass/2configs/default.nix
@@ -30,6 +30,7 @@ with config.krebs.lib;
createHome = true;
useDefaultShell = true;
extraGroups = [
+ "fuse"
];
openssh.authorizedKeys.keys = [
config.krebs.users.lass.pubkey
@@ -55,8 +56,8 @@ with config.krebs.lib;
#secrets-common = "/home/lass/secrets/common";
stockholm = "/home/lass/stockholm";
nixpkgs = {
- url = https://github.com/NixOS/nixpkgs;
- rev = "d541e0dc1c05f5514bf30f8039e687adddb45616";
+ url = https://github.com/lassulus/nixpkgs;
+ rev = "f632f8edaf80ffa8bf0b8c9b9064cae3ccbe3894";
dev = "/home/lass/src/nixpkgs";
};
} // optionalAttrs config.krebs.build.host.secure {
diff --git a/lass/2configs/exim-smarthost.nix b/lass/2configs/exim-smarthost.nix
index 84a57205b..8199f2bd7 100644
--- a/lass/2configs/exim-smarthost.nix
+++ b/lass/2configs/exim-smarthost.nix
@@ -26,6 +26,8 @@ with config.krebs.lib;
{ from = "steuer@aidsballs.de"; to = lass.mail; }
{ from = "lass@aidsballs.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 = [
{ from = "mailer-daemon"; to = "postmaster"; }
diff --git a/lass/2configs/git.nix b/lass/2configs/git.nix
index 5cbe46351..aac3f6e02 100644
--- a/lass/2configs/git.nix
+++ b/lass/2configs/git.nix
@@ -37,6 +37,8 @@ let
realwallpaper = {};
xmonad-stockholm = {};
the_playlist = {};
+ } // mapAttrs make-public-repo-silent {
+ the_playlist = {};
};
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, ... }: {
inherit name collaborators desc;
public = false;
diff --git a/lass/2configs/radio.nix b/lass/2configs/radio.nix
index 8cc2a2be7..17be327b9 100644
--- a/lass/2configs/radio.nix
+++ b/lass/2configs/radio.nix
@@ -1,4 +1,7 @@
{ config, pkgs, ... }:
+
+with config.krebs.lib;
+
let
name = "radio";
mainUser = config.users.extraUsers.mainUser;
@@ -7,6 +10,22 @@ let
admin-password = import <secrets/icecast-admin-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 {
users.users = {
"${name}" = rec {
@@ -28,6 +47,9 @@ in {
};
krebs.per-user.${name}.packages = with pkgs; [
+ add_random
+ skip_track
+ print_current
ncmpcpp
mpc_cli
tmux
@@ -100,10 +122,6 @@ in {
autoAdd = pkgs.writeDash "autoAdd" ''
LIMIT=$1 #in secconds
- addRandom () {
- mpc add "$(mpc ls | shuf -n1)"
- }
-
timeLeft () {
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] }')
@@ -111,7 +129,7 @@ in {
}
if test $(timeLeft) -le $LIMIT; then
- addRandom
+ ${add_random}/bin/add_random
fi
'';
in {
@@ -130,4 +148,48 @@ in {
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};
+ '')
+ ];
}
diff --git a/lass/2configs/websites/domsen.nix b/lass/2configs/websites/domsen.nix
index f31fccd51..45d09c3b9 100644
--- a/lass/2configs/websites/domsen.nix
+++ b/lass/2configs/websites/domsen.nix
@@ -1,14 +1,10 @@
{ config, pkgs, lib, ... }:
let
- inherit (config.krebs.lib)
+ inherit (import <stockholm/krebs/4lib> { config = {}; inherit lib; })
genid
- readFile
;
- inherit (import ../../4lib { inherit lib pkgs; })
- manageCert
- manageCerts
- activateACME
+ inherit (import <stockholm/lass/2configs/websites/util.nix> {inherit lib pkgs;})
ssl
servePage
serveOwncloud
@@ -26,49 +22,30 @@ let
in {
imports = [
- ( ssl [ "reich-gebaeudereinigung.de" ])
- ( servePage [ "reich-gebaeudereinigung.de" ])
+ ./sqlBackup.nix
+ (ssl [ "reich-gebaeudereinigung.de" ])
+ (servePage [ "reich-gebaeudereinigung.de" ])
- ( manageCerts [ "karlaskop.de" ])
- ( servePage [ "karlaskop.de" ])
+ (ssl [ "karlaskop.de" ])
+ (servePage [ "karlaskop.de" ])
- ( ssl [ "makeup.apanowicz.de" ])
- ( servePage [ "makeup.apanowicz.de" ])
+ (ssl [ "makeup.apanowicz.de" ])
+ (servePage [ "makeup.apanowicz.de" ])
- ( manageCerts [ "pixelpocket.de" ])
- ( servePage [ "pixelpocket.de" ])
+ (ssl [ "pixelpocket.de" ])
+ (servePage [ "pixelpocket.de" ])
- ( ssl [ "o.ubikmedia.de" ])
- ( serveOwncloud [ "o.ubikmedia.de" ])
+ (ssl [ "o.ubikmedia.de" ])
+ (serveOwncloud [ "o.ubikmedia.de" ])
- ( ssl [ "ubikmedia.de" "aldona.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" ] )
+ (ssl [ "ubikmedia.de" "aldona.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 = {
- enable = true;
- package = pkgs.mariadb;
- rootPassword = toString (<secrets/mysql_rootPassword>);
- };
-
- lass.mysqlBackup = {
- enable = true;
- config.domsen = {
- password = toString (<secrets/mysql_rootPassword>);
- databases = [
- "ubikmedia_de"
- "o_ubikmedia_de"
- ];
- };
- };
- services.mysqlBackup = {
- enable = true;
- databases = [
- "ubikmedia_de"
- "o_ubikmedia_de"
- ];
- location = "/bku/sql_dumps";
- };
+ lass.mysqlBackup.config.all.databases = [
+ "ubikmedia_de"
+ "o_ubikmedia_de"
+ ];
users.users.domsen = {
uid = genid "domsen";
@@ -79,9 +56,18 @@ in {
createHome = true;
};
- services.phpfpm.phpOptions = ''
- extension=${pkgs.phpPackages.apcu}/lib/php/extensions/apcu.so
- sendmail_path = ${sendmail} -t
+ #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
+ sendmail_path = ${sendmail} -t -i"
+ '';
+ } ''
+ cat ${pkgs.php}/etc/php-recommended.ini > $out
+ echo "$options" >> $out
'';
}
diff --git a/lass/2configs/websites/fritz.nix b/lass/2configs/websites/fritz.nix
index e35615040..63efbecb6 100644
--- a/lass/2configs/websites/fritz.nix
+++ b/lass/2configs/websites/fritz.nix
@@ -1,57 +1,54 @@
{ config, pkgs, lib, ... }:
let
- inherit (import ../../4lib { inherit lib pkgs; })
- manageCerts
- activateACME
+ inherit (import <stockholm/krebs/4lib> { config = {}; inherit lib; })
+ genid
+ head
+ nameValuePair
+ ;
+ inherit (import <stockholm/lass/2configs/websites/util.nix> {inherit lib pkgs;})
ssl
servePage
- serveWordpress;
+ serveWordpress
+ ;
in {
imports = [
- ( manageCerts [ "biostase.de" "www.biostase.de" ])
- #( serveWordpress [ "biostase.de" "www.biostase.de" ])
+ ./sqlBackup.nix
+ (ssl [ "biostase.de" "www.biostase.de" ])
+ (serveWordpress [ "biostase.de" "www.biostase.de" ])
- ( manageCerts [ "radical-dreamers.de" ])
- ( serveWordpress [ "radical-dreamers.de" ])
+ (ssl [ "radical-dreamers.de" "www.radical-dreamers.de" ])
+ (serveWordpress [ "radical-dreamers.de" "www.radical-dreamers.de" ])
- ( manageCerts [ "gs-maubach.de" ])
- ( serveWordpress [ "gs-maubach.de" ])
+ (ssl [ "gs-maubach.de" "www.gs-maubach.de" ])
+ (serveWordpress [ "gs-maubach.de" "www.gs-maubach.de" ])
- ( manageCerts [ "spielwaren-kern.de" ])
- ( serveWordpress [ "spielwaren-kern.de" ])
+ (ssl [ "spielwaren-kern.de" "www.spielwaren-kern.de" ])
+ (serveWordpress [ "spielwaren-kern.de" "www.spielwaren-kern.de" ])
- ( manageCerts [ "familienpraxis-korntal.de" ])
- ( servePage [ "familienpraxis-korntal.de" ])
+ (ssl [ "familienpraxis-korntal.de" "www.familienpraxis-korntal.de" ])
+ (servePage [ "familienpraxis-korntal.de" "www.familienpraxis-korntal.de" ])
- ( manageCerts [ "ttf-kleinaspach.de" ])
- ( serveWordpress [ "ttf-kleinaspach.de" ])
+ (ssl [ "ttf-kleinaspach.de" "www.ttf-kleinaspach.de" ])
+ (serveWordpress [ "ttf-kleinaspach.de" "www.ttf-kleinaspach.de" ])
- ( ssl [ "eastuttgart.de" ])
- ( serveWordpress [ "eastuttgart.de" ])
+ (ssl [ "eastuttgart.de" "www.eastuttgart.de" ])
+ (serveWordpress [ "eastuttgart.de" "www.eastuttgart.de" ])
- ( ssl [ "habsys.de" "habsys.eu" ])
- ( servePage [ "habsys.de" "habsys.eu" ])
+ (ssl [ "habsys.de" "www.habsys.de" "habsys.eu" "www.habsys.eu" ])
+ (servePage [ "habsys.de" "www.habsys.de" "habsys.eu" "www.habsys.eu" ])
];
- services.mysql = {
- enable = true;
- package = pkgs.mariadb;
- rootPassword = toString (<secrets/mysql_rootPassword>);
- };
-
- lass.mysqlBackup = {
- enable = true;
- config.fritz = {
- password = toString (<secrets/mysql_rootPassword>);
- databases = [
- "biostase_de"
- "eastuttgart_de"
- "radical_dreamers_de"
- "spielwaren_kern_de"
- "ttf_kleinaspach_de"
- ];
- };
- };
+ lass.mysqlBackup.config.all.databases = [
+ "biostase_de"
+ "eastuttgart_de"
+ "radical_dreamers_de"
+ "spielwaren_kern_de"
+ "ttf_kleinaspach_de"
+ ];
+
+ users.users.root.openssh.authorizedKeys.keys = [
+ config.krebs.users.fritz.pubkey
+ ];
}
diff --git a/lass/2configs/websites/sqlBackup.nix b/lass/2configs/websites/sqlBackup.nix
new file mode 100644
index 000000000..7cb4b320e
--- /dev/null
+++ b/lass/2configs/websites/sqlBackup.nix
@@ -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>);
+ };
+ };
+}
+
diff --git a/lass/2configs/websites/util.nix b/lass/2configs/websites/util.nix
new file mode 100644
index 000000000..330d8ba86
--- /dev/null
+++ b/lass/2configs/websites/util.nix
@@ -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
+ '';
+ };
+
+}
diff --git a/lass/2configs/websites/wohnprojekt-rhh.de.nix b/lass/2configs/websites/wohnprojekt-rhh.de.nix
index 858054531..fb1a58109 100644
--- a/lass/2configs/websites/wohnprojekt-rhh.de.nix
+++ b/lass/2configs/websites/wohnprojekt-rhh.de.nix
@@ -1,11 +1,13 @@
{ config, pkgs, lib, ... }:
let
- inherit (config.krebs.lib) genid;
- inherit (import ../../4lib { inherit lib pkgs; })
+ inherit (import <stockholm/krebs/4lib> { config = {}; inherit lib; })
+ genid
+ ;
+ inherit (import <stockholm/lass/2configs/websites/util.nix> {inherit lib pkgs;})
ssl
- servePage;
-
+ servePage
+ ;
in {
imports = [
( ssl [ "wohnprojekt-rhh.de" ])
diff --git a/lass/4lib/default.nix b/lass/4lib/default.nix
index 30cbced49..56943b7ac 100644
--- a/lass/4lib/default.nix
+++ b/lass/4lib/default.nix
@@ -1,4 +1,4 @@
-{ lib, pkgs, ... }:
+{ lib, ... }:
with lib;
@@ -7,225 +7,4 @@ rec {
getDefaultGateway = ip:
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
- '';
- };
-
}
diff --git a/tv/2configs/vim.nix b/tv/2configs/vim.nix
index 6e2059484..10e5aab52 100644
--- a/tv/2configs/vim.nix
+++ b/tv/2configs/vim.nix
@@ -111,6 +111,13 @@ let
syn match String /"\([^\\"]\|\\.\)*"/
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"
''}
diff --git a/tv/2configs/xserver/Xmodmap.nix b/tv/2configs/xserver/Xmodmap.nix
new file mode 100644
index 000000000..02b6c730e
--- /dev/null
+++ b/tv/2configs/xserver/Xmodmap.nix
@@ -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
+''
diff --git a/tv/2configs/xserver/default.nix b/tv/2configs/xserver/default.nix
index 4b936f473..b5b116786 100644
--- a/tv/2configs/xserver/default.nix
+++ b/tv/2configs/xserver/default.nix
@@ -37,15 +37,21 @@ let
pkgs.ff
pkgs.gitAndTools.qgit
pkgs.mpv
- pkgs.slock
pkgs.sxiv
pkgs.xsel
pkgs.zathura
];
- security.setuidPrograms = [
- "slock"
- ];
+ # TODO dedicated group, i.e. with a single user
+ # 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;
@@ -56,8 +62,8 @@ let
requires = [ "xserver.service" ];
environment = xmonad-environment;
serviceConfig = {
- ExecStart = "${xmonad-start}/bin/xmonad";
- ExecStop = "${xmonad-stop}/bin/xmonad-stop";
+ ExecStart = "${pkgs.xmonad-tv}/bin/xmonad-tv";
+ ExecStop = "${pkgs.xmonad-tv}/bin/xmonad-tv --shutdown";
User = user.name;
WorkingDirectory = user.home;
};
@@ -73,13 +79,30 @@ let
environment = xserver-environment;
serviceConfig = {
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 = {
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";
# 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 = {
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.
@@ -132,23 +127,9 @@ let
++ concatLists (catAttrs "libPath" config.services.xserver.drivers));
};
- xserver = pkgs.writeScriptBin "xserver" ''
- #! /bin/sh
- set -efu
- 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}";
+ need-reload = s: toString [
+ "${pkgs.writeDashBin "need-reload" ''echo "$*"''}/bin/need-reload"
+ (shell.escape s)
+ ];
in out
diff --git a/tv/5pkgs/default.nix b/tv/5pkgs/default.nix
index b520e1a32..05dc02887 100644
--- a/tv/5pkgs/default.nix
+++ b/tv/5pkgs/default.nix
@@ -18,8 +18,6 @@
};
ff = pkgs.callPackage ./ff {};
viljetic-pages = pkgs.callPackage ./viljetic-pages {};
- xmonad-tv =
- let src = pkgs.writeNixFromCabal "xmonad-tv.nix" ./xmonad-tv; in
- pkgs.haskellPackages.callPackage src {};
+ xmonad-tv = import ./xmonad-tv.nix { inherit pkgs; };
};
}
diff --git a/tv/5pkgs/xmonad-tv/Main.hs b/tv/5pkgs/xmonad-tv.nix
index 817d0092e..74e43dc79 100644
--- a/tv/5pkgs/xmonad-tv/Main.hs
+++ b/tv/5pkgs/xmonad-tv.nix
@@ -1,3 +1,14 @@
+{ pkgs, ... }:
+pkgs.writeHaskellBin "xmonad-tv" {
+ depends = [
+ "containers"
+ "unix"
+ "X11"
+ "xmonad"
+ "xmonad-contrib"
+ "xmonad-stockholm"
+ ];
+} ''
{-# LANGUAGE DeriveDataTypeable #-} -- for XS
{-# LANGUAGE FlexibleContexts #-} -- for xmonad'
{-# LANGUAGE LambdaCase #-}
@@ -40,11 +51,11 @@ import XMonad.Stockholm.Rhombus
import XMonad.Stockholm.Shutdown
-myTerm :: String
-myTerm = "urxvtc"
+amixerPath :: FilePath
+amixerPath = "${pkgs.alsaUtils}/bin/amixer"
-myRootTerm :: String
-myRootTerm = "urxvtc -name root-urxvt -e su -"
+urxvtcPath :: FilePath
+urxvtcPath = "${pkgs.rxvt_unicode}/bin/urxvtc"
myFont :: String
myFont = "-schumacher-*-*-*-*-*-*-*-*-*-*-*-iso10646-*"
@@ -64,7 +75,7 @@ mainNoArgs = do
-- $ withUrgencyHookC BorderUrgencyHook { urgencyBorderColor = "magenta" } urgencyConfig { suppressWhen = Never }
$ withUrgencyHook (SpawnUrgencyHook "echo emit Urgency ")
$ def
- { terminal = myTerm
+ { terminal = urxvtcPath
, modMask = mod4Mask
, keys = myKeys
, workspaces = workspaces0
@@ -72,7 +83,9 @@ mainNoArgs = do
-- , handleEventHook = myHandleEventHooks <+> handleTimerEvent
--, handleEventHook = handleTimerEvent
, manageHook = placeHook (smart (1,0)) <+> floatNextHook
- , startupHook = spawn "echo emit XMonadStartup"
+ , startupHook = do
+ path <- liftIO (getEnv "XMONAD_STARTUP_HOOK")
+ forkFile path [] Nothing
, normalBorderColor = "#1c1c1c"
, focusedBorderColor = "#f000b0"
, handleEventHook = handleShutdownEvent
@@ -110,24 +123,30 @@ displaySomeException :: SomeException -> String
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 _ = floatNext True >> spawn myTerm
---spawnTermAt "ff" = floatNext True >> spawn myTerm
---spawnTermAt _ = spawn myTerm
spawnTermAt ws = do
env <- liftIO getEnvironment
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 conf = Map.fromList $
- [ ((_4 , xK_Escape ), spawn "/var/setuid-wrappers/slock")
+ [ ((_4 , xK_Escape ), forkFile "/var/setuid-wrappers/slock" [] Nothing)
, ((_4S , xK_c ), kill)
, ((_4 , xK_x ), chooseAction spawnTermAt)
- , ((_4C , xK_x ), spawn myRootTerm)
- --, ((_4M , xK_x ), spawn "xterm")
- --, ((_4M , xK_x ), mySpawn "xterm")
+ , ((_4C , xK_x ), spawnRootTerm)
--, ((_4 , xK_F1 ), withFocused jojo)
--, ((_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)
--, (_4S , xK_v ) & \k -> (k, gridselectWorkspace wsGSConfig { gs_navigate = makeGSNav k } W.shift)
--, (_4 , xK_b ) & \k -> (k, goToSelected wGSConfig { gs_navigate = makeGSNav k })
- , ((noModMask, xF86XK_AudioLowerVolume), spawn "amixer sset Master 5%-")
- , ((noModMask, xF86XK_AudioRaiseVolume), spawn "amixer sset Master 5%+")
- , ((noModMask, xF86XK_AudioMute), spawn "amixer sset Master toggle")
+ , ((noModMask, xF86XK_AudioLowerVolume), amixer ["sset", "Master", "5%+"])
+ , ((noModMask, xF86XK_AudioRaiseVolume), amixer ["sset", "Master", "5%-"])
+ , ((noModMask, xF86XK_AudioMute), amixer ["sset", "Master", "toggle"])
]
where
_4 = mod4Mask
@@ -202,6 +221,8 @@ myKeys conf = Map.fromList $
_4CM = _4 .|. _C .|. _M
_4SM = _4 .|. _S .|. _M
+ amixer args = forkFile amixerPath args Nothing
+
pagerConfig :: PagerConfig
pagerConfig = def
@@ -278,3 +299,4 @@ wGSConfig = def
allWorkspaceNames :: W.StackSet i l a sid sd -> X [i]
allWorkspaceNames ws =
return $ map W.tag (W.hidden ws) ++ [W.tag $ W.workspace $ W.current ws]
+''
diff --git a/tv/5pkgs/xmonad-tv/.gitignore b/tv/5pkgs/xmonad-tv/.gitignore
deleted file mode 100644
index 616204547..000000000
--- a/tv/5pkgs/xmonad-tv/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/shell.nix
diff --git a/tv/5pkgs/xmonad-tv/Makefile b/tv/5pkgs/xmonad-tv/Makefile
deleted file mode 100644
index cbb0776e6..000000000
--- a/tv/5pkgs/xmonad-tv/Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-.PHONY: ghci
-ghci: shell.nix
- nix-shell --command 'exec ghci -Wall'
-
-shell.nix: xmonad.cabal
- cabal2nix --shell . > $@
diff --git a/tv/5pkgs/xmonad-tv/xmonad.cabal b/tv/5pkgs/xmonad-tv/xmonad.cabal
deleted file mode 100644
index f9ea4dd7d..000000000
--- a/tv/5pkgs/xmonad-tv/xmonad.cabal
+++ /dev/null
@@ -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
[cgit] Unable to lock slot /tmp/cgit/99200000.lock: No such file or directory (2)