Merge remote-tracking branch 'ni/master'
This commit is contained in:
commit
95ab9a7af0
@ -5,6 +5,7 @@ let
|
|||||||
evalSource = import ./eval-source.nix;
|
evalSource = import ./eval-source.nix;
|
||||||
|
|
||||||
git = import ./git.nix { inherit lib; };
|
git = import ./git.nix { inherit lib; };
|
||||||
|
haskell = import ./haskell.nix { inherit lib; };
|
||||||
krebs = import ./krebs lib;
|
krebs = import ./krebs lib;
|
||||||
krops = import ../submodules/krops/lib;
|
krops = import ../submodules/krops/lib;
|
||||||
shell = import ./shell.nix { inherit lib; };
|
shell = import ./shell.nix { inherit lib; };
|
||||||
|
51
lib/haskell.nix
Normal file
51
lib/haskell.nix
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
{ lib }:
|
||||||
|
|
||||||
|
with builtins;
|
||||||
|
|
||||||
|
rec {
|
||||||
|
|
||||||
|
# Derive a file by substituting
|
||||||
|
# "${pkgs.foo}/bin/foo" for each {-pkg-}"foo", and
|
||||||
|
# "${pkgs.bar}/bin/foo" for each {-pkg:bar-}"foo".
|
||||||
|
# If a package doesn't exist, a warning gets printed.
|
||||||
|
substitutePkgs = name: { callsite ? null, pkgs, path }:
|
||||||
|
pkgs.writeText name (substitutePkgs' {
|
||||||
|
inherit pkgs;
|
||||||
|
sourceDescription =
|
||||||
|
if callsite != null then
|
||||||
|
"${name} in ${toString callsite}"
|
||||||
|
else
|
||||||
|
"${name} from ${toString path}";
|
||||||
|
text = readFile path;
|
||||||
|
});
|
||||||
|
|
||||||
|
substitutePkgs' = { pkgs, sourceDescription, text }:
|
||||||
|
let
|
||||||
|
f = s:
|
||||||
|
let
|
||||||
|
parse = match "(.*)([{]-pkg(:([^}]+))?-[}]\"([^\"]+)\")(.*)" s;
|
||||||
|
prefix = elemAt parse 0;
|
||||||
|
pname = if elemAt parse 3 != null then elemAt parse 3 else exename;
|
||||||
|
exename = elemAt parse 4;
|
||||||
|
suffix = elemAt parse 5;
|
||||||
|
pkg = pkgs.${pname} or null;
|
||||||
|
|
||||||
|
substitute =
|
||||||
|
if pkg != null then
|
||||||
|
"${pkg}/bin/${exename}"
|
||||||
|
else
|
||||||
|
trace (toString [
|
||||||
|
"lib.haskell.replacePkg:"
|
||||||
|
"warning:"
|
||||||
|
"while deriving ${sourceDescription}:"
|
||||||
|
"no substitute found for ${elemAt parse 1}"
|
||||||
|
])
|
||||||
|
exename;
|
||||||
|
in
|
||||||
|
if parse == null then
|
||||||
|
s
|
||||||
|
else
|
||||||
|
f (prefix + toJSON substitute + suffix);
|
||||||
|
in
|
||||||
|
f text;
|
||||||
|
}
|
@ -43,6 +43,21 @@ let
|
|||||||
"auth-anonymous=1"
|
"auth-anonymous=1"
|
||||||
"socket=${runDir}/socket"
|
"socket=${runDir}/socket"
|
||||||
]}
|
]}
|
||||||
|
${lib.optionalString (config.krebs.build.host.name == "au") ''
|
||||||
|
load-module ${toString [
|
||||||
|
"module-native-protocol-tcp"
|
||||||
|
"auth-ip-acl=127.0.0.1;10.23.1.0/24"
|
||||||
|
]}
|
||||||
|
''}
|
||||||
|
${lib.optionalString (config.krebs.build.host.name != "au") ''
|
||||||
|
load-module ${toString [
|
||||||
|
"module-tunnel-sink-new"
|
||||||
|
"server=au.hkw"
|
||||||
|
"sink_name=au"
|
||||||
|
"channels=2"
|
||||||
|
"rate=44100"
|
||||||
|
]}
|
||||||
|
''}
|
||||||
'';
|
'';
|
||||||
in
|
in
|
||||||
|
|
||||||
|
@ -1,15 +0,0 @@
|
|||||||
module Helpers.Path where
|
|
||||||
|
|
||||||
import qualified Data.List
|
|
||||||
import qualified System.Directory
|
|
||||||
import qualified System.IO.Unsafe
|
|
||||||
|
|
||||||
|
|
||||||
findExecutable :: String -> FilePath
|
|
||||||
findExecutable =
|
|
||||||
System.IO.Unsafe.unsafePerformIO . find
|
|
||||||
where
|
|
||||||
find name =
|
|
||||||
maybe failure id <$> System.Directory.findExecutable name
|
|
||||||
where
|
|
||||||
failure = error (Data.List.intercalate " " [name, "not found"])
|
|
@ -1,37 +0,0 @@
|
|||||||
module Paths where
|
|
||||||
|
|
||||||
import Helpers.Path
|
|
||||||
|
|
||||||
|
|
||||||
flameshot :: FilePath
|
|
||||||
flameshot = findExecutable "flameshot-once"
|
|
||||||
|
|
||||||
otpmenu :: FilePath
|
|
||||||
otpmenu = findExecutable "otpmenu"
|
|
||||||
|
|
||||||
pactl :: FilePath
|
|
||||||
pactl = findExecutable "pactl"
|
|
||||||
|
|
||||||
passmenu :: FilePath
|
|
||||||
passmenu = findExecutable "passmenu"
|
|
||||||
|
|
||||||
pavucontrol :: FilePath
|
|
||||||
pavucontrol = findExecutable "pavucontrol"
|
|
||||||
|
|
||||||
slock :: FilePath
|
|
||||||
slock = findExecutable "slock"
|
|
||||||
|
|
||||||
su :: FilePath
|
|
||||||
su = findExecutable "su"
|
|
||||||
|
|
||||||
urxvtc :: FilePath
|
|
||||||
urxvtc = findExecutable "urxvtc"
|
|
||||||
|
|
||||||
xcalib :: FilePath
|
|
||||||
xcalib = findExecutable "xcalib"
|
|
||||||
|
|
||||||
xdpychvt :: FilePath
|
|
||||||
xdpychvt = findExecutable "xdpychvt"
|
|
||||||
|
|
||||||
xterm :: FilePath
|
|
||||||
xterm = findExecutable "xterm"
|
|
@ -34,7 +34,6 @@ import XMonad.Actions.PerWorkspaceKeys (chooseAction)
|
|||||||
|
|
||||||
import XMonad.Stockholm.Pager
|
import XMonad.Stockholm.Pager
|
||||||
import XMonad.Stockholm.Shutdown
|
import XMonad.Stockholm.Shutdown
|
||||||
import qualified Paths
|
|
||||||
|
|
||||||
import THEnv.JSON (getCompileEnvJSONExp)
|
import THEnv.JSON (getCompileEnvJSONExp)
|
||||||
|
|
||||||
@ -72,7 +71,7 @@ mainNoArgs = do
|
|||||||
launch
|
launch
|
||||||
$ withUrgencyHook (SpawnUrgencyHook "echo emit Urgency ")
|
$ withUrgencyHook (SpawnUrgencyHook "echo emit Urgency ")
|
||||||
$ def
|
$ def
|
||||||
{ terminal = Paths.urxvtc
|
{ terminal = {-pkg:rxvt_unicode-}"urxvtc"
|
||||||
, modMask = mod4Mask
|
, modMask = mod4Mask
|
||||||
, keys = myKeys
|
, keys = myKeys
|
||||||
, workspaces = workspaces0
|
, workspaces = workspaces0
|
||||||
@ -122,14 +121,14 @@ displaySomeException = displayException
|
|||||||
|
|
||||||
forkFile :: FilePath -> [String] -> Maybe [(String, String)] -> X ()
|
forkFile :: FilePath -> [String] -> Maybe [(String, String)] -> X ()
|
||||||
forkFile path args env =
|
forkFile path args env =
|
||||||
xfork (executeFile path False args env) >> return ()
|
xfork (executeFile path True args env) >> return ()
|
||||||
|
|
||||||
|
|
||||||
spawnRootTerm :: X ()
|
spawnRootTerm :: X ()
|
||||||
spawnRootTerm =
|
spawnRootTerm =
|
||||||
forkFile
|
forkFile
|
||||||
Paths.urxvtc
|
{-pkg:rxvt_unicode-}"urxvtc"
|
||||||
["-name", "root-urxvt", "-e", Paths.su, "-"]
|
["-name", "root-urxvt", "-e", "/run/wrappers/bin/su", "-"]
|
||||||
Nothing
|
Nothing
|
||||||
|
|
||||||
|
|
||||||
@ -137,16 +136,16 @@ spawnTermAt :: String -> X ()
|
|||||||
spawnTermAt ws = do
|
spawnTermAt ws = do
|
||||||
env <- io getEnvironment
|
env <- io getEnvironment
|
||||||
let env' = ("XMONAD_SPAWN_WORKSPACE", ws) : env
|
let env' = ("XMONAD_SPAWN_WORKSPACE", ws) : env
|
||||||
forkFile Paths.urxvtc [] (Just env')
|
forkFile {-pkg:rxvt_unicode-}"urxvtc" [] (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 ), forkFile Paths.slock [] Nothing)
|
[ ((_4 , xK_Escape ), forkFile {-pkg-}"slock" [] Nothing)
|
||||||
, ((_4S , xK_c ), kill)
|
, ((_4S , xK_c ), kill)
|
||||||
|
|
||||||
, ((_4 , xK_o ), forkFile Paths.otpmenu [] Nothing)
|
, ((_4 , xK_o ), forkFile {-pkg:fzmenu-}"otpmenu" [] Nothing)
|
||||||
, ((_4 , xK_p ), forkFile Paths.passmenu [] Nothing)
|
, ((_4 , xK_p ), forkFile {-pkg:fzmenu-}"passmenu" [] Nothing)
|
||||||
|
|
||||||
, ((_4 , xK_x ), chooseAction spawnTermAt)
|
, ((_4 , xK_x ), chooseAction spawnTermAt)
|
||||||
, ((_4C , xK_x ), spawnRootTerm)
|
, ((_4C , xK_x ), spawnRootTerm)
|
||||||
@ -188,12 +187,12 @@ myKeys conf = Map.fromList $
|
|||||||
, ((0, xF86XK_AudioMute), audioMute)
|
, ((0, xF86XK_AudioMute), audioMute)
|
||||||
, ((_4, xF86XK_AudioMute), pavucontrol [])
|
, ((_4, xF86XK_AudioMute), pavucontrol [])
|
||||||
|
|
||||||
, ((_4, xK_Prior), forkFile Paths.xcalib ["-invert", "-alter"] Nothing)
|
, ((_4, xK_Prior), forkFile {-pkg-}"xcalib" ["-invert", "-alter"] Nothing)
|
||||||
|
|
||||||
, ((0, xK_Print), forkFile Paths.flameshot [] Nothing)
|
, ((0, xK_Print), forkFile {-pkg-}"flameshot" [] Nothing)
|
||||||
|
|
||||||
, ((_C, xF86XK_Forward), forkFile Paths.xdpychvt ["next"] Nothing)
|
, ((_C, xF86XK_Forward), forkFile {-pkg:xdpytools-}"xdpychvt" ["next"] Nothing)
|
||||||
, ((_C, xF86XK_Back), forkFile Paths.xdpychvt ["prev"] Nothing)
|
, ((_C, xF86XK_Back), forkFile {-pkg:xdpytools-}"xdpychvt" ["prev"] Nothing)
|
||||||
]
|
]
|
||||||
where
|
where
|
||||||
_4 = mod4Mask
|
_4 = mod4Mask
|
||||||
@ -206,8 +205,8 @@ myKeys conf = Map.fromList $
|
|||||||
_4CM = _4 .|. _C .|. _M
|
_4CM = _4 .|. _C .|. _M
|
||||||
_4SM = _4 .|. _S .|. _M
|
_4SM = _4 .|. _S .|. _M
|
||||||
|
|
||||||
pactl args = forkFile Paths.pactl args Nothing
|
pactl args = forkFile {-pkg:pulseaudio-}"pactl" args Nothing
|
||||||
pavucontrol args = forkFile Paths.pavucontrol args Nothing
|
pavucontrol args = forkFile {-pkg-}"pavucontrol" args Nothing
|
||||||
|
|
||||||
audioLowerVolume = pactl ["--", "set-sink-volume", "@DEFAULT_SINK@", "-5%"]
|
audioLowerVolume = pactl ["--", "set-sink-volume", "@DEFAULT_SINK@", "-5%"]
|
||||||
audioRaiseVolume = pactl ["--", "set-sink-volume", "@DEFAULT_SINK@", "+5%"]
|
audioRaiseVolume = pactl ["--", "set-sink-volume", "@DEFAULT_SINK@", "+5%"]
|
||||||
@ -222,7 +221,7 @@ myKeys conf = Map.fromList $
|
|||||||
xdeny :: X ()
|
xdeny :: X ()
|
||||||
xdeny =
|
xdeny =
|
||||||
forkFile
|
forkFile
|
||||||
Paths.xterm
|
{-pkg-}"xterm"
|
||||||
[ "-fn", myFont
|
[ "-fn", myFont
|
||||||
, "-geometry", "300x100"
|
, "-geometry", "300x100"
|
||||||
, "-name", "AlertFloat"
|
, "-name", "AlertFloat"
|
||||||
|
@ -23,8 +23,6 @@ executable xmonad
|
|||||||
xmonad-contrib,
|
xmonad-contrib,
|
||||||
xmonad-stockholm
|
xmonad-stockholm
|
||||||
other-modules:
|
other-modules:
|
||||||
Helpers.Path,
|
|
||||||
Paths,
|
|
||||||
THEnv.JSON
|
THEnv.JSON
|
||||||
default-language: Haskell2010
|
default-language: Haskell2010
|
||||||
ghc-options: -O2 -Wall -threaded
|
ghc-options: -O2 -Wall -threaded
|
||||||
|
Loading…
Reference in New Issue
Block a user