summaryrefslogtreecommitdiffstats
path: root/pkgs/haskell
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/haskell')
-rw-r--r--pkgs/haskell/blessings.nix24
-rw-r--r--pkgs/haskell/desktop-pager.nix16
-rw-r--r--pkgs/haskell/hack.nix14
-rw-r--r--pkgs/haskell/mailaids.nix22
-rw-r--r--pkgs/haskell/much.nix33
-rw-r--r--pkgs/haskell/purebred-email/default.nix31
-rw-r--r--pkgs/haskell/purebred-email/untweak-mime-version-header.patch65
-rw-r--r--pkgs/haskell/seq2.nix14
-rw-r--r--pkgs/haskell/terminal-scanner.nix6
-rw-r--r--pkgs/haskell/terminal-utilities.nix13
-rw-r--r--pkgs/haskell/text-wcwidth.nix15
-rw-r--r--pkgs/haskell/xmonad-tv/src/main.hs52
12 files changed, 241 insertions, 64 deletions
diff --git a/pkgs/haskell/blessings.nix b/pkgs/haskell/blessings.nix
index 65661aa..9ed1664 100644
--- a/pkgs/haskell/blessings.nix
+++ b/pkgs/haskell/blessings.nix
@@ -1,16 +1,18 @@
-{ mkDerivation, base, bytestring, fetchgit, hspec, QuickCheck, lib, mylib, text }:
-
+{ mkDerivation, base, dlist, extra, fetchgit, hspec, lib
+, mono-traversable, QuickCheck, seq2, text
+}:
mkDerivation {
pname = "blessings";
- version = "2.3.0";
+ version = "3.0.0";
src = fetchgit {
- url = http://cgit.ni.krebsco.de/blessings;
- rev = "refs/tags/v2.3.0";
- hash = "sha256-fS79UOHBMfJHyz7E0Rx4lKZSZOD2G99h2zuDT+SOUJQ=";
+ url = "https://cgit.krebsco.de/blessings";
+ sha256 = "1x4wa9v9kgd8z11pxf9clsbk1527bqq86zvk1mp26dzwkbw8kgpk";
+ rev = "2e33bc5ac86c81f0c9ee823b4913bce776ba5a0d";
+ fetchSubmodules = true;
};
- libraryHaskellDepends = [ base bytestring text ];
- testHaskellDepends = [ base hspec QuickCheck ];
- doHaddock = false;
- # WTFPL is the true license, which is unknown to cabal.
- license = lib.licenses.wtfpl;
+ libraryHaskellDepends = [
+ base dlist extra mono-traversable seq2 text
+ ];
+ testHaskellDepends = [ base hspec mono-traversable QuickCheck ];
+ license = lib.licenses.mit;
}
diff --git a/pkgs/haskell/desktop-pager.nix b/pkgs/haskell/desktop-pager.nix
index 8301235..fd90c1e 100644
--- a/pkgs/haskell/desktop-pager.nix
+++ b/pkgs/haskell/desktop-pager.nix
@@ -1,15 +1,15 @@
{ mkDerivation, aeson, base, blessings, bytestring, containers
-, data-default, extra, fetchgit, hack, lib, optparse-applicative
-, probability, speculate, split, terminal-scanner, terminal-size
-, text, unix, utf8-string, X11
+, data-default, extra, fetchgit, hack, lib, mono-traversable
+, optparse-applicative, probability, speculate, split
+, terminal-scanner, terminal-size, text, unix, utf8-string, X11
}:
mkDerivation {
pname = "desktop-pager";
- version = "1.0.0";
+ version = "1.0.2";
src = fetchgit {
url = "https://cgit.krebsco.de/desktop-pager";
- sha256 = "1hb8an31szwx9zixzb1m7219jrz3cdz57phf45r4b3n6qrzcn35l";
- rev = "3919fb8adc06134a304d4fcbcd192c8707c06cbd";
+ sha256 = "1dvqm8a0d8lh227ck0dhyfxkjknhjgjpcwjh3dvps3721p1qldjn";
+ rev = "f792f1db052afd4f4af9bca568fe2b8fb96ea7e8";
fetchSubmodules = true;
};
isLibrary = true;
@@ -17,8 +17,8 @@ mkDerivation {
libraryHaskellDepends = [ base extra utf8-string X11 ];
executableHaskellDepends = [
aeson base blessings bytestring containers data-default hack
- optparse-applicative probability speculate split terminal-scanner
- terminal-size text unix X11
+ mono-traversable optparse-applicative probability speculate split
+ terminal-scanner terminal-size text unix X11
];
license = lib.licenses.mit;
}
diff --git a/pkgs/haskell/hack.nix b/pkgs/haskell/hack.nix
index 0eb0232..b6c3ca6 100644
--- a/pkgs/haskell/hack.nix
+++ b/pkgs/haskell/hack.nix
@@ -1,22 +1,22 @@
{ mkDerivation, base, blessings, containers, data-default, fetchgit
-, lens, lib, mtl, old-locale, process, terminal-scanner, time, unix
-, zippers
+, lens, lib, mono-traversable, mtl, old-locale, process
+, terminal-scanner, time, unix, zippers
}:
mkDerivation {
pname = "hack";
- version = "1.0.3";
+ version = "1.0.4";
src = fetchgit {
url = "https://cgit.krebsco.de/hack";
- sha256 = "04vxcfm204sxn3v48ch27srgqgpiqbm9i82lrmgp1yyx84wchq32";
- rev = "a6fc1e51f1f87a7cc485a47000f23f1f054beb95";
+ sha256 = "1in95j2fx12kh994ajd5wpzsf5nrk7bs1rqjjnn7gq5zal216kkq";
+ rev = "4f81ea639fb7754b1169f358bdae8225e6e4e2b3";
fetchSubmodules = true;
};
isLibrary = true;
isExecutable = true;
libraryHaskellDepends = [ base ];
executableHaskellDepends = [
- base blessings containers data-default lens mtl old-locale process
- terminal-scanner time unix zippers
+ base blessings containers data-default lens mono-traversable mtl
+ old-locale process terminal-scanner time unix zippers
];
license = lib.licenses.mit;
mainProgram = "hack";
diff --git a/pkgs/haskell/mailaids.nix b/pkgs/haskell/mailaids.nix
new file mode 100644
index 0000000..815613c
--- /dev/null
+++ b/pkgs/haskell/mailaids.nix
@@ -0,0 +1,22 @@
+{ mkDerivation, aeson, aeson-pretty, base, bytestring
+, case-insensitive, either, fetchgit, lens, lib
+, optparse-applicative, purebred-email, text, vector, word8
+}:
+mkDerivation {
+ pname = "mailaids";
+ version = "1.1.0+parts";
+ src = fetchgit {
+ url = "https://cgit.krebsco.de/mailaids";
+ sha256 = "0xwd196zrgfv2d7x1pgp1yzqj1hrpwr0m54i6mnrmk6022yx46hl";
+ rev = "02d8996bb6aaeb2881e2df33da5167b649edb822";
+ fetchSubmodules = true;
+ };
+ isLibrary = false;
+ isExecutable = true;
+ executableHaskellDepends = [
+ aeson aeson-pretty base bytestring case-insensitive either lens
+ optparse-applicative purebred-email text vector word8
+ ];
+ license = lib.licenses.mit;
+ mainProgram = "mailaid";
+}
diff --git a/pkgs/haskell/much.nix b/pkgs/haskell/much.nix
index 9744a25..cdfe011 100644
--- a/pkgs/haskell/much.nix
+++ b/pkgs/haskell/much.nix
@@ -2,18 +2,19 @@
, blaze-builder, blessings, bytestring, case-insensitive
, containers, data-default, deepseq, directory, either
, email-header, fetchgit, filepath, friendly-time, http-types
-, hyphenation, lib, linebreak, network, old-locale
-, optparse-applicative, process, random, rosezipper, safe
-, servant-server, split, terminal-scanner, terminal-size, text
-, time, transformers, transformers-compat, unix, vector, wai, warp
+, hyphenation, lib, linebreak, mono-traversable, network
+, old-locale, optparse-applicative, process, process-extras, random
+, rosezipper, safe, servant-server, split, terminal-scanner
+, terminal-size, text, text-wcwidth, time, transformers
+, transformers-compat, unix, vector, wai, warp
}:
-mkDerivation rec {
+mkDerivation {
pname = "much";
- version = "1.3.2";
+ version = "1.4.2";
src = fetchgit {
url = "https://cgit.krebsco.de/much";
- sha256 = "001lvn4f3pgxwq0fgxvk0jl33r54gvh908r6wx02fw4s6b3sysc0";
- rev = "3a0fe1da7c33b024128079f5810c6a99b25aebe7";
+ sha256 = "088cbzlvh23625617qyp1s3q0qb4il4b3f4ji061gq3bikycrhkf";
+ rev = "36184551980eb59b67189c2a782c7f4461285d23";
fetchSubmodules = true;
};
isLibrary = true;
@@ -22,16 +23,18 @@ mkDerivation rec {
aeson attoparsec base base64-bytestring blaze-builder blessings
bytestring case-insensitive containers data-default deepseq
directory either email-header filepath friendly-time http-types
- hyphenation linebreak network old-locale optparse-applicative
- process random rosezipper safe servant-server split
- terminal-scanner terminal-size text time transformers
- transformers-compat unix vector wai warp
+ hyphenation linebreak mono-traversable network old-locale
+ optparse-applicative process process-extras random rosezipper safe
+ servant-server split terminal-scanner terminal-size text
+ text-wcwidth time transformers transformers-compat unix vector wai
+ warp
];
executableHaskellDepends = [
aeson base blessings bytestring case-insensitive containers
- data-default deepseq directory filepath hyphenation linebreak
- process rosezipper safe terminal-scanner text time transformers
- unix
+ data-default deepseq directory hyphenation linebreak
+ mono-traversable process rosezipper safe terminal-scanner text
+ text-wcwidth time transformers
];
license = lib.licenses.mit;
+ mainProgram = "much";
}
diff --git a/pkgs/haskell/purebred-email/default.nix b/pkgs/haskell/purebred-email/default.nix
new file mode 100644
index 0000000..34c3ed6
--- /dev/null
+++ b/pkgs/haskell/purebred-email/default.nix
@@ -0,0 +1,31 @@
+{ mkDerivation, attoparsec, base, base64-bytestring, bytestring
+, case-insensitive, concise, deepseq, fetchgit, hedgehog, lens, lib
+, QuickCheck, quickcheck-instances, random, semigroupoids
+, stringsearch, tasty, tasty-golden, tasty-hedgehog, tasty-hunit
+, tasty-quickcheck, text, time
+}:
+mkDerivation {
+ pname = "purebred-email";
+ version = "0.6.0.2";
+ src = fetchgit {
+ url = "https://github.com/purebred-mua/purebred-email";
+ hash = "sha256-P9RmQZ4fvQ1LGdQXFAAP/43VR8TZtQASs2cDK/zjHWg=";
+ rev = "23c69d5c923a91581c366e23fc7de3992dd81e27";
+ fetchSubmodules = true;
+ };
+ isLibrary = true;
+ isExecutable = true;
+ libraryHaskellDepends = [
+ attoparsec base base64-bytestring bytestring case-insensitive
+ concise deepseq lens random semigroupoids stringsearch text time
+ ];
+ testHaskellDepends = [
+ attoparsec base bytestring case-insensitive hedgehog lens
+ QuickCheck quickcheck-instances random tasty tasty-golden
+ tasty-hedgehog tasty-hunit tasty-quickcheck text time
+ ];
+ homepage = "https://github.com/purebred-mua/purebred-email";
+ description = "types and parser for email messages (including MIME)";
+ license = lib.licenses.agpl3Plus;
+ jailbreak = true;
+}
diff --git a/pkgs/haskell/purebred-email/untweak-mime-version-header.patch b/pkgs/haskell/purebred-email/untweak-mime-version-header.patch
new file mode 100644
index 0000000..97baf7a
--- /dev/null
+++ b/pkgs/haskell/purebred-email/untweak-mime-version-header.patch
@@ -0,0 +1,65 @@
+diff --git a/src/Data/MIME.hs b/src/Data/MIME.hs
+index 19af53e..be8cbd4 100644
+--- a/src/Data/MIME.hs
++++ b/src/Data/MIME.hs
+@@ -810,7 +810,6 @@ multipart takeTillEnd boundary =
+ -- | Sets the @MIME-Version: 1.0@ header.
+ --
+ instance RenderMessage MIME where
+- tweakHeaders = set (headers . at "MIME-Version") (Just "1.0")
+ buildBody h z = Just $ case z of
+ Part partbody -> Builder.byteString partbody
+ Encapsulated msg -> buildMessage msg
+diff --git a/tests/Generator.hs b/tests/Generator.hs
+index 9e1f166..23bd122 100644
+--- a/tests/Generator.hs
++++ b/tests/Generator.hs
+@@ -64,7 +64,7 @@ exampleMailsParseSuccessfully =
+ textPlain7bit :: MIMEMessage
+ textPlain7bit =
+ let m = createTextPlainMessage "This is a simple mail."
+- in over headers (\(Headers xs) -> Headers $ (CI.mk "Subject", "Hello there") : xs) m
++ in over headers (\(Headers xs) -> Headers $ (CI.mk "MIME-Version", "1.0") : (CI.mk "Subject", "Hello there") : xs) m
+
+ multiPartMail :: MIMEMessage
+ multiPartMail =
+@@ -72,13 +72,16 @@ multiPartMail =
+ to' = Single $ Mailbox Nothing (AddrSpec "bar" (DomainDotAtom $ pure "bar.com"))
+ subject = "Hello there"
+ p = createTextPlainMessage "This is a simple mail."
++ & set (headers . at "MIME-Version") (Just "1.0")
+ a = createAttachment
+ contentTypeApplicationOctetStream
+ (Just "foo.bin")
+ "fileContentsASDF"
++ & set (headers . at "MIME-Version") (Just "1.0")
+ now = UTCTime (ModifiedJulianDay 123) (secondsToDiffTime 123)
+ in createMultipartMixedMessage "asdf" (fromList [p, a])
+- & set (headers . at "From") (Just $ renderMailboxes [from'])
++ & set (headers . at "MIME-Version") (Just "1.0")
++ . set (headers . at "From") (Just $ renderMailboxes [from'])
+ . set (headers . at "To") (Just $ renderAddresses [to'])
+ . set (headers . at "Date") (Just $ renderRFC5422Date now)
+ . set (headers . at "Subject") (Just $ T.encodeUtf8 subject)
+diff --git a/tests/Message.hs b/tests/Message.hs
+index 6711519..3e40397 100644
+--- a/tests/Message.hs
++++ b/tests/Message.hs
+@@ -29,7 +29,7 @@ import Data.Char (isPrint)
+ import Data.Foldable (fold)
+ import Data.List.NonEmpty (NonEmpty(..), intersperse)
+
+-import Control.Lens (set, view)
++import Control.Lens ((&), at, set, view)
+ import qualified Data.ByteString as B
+ import qualified Data.Text as T
+
+@@ -99,7 +99,7 @@ genMessage = Gen.choice [ genTextPlain, genMultipart, encapsulate <$> genMessage
+ prop_messageRoundTrip :: Property
+ prop_messageRoundTrip = property $ do
+ msg <- forAll genMessage
+- parse (message mime) (renderMessage msg) === Right msg
++ parse (message mime) (renderMessage $ msg & set (headers . at "MIME-Version") (Just "1.0")) === Right msg
+
+ prop_messageFromRoundTrip :: Property
+ prop_messageFromRoundTrip = property $ do
diff --git a/pkgs/haskell/seq2.nix b/pkgs/haskell/seq2.nix
new file mode 100644
index 0000000..9d18f92
--- /dev/null
+++ b/pkgs/haskell/seq2.nix
@@ -0,0 +1,14 @@
+{ mkDerivation, base, fetchgit, lib }:
+mkDerivation {
+ pname = "seq2";
+ version = "1.0.0";
+ src = fetchgit {
+ url = "https://cgit.krebsco.de/seq2";
+ sha256 = "03b90b68xpk00v13cc45aw148z1spph8vyqga8vmif9iv5g0lfjn";
+ rev = "6aeb56c36a9a47c9216c8f9252ca26d091506c73";
+ fetchSubmodules = true;
+ };
+ libraryHaskellDepends = [ base ];
+ homepage = "https://cgit.krebsco.de/seq2";
+ license = lib.licenses.mit;
+}
diff --git a/pkgs/haskell/terminal-scanner.nix b/pkgs/haskell/terminal-scanner.nix
index 4801df7..ca16644 100644
--- a/pkgs/haskell/terminal-scanner.nix
+++ b/pkgs/haskell/terminal-scanner.nix
@@ -1,11 +1,11 @@
{ mkDerivation, base, fetchgit, lib }:
mkDerivation {
pname = "terminal-scanner";
- version = "1.0.1";
+ version = "1.1.0";
src = fetchgit {
url = "https://cgit.krebsco.de/terminal-scanner";
- sha256 = "1ic8j2nlhmy76fnqji277wsl1cikd9y4lwqqcxzldjx1vi61r13r";
- rev = "3c5301303230f563214c5ff003f9fc8e2e0a7199";
+ sha256 = "0x37g62km90pgamrn3slr513jw29cb9zmrnb9frs8j8r9yq50fz0";
+ rev = "a77acbcc13f8eb50e1277d07cf2a10004b58af71";
fetchSubmodules = true;
};
libraryHaskellDepends = [ base ];
diff --git a/pkgs/haskell/terminal-utilities.nix b/pkgs/haskell/terminal-utilities.nix
new file mode 100644
index 0000000..eeab32f
--- /dev/null
+++ b/pkgs/haskell/terminal-utilities.nix
@@ -0,0 +1,13 @@
+{ mkDerivation, base, fetchgit, lib }:
+mkDerivation {
+ pname = "terminal-utilities";
+ version = "1.0.0";
+ src = fetchgit {
+ url = "https://cgit.krebsco.de/terminal-utilities";
+ sha256 = "0kpkm87g5ab0s22zly994ql8hfc0gbqc5s7ln4ngav2k91a0wp7j";
+ rev = "e2c0cc11a71c785b268f31f60bed2a79e00a4d61";
+ fetchSubmodules = true;
+ };
+ libraryHaskellDepends = [ base ];
+ license = lib.licenses.mit;
+}
diff --git a/pkgs/haskell/text-wcwidth.nix b/pkgs/haskell/text-wcwidth.nix
new file mode 100644
index 0000000..e6a43d6
--- /dev/null
+++ b/pkgs/haskell/text-wcwidth.nix
@@ -0,0 +1,15 @@
+{ mkDerivation, base, fetchgit, lib, mono-traversable, text
+, wcwidth
+}:
+mkDerivation {
+ pname = "text-wcwidth";
+ version = "1.0.0";
+ src = fetchgit {
+ url = "https://cgit.krebsco.de/text-wcwidth";
+ sha256 = "1x51za2vpxgdz05arks3a98v9mz12s64rcncgg34fmir42f27li1";
+ rev = "d70945bdfcf1bebf3dadb6b6c8ac7c75b4d3e9d0";
+ fetchSubmodules = true;
+ };
+ libraryHaskellDepends = [ base mono-traversable text wcwidth ];
+ license = lib.licenses.mit;
+}
diff --git a/pkgs/haskell/xmonad-tv/src/main.hs b/pkgs/haskell/xmonad-tv/src/main.hs
index 711f9eb..05817af 100644
--- a/pkgs/haskell/xmonad-tv/src/main.hs
+++ b/pkgs/haskell/xmonad-tv/src/main.hs
@@ -9,6 +9,7 @@ import XMonad.Hooks.EwmhDesktops (ewmh)
import XMonad.Hooks.EwmhDesktops.Extra (ewmhExtra)
import XMonad.Hooks.RefocusLast (refocusLastLayoutHook, toggleFocus)
+import Control.Monad (void)
import Control.Monad.Extra (whenJustM)
import qualified Data.Aeson
import qualified Data.ByteString.Char8
@@ -23,10 +24,10 @@ import System.Posix.Process (executeFile)
import XMonad.Actions.DynamicWorkspaces (removeEmptyWorkspace)
import XMonad.Actions.CycleWS (toggleWS)
import XMonad.Layout.Gaps (Direction2D(U,R,D,L), gaps)
-import XMonad.Layout.NoBorders ( smartBorders )
+import XMonad.Layout.FocusTracking (focusTracking)
+import XMonad.Layout.NoBorders (noBorders)
import XMonad.Layout.ResizableTile (ResizableTall(ResizableTall))
import XMonad.Layout.ResizableTile (MirrorResize(MirrorExpand,MirrorShrink))
-import XMonad.Layout.StateFull (pattern StateFull)
import qualified XMonad.StackSet as W
import Data.Map (Map)
import qualified Data.Map as Map
@@ -44,6 +45,11 @@ import XMonad.Hooks.Place (placeHook, smart)
import XMonad.Actions.PerWorkspaceKeys (chooseAction)
import Shutdown (shutdown, newShutdownEventHandler)
+import System.IO.Unsafe (unsafePerformIO)
+
+
+sliceEnvPath :: FilePath
+sliceEnvPath = unsafePerformIO (getEnv "XMONAD_CACHE_DIR") <> "/slice.env"
main :: IO ()
@@ -70,6 +76,7 @@ readEnv' defaultValue name =
mainNoArgs :: IO ()
mainNoArgs = do
+ getEnvironment >>= \env -> writeFile sliceEnvPath $ unlines [ k <> "=" <> v | (k, v) <- env]
myMasterDelta <- readEnv' (1 / 20) "XMONAD_MASTER_DELTA" :: IO Rational
myMasterWidth <- readEnv' (1 / 2) "XMONAD_MASTER_WIDTH" :: IO Rational
myScreenGaps <- readEnv' [] "XMONAD_SCREEN_GAPS" :: IO [Int]
@@ -95,14 +102,13 @@ mainNoArgs = do
, layoutHook =
refocusLastLayoutHook $
gaps (zip [U,R,D,L] myScreenGaps) $
- smartBorders $
- ResizableTall
- 1
- myMasterDelta
- (myMasterWidth + 2 * fromIntegral (borderWidth def) / fromIntegral myScreenWidth)
- []
- |||
- StateFull
+ ResizableTall
+ 1
+ myMasterDelta
+ (myMasterWidth + 2 * fromIntegral (borderWidth def) / fromIntegral myScreenWidth)
+ []
+ |||
+ noBorders (focusTracking Full)
, manageHook =
composeAll
[ appName =? "fzmenu-urxvt" --> doCenterFloat
@@ -134,16 +140,22 @@ handleFocusChangeEvent = \case
forkFile :: FilePath -> [String] -> Maybe [(String, String)] -> X ()
-forkFile path args env =
- xfork (executeFile path True args env) >> return ()
+forkFile path args env = void . xfork $ do
+ environment <- getEnvironment
+ executeFile path True args (env <> Just environment)
-spawnRootTerm :: X ()
-spawnRootTerm =
- forkFile
- {-pkg:alacritty-tv-}"alacritty"
- ["--profile=root", "-e", "/run/wrappers/bin/su", "-"]
- Nothing
+forkFileInSlice :: String -> FilePath -> [String] -> X ()
+forkFileInSlice sliceName path args = void . xfork $
+ executeFile {-pkg:systemd-}"systemd-run" True
+ ( "--collect"
+ : "--user"
+ : "--slice=" <> sliceName
+ : "--property=EnvironmentFile=" <> sliceEnvPath
+ : path
+ : args
+ )
+ Nothing
myKeys :: XConfig Layout -> Map (KeyMask, KeySym) (X ())
@@ -156,8 +168,8 @@ myKeys conf = Map.fromList $
, ((_4 , xK_p ), forkFile {-pkg:fzmenu-}"passmenu" [] Nothing)
, ((_4C , xK_p ), forkFile {-pkg:fzmenu-}"passmenu" ["--phase2-method=copy"] Nothing)
- , ((_4 , xK_x ), forkFile {-pkg:alacritty-tv-}"alacritty" ["--singleton"] Nothing)
- , ((_4C , xK_x ), spawnRootTerm)
+ , ((_4 , xK_x ), forkFileInSlice "alacritty" {-pkg:alacritty-tv-}"alacritty" ["--dtach", "--singleton"])
+ , ((_4C , xK_x ), forkFileInSlice "alacritty" {-pkg:alacritty-tv-}"alacritty" ["--profile=root", "-e", "/run/wrappers/bin/su", "-"])
, ((_C , xK_Menu ), toggleWS)