Merge remote-tracking branch 'prism/master'
This commit is contained in:
commit
d587575deb
12
Makefile
12
Makefile
|
@ -48,6 +48,14 @@ $(if $(target_user),,$(error unbound variable: target_user))
|
||||||
$(if $(target_port),,$(error unbound variable: target_port))
|
$(if $(target_port),,$(error unbound variable: target_port))
|
||||||
$(if $(target_path),,$(error unbound variable: target_path))
|
$(if $(target_path),,$(error unbound variable: target_path))
|
||||||
|
|
||||||
|
build = \
|
||||||
|
nix-build \
|
||||||
|
--no-out-link \
|
||||||
|
--show-trace \
|
||||||
|
-I nixos-config=$(nixos-config) \
|
||||||
|
-I stockholm=$(stockholm) \
|
||||||
|
-E "let build = import <stockholm>; in $(1)"
|
||||||
|
|
||||||
evaluate = \
|
evaluate = \
|
||||||
nix-instantiate \
|
nix-instantiate \
|
||||||
--eval \
|
--eval \
|
||||||
|
@ -74,6 +82,10 @@ deploy:
|
||||||
env STOCKHOLM_VERSION="$$STOCKHOLM_VERSION" \
|
env STOCKHOLM_VERSION="$$STOCKHOLM_VERSION" \
|
||||||
nixos-rebuild switch --show-trace -I $(target_path)
|
nixos-rebuild switch --show-trace -I $(target_path)
|
||||||
|
|
||||||
|
# usage: make build.pkgs.get
|
||||||
|
build build.:;@$(call build,$${expr-eval})
|
||||||
|
build.%:;@$(call build,$@)
|
||||||
|
|
||||||
# usage: make LOGNAME=shared system=wolf eval.config.krebs.build.host.name
|
# usage: make LOGNAME=shared system=wolf eval.config.krebs.build.host.name
|
||||||
eval eval.:;@$(call evaluate,$${expr-eval})
|
eval eval.:;@$(call evaluate,$${expr-eval})
|
||||||
eval.%:;@$(call evaluate,$@)
|
eval.%:;@$(call evaluate,$@)
|
||||||
|
|
|
@ -20,6 +20,10 @@ let
|
||||||
type = types.filename;
|
type = types.filename;
|
||||||
default = config._module.args.name;
|
default = config._module.args.name;
|
||||||
};
|
};
|
||||||
|
envp = mkOption {
|
||||||
|
type = types.attrsOf types.str;
|
||||||
|
default = {};
|
||||||
|
};
|
||||||
filename = mkOption {
|
filename = mkOption {
|
||||||
type = mkOptionType {
|
type = mkOptionType {
|
||||||
# TODO unyuck string and merge with toC
|
# TODO unyuck string and merge with toC
|
||||||
|
@ -57,7 +61,7 @@ let
|
||||||
};
|
};
|
||||||
config.activate = let
|
config.activate = let
|
||||||
src = pkgs.execve config.name {
|
src = pkgs.execve config.name {
|
||||||
inherit (config) filename;
|
inherit (config) envp filename;
|
||||||
};
|
};
|
||||||
dst = "${wrapperDir}/${config.name}";
|
dst = "${wrapperDir}/${config.name}";
|
||||||
in ''
|
in ''
|
||||||
|
|
|
@ -286,6 +286,19 @@ types // rec {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
haskell.conid = mkOptionType {
|
||||||
|
name = "Haskell constructor identifier";
|
||||||
|
check = x:
|
||||||
|
isString x && match "[[:upper:]][[:lower:]_[:upper:]0-9']*" x != null;
|
||||||
|
merge = mergeOneOption;
|
||||||
|
};
|
||||||
|
|
||||||
|
haskell.modid = mkOptionType {
|
||||||
|
name = "Haskell module identifier";
|
||||||
|
check = x: isString x && all haskell.conid.check (splitString "." x);
|
||||||
|
merge = mergeOneOption;
|
||||||
|
};
|
||||||
|
|
||||||
# RFC952, B. Lexical grammar, <hname>
|
# RFC952, B. Lexical grammar, <hname>
|
||||||
hostname = mkOptionType {
|
hostname = mkOptionType {
|
||||||
name = "hostname";
|
name = "hostname";
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{ config, lib, pkgs, ... }:
|
{ config, pkgs, ... }:
|
||||||
with config.krebs.lib;
|
with config.krebs.lib;
|
||||||
rec {
|
rec {
|
||||||
execve = name: { filename, argv ? null, envp ? {}, destination ? "" }: let
|
execve = name: { filename, argv ? null, envp ? {}, destination ? "" }: let
|
||||||
|
@ -28,6 +28,21 @@ rec {
|
||||||
|
|
||||||
execveBin = name: cfg: execve name (cfg // { destination = "/bin/${name}"; });
|
execveBin = name: cfg: execve name (cfg // { destination = "/bin/${name}"; });
|
||||||
|
|
||||||
|
writeBash = name: text: pkgs.writeScript name ''
|
||||||
|
#! ${pkgs.bash}/bin/bash
|
||||||
|
${text}
|
||||||
|
'';
|
||||||
|
|
||||||
|
writeBashBin = name: text: pkgs.writeTextFile {
|
||||||
|
executable = true;
|
||||||
|
destination = "/bin/${name}";
|
||||||
|
name = name;
|
||||||
|
text = ''
|
||||||
|
#! ${pkgs.bash}/bin/bash
|
||||||
|
${text}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
writeC = name: { destination ? "" }: src: pkgs.runCommand name {} ''
|
writeC = name: { destination ? "" }: src: pkgs.runCommand name {} ''
|
||||||
PATH=${makeBinPath (with pkgs; [
|
PATH=${makeBinPath (with pkgs; [
|
||||||
binutils
|
binutils
|
||||||
|
@ -66,50 +81,112 @@ rec {
|
||||||
mv "$textPath" $out
|
mv "$textPath" $out
|
||||||
'';
|
'';
|
||||||
|
|
||||||
writeHaskellBin =
|
writeHaskell =
|
||||||
k:
|
k:
|
||||||
let
|
let
|
||||||
k' = parseDrvName k;
|
k' = parseDrvName k;
|
||||||
name = k'.name;
|
name = k'.name;
|
||||||
version = if k'.version != "" then k'.version else "0";
|
version = if k'.version != "" then k'.version else "0";
|
||||||
in
|
in
|
||||||
{ build-depends ? ["base"] ++ depends
|
{ base-depends ? ["base"]
|
||||||
, depends ? []
|
, executables ? {}
|
||||||
, ghc-options ? ["-Wall" "-O3" "-threaded" "-rtsopts"]
|
, ghc-options ? ["-Wall" "-O3" "-threaded" "-rtsopts"]
|
||||||
, haskellPackages ? pkgs.haskellPackages
|
, haskellPackages ? pkgs.haskellPackages
|
||||||
|
, library ? null
|
||||||
, license ? "WTFPL"
|
, license ? "WTFPL"
|
||||||
}:
|
}:
|
||||||
main-text:
|
|
||||||
let
|
let
|
||||||
|
isExecutable = executables != {};
|
||||||
|
isLibrary = library != null;
|
||||||
|
|
||||||
cabal-file = pkgs.writeText "${name}-${version}.cabal" ''
|
cabal-file = pkgs.writeText "${name}-${version}.cabal" ''
|
||||||
build-type: Simple
|
build-type: Simple
|
||||||
cabal-version: >= 1.2
|
cabal-version: >= 1.2
|
||||||
name: ${name}
|
name: ${name}
|
||||||
version: ${version}
|
version: ${version}
|
||||||
|
${concatStringsSep "\n" (mapAttrsToList exe-section executables)}
|
||||||
executable ${name}
|
${optionalString isLibrary (lib-section library)}
|
||||||
build-depends: ${concatStringsSep "," build-depends}
|
|
||||||
ghc-options: ${toString ghc-options}
|
|
||||||
main-is: ${main-file.name}
|
|
||||||
'';
|
'';
|
||||||
main-file = pkgs.writeText "${name}-${version}.hs" main-text;
|
|
||||||
|
exe-install =
|
||||||
|
exe-name:
|
||||||
|
{ file ? pkgs.writeText "${name}-${exe-name}.hs" text
|
||||||
|
, relpath ? "${exe-name}.hs"
|
||||||
|
, text
|
||||||
|
, ... }:
|
||||||
|
if types.filename.check exe-name
|
||||||
|
then "install -D ${file} $out/${relpath}"
|
||||||
|
else throw "argument ‘exe-name’ is not a ${types.filename.name}";
|
||||||
|
|
||||||
|
exe-section =
|
||||||
|
exe-name:
|
||||||
|
{ build-depends ? base-depends ++ extra-depends
|
||||||
|
, extra-depends ? []
|
||||||
|
, file ? pkgs.writeText "${name}-${exe-name}.hs" text
|
||||||
|
, relpath ? "${exe-name}.hs"
|
||||||
|
, text
|
||||||
|
, ... }: ''
|
||||||
|
executable ${exe-name}
|
||||||
|
build-depends: ${concatStringsSep "," build-depends}
|
||||||
|
ghc-options: ${toString ghc-options}
|
||||||
|
main-is: ${relpath}
|
||||||
|
'';
|
||||||
|
|
||||||
|
get-depends =
|
||||||
|
{ build-depends ? base-depends ++ extra-depends
|
||||||
|
, extra-depends ? []
|
||||||
|
, ...
|
||||||
|
}:
|
||||||
|
build-depends;
|
||||||
|
|
||||||
|
lib-install =
|
||||||
|
{ exposed-modules
|
||||||
|
, ... }:
|
||||||
|
concatStringsSep "\n" (mapAttrsToList mod-install exposed-modules);
|
||||||
|
|
||||||
|
lib-section =
|
||||||
|
{ build-depends ? base-depends ++ extra-depends
|
||||||
|
, extra-depends ? []
|
||||||
|
, exposed-modules
|
||||||
|
, ... }: ''
|
||||||
|
library
|
||||||
|
build-depends: ${concatStringsSep "," build-depends}
|
||||||
|
ghc-options: ${toString ghc-options}
|
||||||
|
exposed-modules: ${concatStringsSep "," (attrNames exposed-modules)}
|
||||||
|
'';
|
||||||
|
|
||||||
|
mod-install =
|
||||||
|
mod-name:
|
||||||
|
{ file ? pkgs.writeText "${name}-${mod-name}.hs" text
|
||||||
|
, relpath ? "${replaceStrings ["."] ["/"] mod-name}.hs"
|
||||||
|
, text
|
||||||
|
, ... }:
|
||||||
|
if types.haskell.modid.check mod-name
|
||||||
|
then "install -D ${file} $out/${relpath}"
|
||||||
|
else throw "argument ‘mod-name’ is not a ${types.haskell.modid.name}";
|
||||||
in
|
in
|
||||||
haskellPackages.mkDerivation rec {
|
haskellPackages.mkDerivation {
|
||||||
inherit license version;
|
inherit isExecutable isLibrary license version;
|
||||||
executableHaskellDepends = attrVals build-depends haskellPackages;
|
executableHaskellDepends =
|
||||||
isExecutable = true;
|
attrVals
|
||||||
isLibrary = false;
|
(concatMap get-depends (attrValues executables))
|
||||||
|
haskellPackages;
|
||||||
|
libraryHaskellDepends =
|
||||||
|
attrVals
|
||||||
|
(optionals isLibrary (get-depends library))
|
||||||
|
haskellPackages;
|
||||||
pname = name;
|
pname = name;
|
||||||
src = pkgs.runCommand "${name}-${version}-src" {} ''
|
src = pkgs.runCommand "${name}-${version}-src" {} ''
|
||||||
install -D ${cabal-file} $out/${cabal-file.name}
|
install -D ${cabal-file} $out/${cabal-file.name}
|
||||||
install -D ${main-file} $out/${main-file.name}
|
${optionalString isLibrary (lib-install library)}
|
||||||
|
${concatStringsSep "\n" (mapAttrsToList exe-install executables)}
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
writeNixFromCabal =
|
writeNixFromCabal =
|
||||||
trace (toString [
|
trace (toString [
|
||||||
"The function `writeNixFromCabal` has been deprecated in favour of"
|
"The function `writeNixFromCabal` has been deprecated in favour of"
|
||||||
"`writeHaskellBin'."
|
"`writeHaskell`."
|
||||||
])
|
])
|
||||||
(name: path: pkgs.runCommand name {} ''
|
(name: path: pkgs.runCommand name {} ''
|
||||||
${pkgs.cabal2nix}/bin/cabal2nix ${path} > $out
|
${pkgs.cabal2nix}/bin/cabal2nix ${path} > $out
|
||||||
|
|
|
@ -60,6 +60,7 @@ with config.krebs.lib;
|
||||||
nmap
|
nmap
|
||||||
p7zip
|
p7zip
|
||||||
pass
|
pass
|
||||||
|
q
|
||||||
qrencode
|
qrencode
|
||||||
texLive
|
texLive
|
||||||
tmux
|
tmux
|
||||||
|
|
|
@ -74,8 +74,8 @@ in {
|
||||||
};
|
};
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
SyslogIdentifier = "xmonad";
|
SyslogIdentifier = "xmonad";
|
||||||
ExecStart = "${pkgs.xmonad-tv}/bin/xmonad-tv";
|
ExecStart = "${pkgs.xmonad-tv}/bin/xmonad";
|
||||||
ExecStop = "${pkgs.xmonad-tv}/bin/xmonad-tv --shutdown";
|
ExecStop = "${pkgs.xmonad-tv}/bin/xmonad --shutdown";
|
||||||
User = user.name;
|
User = user.name;
|
||||||
WorkingDirectory = user.home;
|
WorkingDirectory = user.home;
|
||||||
};
|
};
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
erlang = pkgs.erlangR16;
|
erlang = pkgs.erlangR16;
|
||||||
};
|
};
|
||||||
ff = pkgs.callPackage ./ff {};
|
ff = pkgs.callPackage ./ff {};
|
||||||
|
q = pkgs.callPackage ./q {};
|
||||||
viljetic-pages = pkgs.callPackage ./viljetic-pages {};
|
viljetic-pages = pkgs.callPackage ./viljetic-pages {};
|
||||||
xmonad-tv = import ./xmonad-tv.nix { inherit pkgs; };
|
xmonad-tv = import ./xmonad-tv.nix { inherit pkgs; };
|
||||||
};
|
};
|
||||||
|
|
193
tv/5pkgs/q/default.nix
Normal file
193
tv/5pkgs/q/default.nix
Normal file
|
@ -0,0 +1,193 @@
|
||||||
|
{ pkgs, ... }:
|
||||||
|
let
|
||||||
|
q-cal = let
|
||||||
|
# XXX 23 is the longest line of cal's output
|
||||||
|
pad = ''{
|
||||||
|
${pkgs.gnused}/bin/sed '
|
||||||
|
# rtrim
|
||||||
|
s/ *$//
|
||||||
|
|
||||||
|
# delete last empty line
|
||||||
|
''${/^$/d}
|
||||||
|
' \
|
||||||
|
| ${pkgs.gawk}/bin/awk '{printf "%-23s\n", $0}' \
|
||||||
|
| ${pkgs.gnused}/bin/sed '
|
||||||
|
# colorize header
|
||||||
|
1,2s/.*/[30;1m&[39;22m/
|
||||||
|
|
||||||
|
# colorize week number
|
||||||
|
s/^[ 1-9][0-9]/[30;1m&[39;22m/
|
||||||
|
'
|
||||||
|
}'';
|
||||||
|
in ''
|
||||||
|
${pkgs.coreutils}/bin/paste \
|
||||||
|
<(${pkgs.utillinux}/bin/cal -mw \
|
||||||
|
$(${pkgs.coreutils}/bin/date +'%m %Y' -d 'last month') \
|
||||||
|
| ${pad}
|
||||||
|
) \
|
||||||
|
<(${pkgs.utillinux}/bin/cal -mw \
|
||||||
|
| ${pkgs.gnused}/bin/sed '
|
||||||
|
# colorize day of month
|
||||||
|
s/\(^\| \)'"$(${pkgs.coreutils}/bin/date +%e)"'\>/[31;1m&[39;22m/
|
||||||
|
' \
|
||||||
|
| ${pad}
|
||||||
|
) \
|
||||||
|
<(${pkgs.utillinux}/bin/cal -mw \
|
||||||
|
$(${pkgs.coreutils}/bin/date +'%m %Y' -d 'next month') \
|
||||||
|
| ${pad}
|
||||||
|
) \
|
||||||
|
| ${pkgs.gnused}/bin/sed 's/\t/ /g'
|
||||||
|
'';
|
||||||
|
|
||||||
|
q-isodate = ''
|
||||||
|
${pkgs.coreutils}/bin/date \
|
||||||
|
'+[1m%Y-%m-%d[;30mT[;38;5;085m%H:%M[m:%S%:z'
|
||||||
|
'';
|
||||||
|
|
||||||
|
# Singapore's red is #ED2E38
|
||||||
|
q-sgtdate = ''
|
||||||
|
TZ=Asia/Singapore \
|
||||||
|
${pkgs.coreutils}/bin/date \
|
||||||
|
'+[1m%Y-%m-%d[;30mT[;38;5;088m%H:%M[m:%S%:z'
|
||||||
|
'';
|
||||||
|
|
||||||
|
q-gitdir = ''
|
||||||
|
if test -d .git; then
|
||||||
|
#git status --porcelain
|
||||||
|
branch=$(
|
||||||
|
${pkgs.git}/bin/git branch \
|
||||||
|
| ${pkgs.gnused}/bin/sed -rn 's/^\* (.*)/\1/p'
|
||||||
|
)
|
||||||
|
echo "± $LOGNAME@''${HOSTNAME-$(${pkgs.nettools}/bin/hostname)}:$PWD .git $branch"
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
|
||||||
|
q-power_supply = ''
|
||||||
|
for uevent in /sys/class/power_supply/*/uevent; do
|
||||||
|
if test -f $uevent; then
|
||||||
|
eval "$(${pkgs.gnused}/bin/sed -n '
|
||||||
|
s/^\([A-Z_]\+=\)\(.*\)/\1'\'''\2'\'''/p
|
||||||
|
' $uevent)"
|
||||||
|
|
||||||
|
if test "x''${POWER_SUPPLY_CHARGE_NOW-}" = x; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
charge_percentage=$(echo "
|
||||||
|
scale=2
|
||||||
|
$POWER_SUPPLY_CHARGE_NOW / $POWER_SUPPLY_CHARGE_FULL
|
||||||
|
" | ${pkgs.bc}/bin/bc)
|
||||||
|
|
||||||
|
lfc=$POWER_SUPPLY_CHARGE_FULL
|
||||||
|
rc=$POWER_SUPPLY_CHARGE_NOW
|
||||||
|
#rc=2800
|
||||||
|
N=78; N=76
|
||||||
|
N=10
|
||||||
|
n=$(echo $N-1 | ${pkgs.bc}/bin/bc)
|
||||||
|
centi=$(echo "$rc*100/$lfc" | ${pkgs.bc}/bin/bc)
|
||||||
|
deci=$(echo "$rc*$N/$lfc" | ${pkgs.bc}/bin/bc)
|
||||||
|
energy_evel=$(
|
||||||
|
echo -n '☳ ' # TRIGRAM FOR THUNDER
|
||||||
|
if test $centi -ge 42; then echo -n '[1;32m'
|
||||||
|
elif test $centi -ge 23; then echo -n '[1;33m'
|
||||||
|
elif test $centi -ge 11; then echo -n '[1;31m'
|
||||||
|
else echo -n '[5;1;31m'; fi
|
||||||
|
for i in $(${pkgs.coreutils}/bin/seq 1 $deci); do
|
||||||
|
echo -n ■
|
||||||
|
done
|
||||||
|
echo -n '[;30m'
|
||||||
|
for i in $(${pkgs.coreutils}/bin/seq $deci $n); do
|
||||||
|
echo -n ■
|
||||||
|
done
|
||||||
|
echo '[m' $rc #/ $lfc
|
||||||
|
)
|
||||||
|
echo "$energy_evel $charge_percentage"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
'';
|
||||||
|
|
||||||
|
q-virtualization = ''
|
||||||
|
echo "VT: $(${pkgs.systemd}/bin/systemd-detect-virt)"
|
||||||
|
'';
|
||||||
|
|
||||||
|
q-wireless = ''
|
||||||
|
for dev in $(
|
||||||
|
${pkgs.iw}/bin/iw dev \
|
||||||
|
| ${pkgs.gnused}/bin/sed -n 's/^\s*Interface\s\+\([0-9a-z]\+\)$/\1/p'
|
||||||
|
); do
|
||||||
|
inet=$(${pkgs.iproute}/bin/ip addr show $dev \
|
||||||
|
| ${pkgs.gnused}/bin/sed -n '
|
||||||
|
s/.*inet \([0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\).*/\1/p
|
||||||
|
') \
|
||||||
|
|| unset inet
|
||||||
|
ssid=$(${pkgs.iw}/bin/iw dev $dev link \
|
||||||
|
| ${pkgs.gnused}/bin/sed -n '
|
||||||
|
s/.*\tSSID: \(.*\)/\1/p
|
||||||
|
') \
|
||||||
|
|| unset ssid
|
||||||
|
echo "$dev''${inet+ $inet}''${ssid+ $ssid}"
|
||||||
|
done
|
||||||
|
'';
|
||||||
|
|
||||||
|
q-online = ''
|
||||||
|
if ${pkgs.curl}/bin/curl -s google.com >/dev/null; then
|
||||||
|
echo '[32;1monline[m'
|
||||||
|
else
|
||||||
|
echo offline
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
|
||||||
|
q-thermal_zone = ''
|
||||||
|
for i in /sys/class/thermal/thermal_zone*; do
|
||||||
|
type=$(${pkgs.coreutils}/bin/cat $i/type)
|
||||||
|
temp=$(${pkgs.coreutils}/bin/cat $i/temp)
|
||||||
|
printf '%s %s°C\n' $type $(echo $temp / 1000 | ${pkgs.bc}/bin/bc)
|
||||||
|
done
|
||||||
|
'';
|
||||||
|
|
||||||
|
q-todo = ''
|
||||||
|
TODO_file=$HOME/TODO
|
||||||
|
if test -e "$TODO_file"; then
|
||||||
|
${pkgs.coreutils}/bin/cat "$TODO_file" \
|
||||||
|
| ${pkgs.gawk}/bin/gawk -v now=$(${pkgs.coreutils}/bin/date +%s) '
|
||||||
|
BEGIN { print "remind=0" }
|
||||||
|
/^[0-9]/{
|
||||||
|
x = $1
|
||||||
|
gsub(".", "\\\\&", x)
|
||||||
|
rest = substr($0, index($0, " "))
|
||||||
|
rest = $0
|
||||||
|
sub(" *", "", rest)
|
||||||
|
gsub(".", "\\\\&", rest)
|
||||||
|
print "test $(${pkgs.coreutils}/bin/date +%s -d"x") -lt "now" && \
|
||||||
|
echo \"\x1b[38;5;208m\""rest esc "\"\x1b[m\" && \
|
||||||
|
(( remind++ ))"
|
||||||
|
}
|
||||||
|
END { print "test $remind = 0 && echo \"nothing to remind\"" }
|
||||||
|
' \
|
||||||
|
| {
|
||||||
|
# bash needed for (( ... ))
|
||||||
|
${pkgs.bash}/bin/bash
|
||||||
|
}
|
||||||
|
else
|
||||||
|
echo "$TODO_file: no such file or directory"
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
|
||||||
|
in
|
||||||
|
# bash needed for <(...)
|
||||||
|
pkgs.writeBashBin "q" ''
|
||||||
|
set -eu
|
||||||
|
export PATH=/var/empty
|
||||||
|
${q-cal}
|
||||||
|
echo
|
||||||
|
${q-isodate}
|
||||||
|
${q-sgtdate}
|
||||||
|
(${q-gitdir}) &
|
||||||
|
(${q-power_supply}) &
|
||||||
|
(${q-virtualization}) &
|
||||||
|
(${q-wireless}) &
|
||||||
|
(${q-online}) &
|
||||||
|
(${q-thermal_zone}) &
|
||||||
|
wait
|
||||||
|
${q-todo}
|
||||||
|
''
|
|
@ -1,14 +1,15 @@
|
||||||
{ pkgs, ... }:
|
{ pkgs, ... }:
|
||||||
pkgs.writeHaskellBin "xmonad-tv" {
|
pkgs.writeHaskell "xmonad-tv" {
|
||||||
depends = [
|
executables.xmonad = {
|
||||||
"containers"
|
extra-depends = [
|
||||||
"unix"
|
"containers"
|
||||||
"X11"
|
"unix"
|
||||||
"xmonad"
|
"X11"
|
||||||
"xmonad-contrib"
|
"xmonad"
|
||||||
"xmonad-stockholm"
|
"xmonad-contrib"
|
||||||
];
|
"xmonad-stockholm"
|
||||||
} ''
|
];
|
||||||
|
text = ''
|
||||||
{-# LANGUAGE DeriveDataTypeable #-} -- for XS
|
{-# LANGUAGE DeriveDataTypeable #-} -- for XS
|
||||||
{-# LANGUAGE FlexibleContexts #-} -- for xmonad'
|
{-# LANGUAGE FlexibleContexts #-} -- for xmonad'
|
||||||
{-# LANGUAGE LambdaCase #-}
|
{-# LANGUAGE LambdaCase #-}
|
||||||
|
@ -299,4 +300,6 @@ 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]
|
||||||
''
|
'';
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue