summaryrefslogtreecommitdiffstats
path: root/tv
diff options
context:
space:
mode:
Diffstat (limited to 'tv')
-rw-r--r--tv/2configs/bash/default.nix3
-rw-r--r--tv/2configs/default.nix7
-rw-r--r--tv/2configs/gitrepos.nix3
-rw-r--r--tv/2configs/vim.nix75
-rw-r--r--tv/2configs/xserver/default.nix19
-rw-r--r--tv/3modules/iptables.nix59
-rw-r--r--tv/5pkgs/haskell/xmonad-tv/src/main.hs6
-rw-r--r--tv/5pkgs/override/default.nix6
-rw-r--r--tv/5pkgs/override/rxvt_unicode.nix9
-rw-r--r--tv/5pkgs/simple/bash-fzf-history.nix102
10 files changed, 255 insertions, 34 deletions
diff --git a/tv/2configs/bash/default.nix b/tv/2configs/bash/default.nix
index d7673931..42914e06 100644
--- a/tv/2configs/bash/default.nix
+++ b/tv/2configs/bash/default.nix
@@ -8,6 +8,7 @@ with import <stockholm/lib>;
HISTCONTROL='erasedups:ignorespace'
HISTSIZE=65536
HISTFILESIZE=$HISTSIZE
+ HISTTIMEFORMAT=
shopt -s checkhash
shopt -s histappend histreedit histverify
@@ -27,6 +28,8 @@ with import <stockholm/lib>;
export NIX_PATH="stockholm=$HOME/stockholm:$NIX_PATH"
;;
esac
+
+ ${pkgs.bash-fzf-history.bind}
'';
promptInit = /* sh */ ''
case $UID in
diff --git a/tv/2configs/default.nix b/tv/2configs/default.nix
index e18ba31b..ac0a6af4 100644
--- a/tv/2configs/default.nix
+++ b/tv/2configs/default.nix
@@ -80,13 +80,6 @@ with import <stockholm/lib>;
ls = "ls -h --color=auto --group-directories-first";
dmesg = "dmesg -L --reltime";
view = "vim -R";
-
- deploy = pkgs.writeDash "deploy" ''
- set -eu
- cd ~/stockholm
- export SYSTEM="$1"
- exec nix-shell -I stockholm="$PWD" --run 'deploy --system="$SYSTEM"'
- '';
};
environment.variables = {
diff --git a/tv/2configs/gitrepos.nix b/tv/2configs/gitrepos.nix
index 725ddefa..95ab75b3 100644
--- a/tv/2configs/gitrepos.nix
+++ b/tv/2configs/gitrepos.nix
@@ -47,6 +47,9 @@ let {
disko = {
cgit.desc = "declarative partitioning and formatting tool";
};
+ flameshot-once = {
+ cgit.desc = "flameshot runner that automatically starts/stops the daemon";
+ };
fswm = {
cgit.desc = "simple full screen window manager";
};
diff --git a/tv/2configs/vim.nix b/tv/2configs/vim.nix
index 3794628c..a45e040e 100644
--- a/tv/2configs/vim.nix
+++ b/tv/2configs/vim.nix
@@ -129,15 +129,66 @@ let {
command! -n=0 -bar ShowSyntax :call ShowSyntax()
'';
})))
+ ((rtp: rtp // { inherit rtp; }) (pkgs.write "vim-tv" {
+ #
+ # Haskell
+ #
+ "/ftplugin/haskell.vim".text = ''
+ if exists("g:vim_tv_ftplugin_haskell_loaded")
+ finish
+ endif
+ let g:vim_tv_ftplugin_haskell_loaded = 1
+
+ setlocal iskeyword+='
+ '';
+ #
+ # TODO
+ #
+ "/ftdetect/todo.vim".text = ''
+ au BufRead,BufNewFile TODO set ft=todo
+ '';
+ "/ftplugin/todo.vim".text = ''
+ setlocal foldmethod=syntax
+ '';
+ "/syntax/todo.vim".text = ''
+ syn match todoComment /#.*/
+
+ syn match todoDate /^[1-9]\S*/
+ \ nextgroup=todoSummary
+
+ syn region todoSummary
+ \ contained
+ \ contains=todoTag
+ \ start="." end="$\n"
+ \ nextgroup=todoBlock
+
+ syn match todoTag /\[[A-Za-z]\+\]/hs=s+1,he=e-1
+ \ contained
+
+ syn region todoBlock
+ \ contained
+ \ contains=Comment
+ \ fold
+ \ start="^[^1-9]" end="^[1-9 ]"re=s-1,he=s-1,me=s-1
+
+ syn sync minlines=1000
+
+ hi link todoComment Comment
+ hi todoDate ctermfg=255
+ hi todoSummary ctermfg=229
+ hi todoBlock ctermfg=248
+ hi todoTag ctermfg=217
+ '';
+ }))
((rtp: rtp // { inherit rtp; }) (pkgs.write "vim-syntax-nix-nested" {
- "/syntax/haskell.vim".text = /* vim */ ''
+ "/syntax/haskell.vim".text = ''
syn region String start=+\[[[:alnum:]]*|+ end=+|]+
hi link ConId Identifier
hi link VarId Identifier
hi link hsDelimiter Delimiter
'';
- "/syntax/nix.vim".text = /* vim */ ''
+ "/syntax/nix.vim".text = ''
"" Quit when a (custom) syntax file was already loaded
"if exists("b:current_syntax")
" finish
@@ -250,6 +301,9 @@ let {
def = k: ''${k}[ \t\r\n]*='';
writer = k: ''write${k}[^ \t\r\n]*[ \t\r\n]*\("[^"]*"\|[a-z]\+\)'';
+ writerExt = k: writerName ''[^"]*\.${k}'';
+ writerName = k: ''write[^ \t\r\n]*[ \t\r\n]*"${k}"'';
+
in {
c = {};
cabal = {};
@@ -257,7 +311,7 @@ let {
haskell = {};
jq.extraStart = alts [
(writer "Jq")
- ''write[^ \t\r\n]*[ \t\r\n]*"[^"]*\.jq"''
+ (writerExt "jq")
];
javascript.extraStart = ''/\* js \*/'';
lua = {};
@@ -287,9 +341,13 @@ let {
(writer (alts (map capitalize shells)))
];
yaml = {};
- vim.extraStart =
- ''write[^ \t\r\n]*[ \t\r\n]*"\(\([^"]*\.\)\?vimrc\|[^"]*\.vim\)"'';
+ vim.extraStart = alts [
+ (def ''"[^"]*\.vim"\.text'')
+ (writerExt "vim")
+ (writerName ''\([^"]*\.\)\?vimrc'')
+ ];
xdefaults = {};
+ xmodmap = {};
}))}
" Clear syntax that interferes with nixINSIDE_DOLLAR_CURLY.
@@ -329,12 +387,15 @@ let {
set isk=@,48-57,_,192-255,-,'
'';
- "/syntax/sed.vim".text = /* vim */ ''
+ "/syntax/sed.vim".text = ''
syn region sedBranch
\ matchgroup=sedFunction start="T"
\ matchgroup=sedSemicolon end=";\|$"
\ contains=sedWhitespace
'';
+ "/syntax/xmodmap.vim".text = ''
+ syn match xmodmapComment /^\s*!.*/
+ '';
}))
];
@@ -429,6 +490,8 @@ let {
inoremap <f1> <esc>:tabp<cr>
inoremap <f2> <esc>:tabn<cr>
+ noremap <f3> :ShowSyntax<cr>
+
" <C-{Up,Down,Right,Left>
noremap <esc>Oa <nop> | noremap! <esc>Oa <nop>
noremap <esc>Ob <nop> | noremap! <esc>Ob <nop>
diff --git a/tv/2configs/xserver/default.nix b/tv/2configs/xserver/default.nix
index f68e8e68..051e12ef 100644
--- a/tv/2configs/xserver/default.nix
+++ b/tv/2configs/xserver/default.nix
@@ -48,10 +48,24 @@ in {
systemd.services.xmonad = let
xmonad = "${pkgs.haskellPackages.xmonad-tv}/bin/xmonad";
- xmonad-prepare = pkgs.writeDash "xmonad-prepare" ''
+ xmonad-start = pkgs.writeDash "xmonad-start" ''
${pkgs.coreutils}/bin/mkdir -p "$XMONAD_CACHE_DIR"
${pkgs.coreutils}/bin/mkdir -p "$XMONAD_CONFIG_DIR"
${pkgs.coreutils}/bin/mkdir -p "$XMONAD_DATA_DIR"
+
+ f=$HOME/.dbus/session-bus/$(${pkgs.coreutils}/bin/cat /etc/machine-id)-${
+ toString config.services.xserver.display
+ }
+ if test -e "$f" &&
+ . "$f" &&
+ ${pkgs.coreutils}/bin/kill -0 "$DBUS_SESSION_BUS_PID"
+ then
+ export DBUS_SESSION_BUS_ADDRESS
+ else
+ eval "$(${pkgs.dbus.lib}/bin/dbus-launch --sh-syntax)"
+ fi
+
+ exec ${xmonad}
'';
xmonad-ready = pkgs.writeDash "xmonad-ready" ''
{
@@ -97,8 +111,7 @@ in {
"/run/wrappers" # for su
];
serviceConfig = {
- ExecStartPre = "@${xmonad-prepare} xmonad-prepare";
- ExecStart = "@${xmonad} xmonad-${currentSystem}";
+ ExecStart = "@${xmonad-start} xmonad-${currentSystem}";
ExecStop = "@${xmonad} xmonad-${currentSystem} --shutdown";
SyslogIdentifier = "xmonad";
User = cfg.user.name;
diff --git a/tv/3modules/iptables.nix b/tv/3modules/iptables.nix
index 56861dc7..3974760d 100644
--- a/tv/3modules/iptables.nix
+++ b/tv/3modules/iptables.nix
@@ -9,6 +9,37 @@ let {
config = lib.mkIf cfg.enable imp;
};
+ extraTypes = {
+ rules = types.submodule {
+ options = {
+ nat.OUTPUT = mkOption {
+ type = with types; listOf str;
+ default = [];
+ };
+ nat.PREROUTING = mkOption {
+ type = with types; listOf str;
+ default = [];
+ };
+ nat.POSTROUTING = mkOption {
+ type = with types; listOf str;
+ default = [];
+ };
+ filter.FORWARD = mkOption {
+ type = with types; listOf str;
+ default = [];
+ };
+ filter.INPUT = mkOption {
+ type = with types; listOf str;
+ default = [];
+ };
+ filter.Retiolum = mkOption {
+ type = with types; listOf str;
+ default = [];
+ };
+ };
+ };
+ };
+
api = {
enable = mkEnableOption "tv.iptables";
@@ -37,19 +68,19 @@ let {
default = [];
};
- extra = {
- nat.POSTROUTING = mkOption {
- type = with types; listOf str;
- default = [];
- };
- filter.FORWARD = mkOption {
- type = with types; listOf str;
- default = [];
- };
- filter.INPUT = mkOption {
- type = with types; listOf str;
- default = [];
- };
+ extra = mkOption {
+ default = {};
+ type = extraTypes.rules;
+ };
+
+ extra4 = mkOption {
+ default = {};
+ type = extraTypes.rules;
+ };
+
+ extra6 = mkOption {
+ default = {};
+ type = extraTypes.rules;
};
};
@@ -112,6 +143,7 @@ let {
"-o lo -p tcp -m tcp --dport 11423 -j REDIRECT --to-ports 22"
]}
${formatTable cfg.extra.nat}
+ ${formatTable cfg."extra${toString iptables-version}".nat}
COMMIT
*filter
:INPUT DROP [0:0]
@@ -129,6 +161,7 @@ let {
++ ["-i retiolum -j Retiolum"]
)}
${formatTable cfg.extra.filter}
+ ${formatTable cfg."extra${toString iptables-version}".filter}
${concatMapStringsSep "\n" (rule: "-A Retiolum ${rule}") ([]
++ optional (cfg.accept-echo-request == "retiolum") accept-echo-request
++ map accept-tcp (unique (map toString cfg.input-retiolum-accept-tcp))
diff --git a/tv/5pkgs/haskell/xmonad-tv/src/main.hs b/tv/5pkgs/haskell/xmonad-tv/src/main.hs
index b7d4e9bc..c528017d 100644
--- a/tv/5pkgs/haskell/xmonad-tv/src/main.hs
+++ b/tv/5pkgs/haskell/xmonad-tv/src/main.hs
@@ -1,8 +1,4 @@
-{-# LANGUAGE DeriveDataTypeable #-} -- for XS
-{-# LANGUAGE FlexibleContexts #-} -- for xmonad'
{-# LANGUAGE LambdaCase #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-
module Main (main) where
@@ -51,7 +47,7 @@ mainNoArgs = do
let width = 1366
workspaces0 <- getWorkspaces0
handleShutdownEvent <- newShutdownEventHandler
- xmonad
+ launch
$ withUrgencyHook (SpawnUrgencyHook "echo emit Urgency ")
$ def
{ terminal = Paths.urxvtc
diff --git a/tv/5pkgs/override/default.nix b/tv/5pkgs/override/default.nix
new file mode 100644
index 00000000..99c1b3ec
--- /dev/null
+++ b/tv/5pkgs/override/default.nix
@@ -0,0 +1,6 @@
+with import <stockholm/lib>;
+self: super: {
+ rxvt_unicode = self.callPackage ./rxvt_unicode.nix {
+ rxvt_unicode = super.rxvt_unicode;
+ };
+}
diff --git a/tv/5pkgs/override/rxvt_unicode.nix b/tv/5pkgs/override/rxvt_unicode.nix
new file mode 100644
index 00000000..da657fb2
--- /dev/null
+++ b/tv/5pkgs/override/rxvt_unicode.nix
@@ -0,0 +1,9 @@
+{ fetchurl, rxvt_unicode }:
+rxvt_unicode.overrideAttrs (old: {
+ patches = old.patches ++ [
+ (fetchurl {
+ url = https://cgit.krebsco.de/rxvt-unicode/patch/?id=15f3f94;
+ sha256 = "12vldwsds27c9l15ffc6svk9mj17jhypcz736pvpmpqbsymlkz2p";
+ })
+ ];
+})
diff --git a/tv/5pkgs/simple/bash-fzf-history.nix b/tv/5pkgs/simple/bash-fzf-history.nix
new file mode 100644
index 00000000..88a8e9e4
--- /dev/null
+++ b/tv/5pkgs/simple/bash-fzf-history.nix
@@ -0,0 +1,102 @@
+with import <stockholm/lib>;
+{ pkgs
+
+, edit-key ? "ctrl-e"
+, exec-key ? "enter"
+, edit-mark ? "${mark-prefix}${edit-key}"
+, exec-mark ? "${mark-prefix}${exec-key}"
+, edit-command ? "\"\""
+, exec-command ? "accept-line"
+, mark-prefix ? " #FZFKEY:"
+, finish-keyseq ? "\\C-x\\C-p"
+, rebind-keyseq ? "\\C-x\\C-o"
+
+, start-keyseq ? "\\C-f"
+, load-keyseq ? start-keyseq
+}: let
+ script = pkgs.writeBash "bash-fzf-history.sh" ''
+ if ! command -v fzf >/dev/null; then
+ # Alternatively rewrite ${pkgs.fzf}/share/fzf/* to use absolute paths.
+ fzf() {
+ ${pkgs.fzf}/bin/fzf "$@"
+ }
+ fi
+
+ . ${pkgs.fzf}/share/fzf/key-bindings.bash
+ . ${pkgs.fzf}/share/fzf/completion.bash
+
+ FZF_DEFAULT_OPTS='${toString [
+ /* sh */ "--height=40%"
+ /* sh */ "--inline-info"
+ /* sh */ "--min-height=4"
+ /* sh */ "--reverse"
+ ]}'
+
+ __fzf_history__() (
+ IFS=$'\n'
+ result=( $(
+ # To add "unknown timestamps" to each line of the history:
+ # sed -i '/^#[0-9]/{n;b};s/^/#1\n/' "$HISTFILE"
+ HISTTIMEFORMAT=$'\e[38;5;244m%Y-%m-%dT%H:%M:%S\e[m ' history |
+ ${pkgs.gnused}/bin/sed '
+ s/\(\x1b\[[0-9;]*\)244m1970-[0-9T:-]*/\1237m????-??-??T??:??:??/
+ ' |
+ FZF_DEFAULT_OPTS="${toString [
+ /* sh */ "--ansi"
+ /* sh */ "--tac"
+ /* sh */ "--sync"
+ /* sh */ "-n2..,.."
+ /* sh */ "--tiebreak=index"
+ /* sh */ "--bind=ctrl-r:toggle-sort"
+ /* sh */ "--expect=${edit-key},${exec-key}"
+ /* sh */ "$FZF_DEFAULT_OPTS"
+ /* sh */ "+m"
+ ]}" \
+ ${pkgs.fzf}/bin/fzf |
+ ${pkgs.gnused}/bin/sed '
+ /^ *[0-9]/{
+ s/^ *//
+ s/ \+/\n/;# index
+ s/ \+/\n/;# date
+ }
+ '
+ ) )
+ if test -n "$result"; then
+ key=''${result[0]}
+ index=''${result[1]}
+ date=''${result[2]}
+ command=''${result[3]}
+
+ echo "$command${mark-prefix}$key"
+ else
+ # Ensure no empty new line gets produced when fzf was aborted.
+ echo '${edit-mark}'
+ fi
+ )
+
+ __fzf_rebind_finish_keyseq__() {
+ local suffix=
+ case $READLINE_LINE in
+ *'${edit-mark}')
+ suffix='${edit-mark}'
+ bind '"${finish-keyseq}": ${edit-command}'
+ ;;
+ *'${exec-mark}')
+ suffix='${exec-mark}'
+ bind '"${finish-keyseq}": ${exec-command}'
+ ;;
+ esac
+ READLINE_LINE=${"\${READLINE_LINE:0:-\${#suffix}}"}
+ }
+ bind -x '"${rebind-keyseq}": __fzf_rebind_finish_keyseq__'
+
+ bind '"\C-r": reverse-search-history'
+ bind '"${start-keyseq}": " \C-e\C-u\C-y\ey\C-u`__fzf_history__`\e\C-e\er\e^${rebind-keyseq}${finish-keyseq}"'
+
+ echo '# fzf key bindings loaded:' >&2
+ bind -s | ${pkgs.gnugrep}/bin/grep __fzf_ >&2
+ '';
+in
+ script.overrideAttrs (old: rec {
+ bind = /* sh */ ''bind -x '"${load-keyseq}": . ${script}' '';
+ })