summaryrefslogtreecommitdiffstats
path: root/tv
diff options
context:
space:
mode:
authorlassulus <lassulus@lassul.us>2022-12-05 21:32:08 +0100
committerlassulus <lassulus@lassul.us>2022-12-05 21:32:08 +0100
commit0447cf6a5fd3435a0acb68d077b0380da12f104d (patch)
treebb3644b84ce81b64443efd8e767a121a741bb008 /tv
parent5d0d1993b6207c283189a2c81c8c76f549d44b2a (diff)
parent8e32364d6299b5f5816d886653349794aadc1ec9 (diff)
Merge remote-tracking branch 'ni/master' into 22.11
Diffstat (limited to 'tv')
-rw-r--r--tv/2configs/default.nix15
-rw-r--r--tv/2configs/gitrepos.nix2
-rw-r--r--tv/2configs/hw/x220.nix4
-rw-r--r--tv/2configs/vim.nix2
-rw-r--r--tv/5pkgs/haskell/xmonad-tv/default.nix8
-rw-r--r--tv/5pkgs/haskell/xmonad-tv/src/Build.hs24
-rw-r--r--tv/5pkgs/haskell/xmonad-tv/src/Shutdown.hs113
-rw-r--r--tv/5pkgs/haskell/xmonad-tv/src/main.hs44
-rw-r--r--tv/5pkgs/haskell/xmonad-tv/src/xmonad-tv.cabal5
-rw-r--r--tv/5pkgs/override/fzf/complete1.patch90
-rw-r--r--tv/5pkgs/override/fzf/default.nix8
-rw-r--r--tv/5pkgs/vim/default.nix4
-rw-r--r--tv/5pkgs/vim/hack.nix2
-rw-r--r--tv/5pkgs/vim/nix.nix2
-rw-r--r--tv/5pkgs/vim/showsyntax.nix2
-rw-r--r--tv/5pkgs/vim/tv.nix2
-rw-r--r--tv/5pkgs/vim/vim.nix2
17 files changed, 226 insertions, 103 deletions
diff --git a/tv/2configs/default.nix b/tv/2configs/default.nix
index f3ce2da40..c9047023e 100644
--- a/tv/2configs/default.nix
+++ b/tv/2configs/default.nix
@@ -46,14 +46,15 @@ with import <stockholm/lib>;
}
{
- # TODO check if both are required:
- nix.sandboxPaths = [ "/etc/protocols" pkgs.iana-etc.outPath ];
-
- nix.requireSignedBinaryCaches = true;
-
- nix.binaryCaches = ["https://cache.nixos.org"];
+ nix.extraOptions = ''
+ auto-optimise-store = true
+ '';
- nix.useSandbox = true;
+ # TODO check if both are required:
+ nix.settings.extra-sandbox-paths = [
+ "/etc/protocols"
+ pkgs.iana-etc.outPath
+ ];
}
{
nixpkgs.config.allowUnfree = false;
diff --git a/tv/2configs/gitrepos.nix b/tv/2configs/gitrepos.nix
index 50444c1ee..4fba5fe7b 100644
--- a/tv/2configs/gitrepos.nix
+++ b/tv/2configs/gitrepos.nix
@@ -134,7 +134,6 @@ let {
web-routes-wai-custom = {};
xintmap = {};
xmonad-aeson = {};
- xmonad-stockholm = {};
xmonad-web = {};
} // mapAttrs (_: recursiveUpdate { cgit.section = "4. museum"; }) {
cac-api = {
@@ -165,6 +164,7 @@ let {
soundcloud = {
cgit.desc = "SoundCloud command line interface";
};
+ xmonad-stockholm = {};
});
restricted-repos = mapAttrs make-restricted-repo (
diff --git a/tv/2configs/hw/x220.nix b/tv/2configs/hw/x220.nix
index 8c68cdef0..25e2effbd 100644
--- a/tv/2configs/hw/x220.nix
+++ b/tv/2configs/hw/x220.nix
@@ -28,8 +28,8 @@ in
}
{
- nix.buildCores = 2;
- nix.maxJobs = 2;
+ nix.settings.cores = 2;
+ nix.settings.max-jobs = 2;
}
(if lib.versionAtLeast (lib.versions.majorMinor lib.version) "21.11" then {
nix.daemonCPUSchedPolicy = "batch";
diff --git a/tv/2configs/vim.nix b/tv/2configs/vim.nix
index fed74c921..e296a0c8e 100644
--- a/tv/2configs/vim.nix
+++ b/tv/2configs/vim.nix
@@ -13,7 +13,7 @@ let {
environment.variables.VIMINIT = ":so /etc/vimrc";
};
- extra-runtimepath = concatMapStringsSep "," (pkg: "${pkg.rtp}") [
+ extra-runtimepath = pkgs.tv.vim.makeRuntimePath [
pkgs.tv.vimPlugins.elixir
pkgs.tv.vimPlugins.file-line
pkgs.tv.vimPlugins.fzf
diff --git a/tv/5pkgs/haskell/xmonad-tv/default.nix b/tv/5pkgs/haskell/xmonad-tv/default.nix
index edb5f258e..be3eca982 100644
--- a/tv/5pkgs/haskell/xmonad-tv/default.nix
+++ b/tv/5pkgs/haskell/xmonad-tv/default.nix
@@ -1,6 +1,6 @@
{ mkDerivation, aeson, base, bytestring, containers, directory
-, extra, lib, template-haskell, th-env, unix, X11, xmonad
-, xmonad-contrib, xmonad-stockholm
+, extra, filepath, lib, systemd, template-haskell, th-env
+, transformers, unix, X11, xmonad, xmonad-contrib
}:
mkDerivation {
pname = "xmonad-tv";
@@ -9,8 +9,8 @@ mkDerivation {
isLibrary = false;
isExecutable = true;
executableHaskellDepends = [
- aeson base bytestring containers directory extra template-haskell
- th-env unix X11 xmonad xmonad-contrib xmonad-stockholm
+ aeson base bytestring containers directory extra filepath systemd
+ template-haskell th-env transformers unix X11 xmonad xmonad-contrib
];
license = lib.licenses.mit;
}
diff --git a/tv/5pkgs/haskell/xmonad-tv/src/Build.hs b/tv/5pkgs/haskell/xmonad-tv/src/Build.hs
new file mode 100644
index 000000000..553a129b1
--- /dev/null
+++ b/tv/5pkgs/haskell/xmonad-tv/src/Build.hs
@@ -0,0 +1,24 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE TypeApplications #-}
+
+module Build where
+
+import XMonad (Dimension)
+import THEnv.JSON (getCompileEnvJSONExp)
+
+
+myFont :: String
+myFont =
+ "-schumacher-*-*-*-*-*-*-*-*-*-*-*-iso10646-*"
+
+myScreenWidth :: Dimension
+myScreenWidth =
+ $(getCompileEnvJSONExp (id @Dimension) "XMONAD_BUILD_SCREEN_WIDTH")
+
+myTermFontWidth :: Dimension
+myTermFontWidth =
+ $(getCompileEnvJSONExp (id @Dimension) "XMONAD_BUILD_TERM_FONT_WIDTH")
+
+myTermPadding :: Dimension
+myTermPadding =
+ 2
diff --git a/tv/5pkgs/haskell/xmonad-tv/src/Shutdown.hs b/tv/5pkgs/haskell/xmonad-tv/src/Shutdown.hs
new file mode 100644
index 000000000..d4a4d93cf
--- /dev/null
+++ b/tv/5pkgs/haskell/xmonad-tv/src/Shutdown.hs
@@ -0,0 +1,113 @@
+{-# LANGUAGE LambdaCase #-}
+
+module Shutdown
+ ( newShutdownEventHandler
+ , shutdown
+ )
+ where
+
+import Control.Applicative ((<|>), empty)
+import Control.Concurrent (threadDelay)
+import Control.Monad (forever, guard, when)
+import Data.Monoid (All(All))
+import System.Directory (XdgDirectory(XdgData), createDirectoryIfMissing, doesFileExist, getAppUserDataDirectory, getXdgDirectory)
+import System.Exit (exitSuccess)
+import System.Environment (lookupEnv)
+import System.FilePath ((</>))
+import System.IO.Error (isDoesNotExistError, tryIOError)
+import System.IO (hPutStrLn, stderr)
+import System.Posix.Process (getProcessID)
+import System.Posix.Signals (nullSignal, signalProcess)
+import System.Posix.Types (ProcessID)
+import XMonad hiding (getXMonadDataDir)
+
+
+-- XXX this is for compatibility with both xmonad<0.17 and xmonad>=0.17
+getXMonadDataDir :: IO String
+getXMonadDataDir = xmEnvDir <|> xmDir <|> xdgDir
+ where
+ -- | Check for xmonad's environment variables first
+ xmEnvDir :: IO String
+ xmEnvDir =
+ maybe empty pure =<< lookupEnv "XMONAD_DATA_DIR"
+
+ -- | Check whether the config file or a build script is in the
+ -- @~\/.xmonad@ directory
+ xmDir :: IO String
+ xmDir = do
+ d <- getAppUserDataDirectory "xmonad"
+ conf <- doesFileExist $ d </> "xmonad.hs"
+ build <- doesFileExist $ d </> "build"
+ pid <- doesFileExist $ d </> "xmonad.pid"
+
+ -- Place *everything* in ~/.xmonad if yes
+ guard $ conf || build || pid
+ pure d
+
+ -- | Use XDG directories as a fallback
+ xdgDir :: IO String
+ xdgDir = do
+ d <- getXdgDirectory XdgData "xmonad"
+ d <$ createDirectoryIfMissing True d
+
+
+newShutdownEventHandler :: IO (Event -> X All)
+newShutdownEventHandler = do
+ writeProcessIDToFile
+ return handleShutdownEvent
+
+handleShutdownEvent :: Event -> X All
+handleShutdownEvent = \case
+ ClientMessageEvent { ev_message_type = mt } -> do
+ isShutdownEvent <- (mt ==) <$> getAtom "XMONAD_SHUTDOWN"
+ when isShutdownEvent $ do
+ broadcastMessage ReleaseResources
+ writeStateToFile
+ io exitSuccess >> return ()
+ return (All (not isShutdownEvent))
+ _ ->
+ return (All True)
+
+sendShutdownEvent :: IO ()
+sendShutdownEvent = do
+ dpy <- openDisplay ""
+ rw <- rootWindow dpy $ defaultScreen dpy
+ a <- internAtom dpy "XMONAD_SHUTDOWN" False
+ allocaXEvent $ \e -> do
+ setEventType e clientMessage
+ setClientMessageEvent e rw a 32 0 currentTime
+ sendEvent dpy rw False structureNotifyMask e
+ sync dpy False
+
+shutdown :: IO ()
+shutdown = do
+ pid <- readProcessIDFromFile
+ sendShutdownEvent
+ hPutStrLn stderr ("waiting for: " <> show pid)
+ result <- tryIOError (waitProcess pid)
+ if isSuccess result
+ then hPutStrLn stderr ("result: " <> show result <> " [AKA success^_^]")
+ else hPutStrLn stderr ("result: " <> show result)
+ where
+ isSuccess = either isDoesNotExistError (const False)
+
+waitProcess :: ProcessID -> IO ()
+waitProcess pid = forever (signalProcess nullSignal pid >> threadDelay 10000)
+
+--
+-- PID file stuff
+--
+
+getProcessIDFileName :: IO FilePath
+getProcessIDFileName = (</> "xmonad.pid") <$> getXMonadDataDir
+
+writeProcessIDToFile :: IO ()
+writeProcessIDToFile = do
+ pidFileName <- getProcessIDFileName
+ pid <- getProcessID
+ writeFile pidFileName (show pid)
+
+readProcessIDFromFile :: IO ProcessID
+readProcessIDFromFile = do
+ pidFileName <- getProcessIDFileName
+ read <$> readFile pidFileName
diff --git a/tv/5pkgs/haskell/xmonad-tv/src/main.hs b/tv/5pkgs/haskell/xmonad-tv/src/main.hs
index 81373f410..d346bfd66 100644
--- a/tv/5pkgs/haskell/xmonad-tv/src/main.hs
+++ b/tv/5pkgs/haskell/xmonad-tv/src/main.hs
@@ -1,6 +1,4 @@
{-# LANGUAGE LambdaCase #-}
-{-# LANGUAGE TemplateHaskell #-}
-{-# LANGUAGE TypeApplications #-}
module Main (main) where
@@ -32,25 +30,9 @@ import Data.Ratio
import XMonad.Hooks.Place (placeHook, smart)
import XMonad.Actions.PerWorkspaceKeys (chooseAction)
-import XMonad.Stockholm.Pager
-import XMonad.Stockholm.Shutdown
+import Shutdown (shutdown, newShutdownEventHandler)
-import THEnv.JSON (getCompileEnvJSONExp)
-
-
-myFont :: String
-myFont = "-schumacher-*-*-*-*-*-*-*-*-*-*-*-iso10646-*"
-
-myScreenWidth :: Dimension
-myScreenWidth =
- $(getCompileEnvJSONExp (id @Dimension) "XMONAD_BUILD_SCREEN_WIDTH")
-
-myTermFontWidth :: Dimension
-myTermFontWidth =
- $(getCompileEnvJSONExp (id @Dimension) "XMONAD_BUILD_TERM_FONT_WIDTH")
-
-myTermPadding :: Dimension
-myTermPadding = 2
+import Build (myFont, myScreenWidth, myTermFontWidth, myTermPadding)
main :: IO ()
@@ -154,8 +136,6 @@ myKeys conf = Map.fromList $
, ((_4 , xK_x ), chooseAction spawnTermAt)
, ((_4C , xK_x ), spawnRootTerm)
- , ((0 , xK_Menu ), gets windowset >>= allWorkspaceNames >>= pager pagerConfig (windows . W.view) )
- , ((_S , xK_Menu ), gets windowset >>= allWorkspaceNames >>= pager pagerConfig (windows . W.shift) )
, ((_C , xK_Menu ), toggleWS)
, ((_4 , xK_space ), withFocused $ \w -> ifM (isFloatingX w) xdeny $ sendMessage NextLayout)
@@ -233,23 +213,3 @@ xdeny =
, "-e", "sleep", "0.05"
]
Nothing
-
-
-pagerConfig :: PagerConfig
-pagerConfig = def
- { pc_font = myFont
- , pc_cellwidth = 64
- , pc_matchmethod = MatchPrefix
- , pc_windowColors = windowColors
- }
- where
- windowColors _ _ _ True _ = ("#ef4242","#ff2323")
- windowColors wsf m c u wf = do
- let y = defaultWindowColors wsf m c u wf
- if m == False && wf == True
- then ("#402020", snd y)
- else y
-
-
-allWorkspaceNames :: W.StackSet i l a sid sd -> X [i]
-allWorkspaceNames = return . map W.tag . W.workspaces
diff --git a/tv/5pkgs/haskell/xmonad-tv/src/xmonad-tv.cabal b/tv/5pkgs/haskell/xmonad-tv/src/xmonad-tv.cabal
index f3bd2e0ab..a3ddcb039 100644
--- a/tv/5pkgs/haskell/xmonad-tv/src/xmonad-tv.cabal
+++ b/tv/5pkgs/haskell/xmonad-tv/src/xmonad-tv.cabal
@@ -15,14 +15,15 @@ executable xmonad
containers,
directory,
extra,
+ filepath,
template-haskell,
th-env,
unix,
X11,
xmonad,
- xmonad-contrib,
- xmonad-stockholm
+ xmonad-contrib
other-modules:
+ Shutdown,
THEnv.JSON
default-language: Haskell2010
ghc-options: -O2 -Wall -threaded
diff --git a/tv/5pkgs/override/fzf/complete1.patch b/tv/5pkgs/override/fzf/complete1.patch
index 4b2126a2c..3e3f2c4d5 100644
--- a/tv/5pkgs/override/fzf/complete1.patch
+++ b/tv/5pkgs/override/fzf/complete1.patch
@@ -1,50 +1,72 @@
+commit 57cbd76c068121b685399fdb4649e7ba537983d6
+Author: tv <tv@krebsco.de>
+Date: Mon Dec 5 15:24:30 2022 +0100
+
+ Add --complete-1 option
+
+diff --git a/man/man1/fzf.1 b/man/man1/fzf.1
+index 79e7291..3b8a753 100644
+--- a/man/man1/fzf.1
++++ b/man/man1/fzf.1
+@@ -685,6 +685,9 @@ interactive finder and automatically select the only match
+ If there is no match for the initial query (\fB--query\fR), do not start
+ interactive finder and exit immediately
+ .TP
++.B "--complete-1"
++Exit interactive finder when there's exactly one match
++.TP
+ .BI "-f, --filter=" "STR"
+ Filter mode. Do not start interactive finder. When used with \fB--no-sort\fR,
+ fzf becomes a fuzzy-version of grep.
diff --git a/src/core.go b/src/core.go
-index a18c3a1..a3d92a4 100644
+index 2ddddc3..09afff2 100644
--- a/src/core.go
+++ b/src/core.go
-@@ -331,6 +331,13 @@ func Run(opts *Options, version string, revision string) {
+@@ -337,8 +337,14 @@ func Run(opts *Options, version string, revision string) {
+ }
+ determine(val.final)
}
- }
- terminal.UpdateList(val, clearSelection())
-+ if (opts.Complete1) {
-+ count := val.Length()
-+ if count == 1 {
++ } else {
++ if opts.Complete1 && val.Length() == 1 {
+ opts.Printer(val.Get(0).item.AsString(opts.Ansi))
+ terminal.reqBox.Set(reqClose, nil)
++ } else {
++ terminal.UpdateList(val, clearSelection())
+ }
-+ }
+ }
+- terminal.UpdateList(val, clearSelection())
}
}
}
diff --git a/src/options.go b/src/options.go
-index a55dc34..7f121cd 100644
+index 5400311..1e38fe4 100644
--- a/src/options.go
+++ b/src/options.go
-@@ -92,6 +92,7 @@ const usage = `usage: fzf [options]
- -1, --select-1 Automatically select the only match
- -0, --exit-0 Exit immediately when there's no match
- -f, --filter=STR Filter mode. Do not start interactive finder.
-+ --complete-1 Exit interactive finder when there's exactly one match
- --print-query Print query as the first line
- --expect=KEYS Comma-separated list of keys to complete fzf
- --read0 Read input delimited by ASCII NUL characters
-@@ -208,6 +209,7 @@ type Options struct {
- Query string
- Select1 bool
- Exit0 bool
-+ Complete1 bool
- Filter *string
- ToggleSort bool
- Expect map[tui.Event]string
-@@ -269,6 +271,7 @@ func defaultOptions() *Options {
- Query: "",
- Select1: false,
- Exit0: false,
-+ Complete1: false,
- Filter: nil,
- ToggleSort: false,
- Expect: make(map[tui.Event]string),
-@@ -1311,6 +1314,8 @@ func parseOptions(opts *Options, allArgs []string) {
+@@ -108,6 +108,7 @@ const usage = `usage: fzf [options]
+ -1, --select-1 Automatically select the only match
+ -0, --exit-0 Exit immediately when there's no match
+ -f, --filter=STR Filter mode. Do not start interactive finder.
++ --complete-1 Exit interactive finder when there's exactly one match
+ --print-query Print query as the first line
+ --expect=KEYS Comma-separated list of keys to complete fzf
+ --read0 Read input delimited by ASCII NUL characters
+@@ -274,6 +275,7 @@ type Options struct {
+ Query string
+ Select1 bool
+ Exit0 bool
++ Complete1 bool
+ Filter *string
+ ToggleSort bool
+ Expect map[tui.Event]string
+@@ -342,6 +344,7 @@ func defaultOptions() *Options {
+ Query: "",
+ Select1: false,
+ Exit0: false,
++ Complete1: false,
+ Filter: nil,
+ ToggleSort: false,
+ Expect: make(map[tui.Event]string),
+@@ -1546,6 +1549,8 @@ func parseOptions(opts *Options, allArgs []string) {
opts.Exit0 = true
case "+0", "--no-exit-0":
opts.Exit0 = false
diff --git a/tv/5pkgs/override/fzf/default.nix b/tv/5pkgs/override/fzf/default.nix
index 661db0ed5..2254d455a 100644
--- a/tv/5pkgs/override/fzf/default.nix
+++ b/tv/5pkgs/override/fzf/default.nix
@@ -1,9 +1,7 @@
self: super:
super.fzf.overrideAttrs (old: {
- # XXX cannot use `patches` because fzf has a custom patchPhase
- patchPhase = ''
- patch -Np1 < ${./complete1.patch}
- ${old.patchPhase or ""}
- '';
+ patches = old.patches or [] ++ [
+ ./complete1.patch
+ ];
})
diff --git a/tv/5pkgs/vim/default.nix b/tv/5pkgs/vim/default.nix
index 5582be3fd..e0e2761d2 100644
--- a/tv/5pkgs/vim/default.nix
+++ b/tv/5pkgs/vim/default.nix
@@ -2,6 +2,10 @@ with import <stockholm/lib>;
self: super: {
tv = super.tv // {
+ vim = {
+ makePlugin = outPath: outPath // { inherit outPath; };
+ makeRuntimePath = concatMapStringsSep "," (getAttr "outPath");
+ };
vimPlugins = mapNixDir (path: self.callPackage path {}) ./.;
};
}
diff --git a/tv/5pkgs/vim/hack.nix b/tv/5pkgs/vim/hack.nix
index 2145cc166..0e949688d 100644
--- a/tv/5pkgs/vim/hack.nix
+++ b/tv/5pkgs/vim/hack.nix
@@ -1,7 +1,7 @@
with import <stockholm/lib>;
{ pkgs }:
-(rtp: rtp // { inherit rtp; }) (pkgs.writeTextFile (let
+pkgs.tv.vim.makePlugin (pkgs.writeTextFile (let
name = "hack";
in {
name = "vim-color-${name}-1.0.2";
diff --git a/tv/5pkgs/vim/nix.nix b/tv/5pkgs/vim/nix.nix
index 6715af737..01f769f16 100644
--- a/tv/5pkgs/vim/nix.nix
+++ b/tv/5pkgs/vim/nix.nix
@@ -1,7 +1,7 @@
with import <stockholm/lib>;
{ pkgs }:
-(rtp: rtp // { inherit rtp; }) (pkgs.write "vim-syntax-nix-nested" {
+pkgs.tv.vim.makePlugin (pkgs.write "vim-syntax-nix-nested" {
"/syntax/haskell.vim".text = ''
syn region String start=+\[[[:alnum:]]*|+ end=+|]+
diff --git a/tv/5pkgs/vim/showsyntax.nix b/tv/5pkgs/vim/showsyntax.nix
index a5547e46a..c27dd0447 100644
--- a/tv/5pkgs/vim/showsyntax.nix
+++ b/tv/5pkgs/vim/showsyntax.nix
@@ -1,6 +1,6 @@
{ pkgs }:
-(rtp: rtp // { inherit rtp; }) (pkgs.writeTextFile (let
+pkgs.tv.vim.makePlugin (pkgs.writeTextFile (let
name = "showsyntax";
in {
name = "vim-plugin-${name}-1.0.0";
diff --git a/tv/5pkgs/vim/tv.nix b/tv/5pkgs/vim/tv.nix
index ae6245b87..dee6b2df8 100644
--- a/tv/5pkgs/vim/tv.nix
+++ b/tv/5pkgs/vim/tv.nix
@@ -1,6 +1,6 @@
{ pkgs }:
-(rtp: rtp // { inherit rtp; }) (pkgs.write "vim-tv" {
+pkgs.tv.vim.makePlugin (pkgs.write "vim-tv" {
#
# Haskell
#
diff --git a/tv/5pkgs/vim/vim.nix b/tv/5pkgs/vim/vim.nix
index 216ab6abb..6034dbda8 100644
--- a/tv/5pkgs/vim/vim.nix
+++ b/tv/5pkgs/vim/vim.nix
@@ -1,7 +1,7 @@
with import <stockholm/lib>;
{ pkgs }:
-(rtp: rtp // { inherit rtp; }) (pkgs.writeTextFile (let
+pkgs.tv.vim.makePlugin (pkgs.writeTextFile (let
name = "vim";
in {
name = "vim-syntax-${name}-1.0.0";