home: Add tmux home type.

Z572Fri Oct 09 15:10:57+0200 2020

02c708d

home: Add tmux home type. * home/tmux.scm: New file. * doc/tmux.md: New file. * doc/README.md: Add it. Signed-off-by: Julien Lepiller <julien@lepiller.eu>

doc/README.md

6464
6565
* [Bash](doc/bash.md)
6666
* [Neovim](doc/neovim.md)
67+
* [Tmux](doc/tmux.md)
6768
* [Zsh](doc/zsh.md)
6869
6970
### Reproducible builds

doc/tmux.md unknown status 1

1+
Tmux
2+
====
3+
4+
tmux is a terminal multiplexer. It lets you switch easily between
5+
several programs in one terminal, detach them (they keep running in
6+
the background) and reattach them to a different terminal.
7+
8+
Main Configuration
9+
------------------
10+
11+
Tmux is configured by using the `tmux-home-type` service type.
12+
13+
**Scheme Procedure**: tmux-home-type
14+
15+
The type of service that generates configuration files for tmux.  Its value
16+
is a tmux-configuration object.
17+
18+
**Data Type**: tmux-configuration
19+
20+
Data type that represents the Tmux configuration.  This data type has the
21+
following fields:
22+
23+
* **terminal** (default "screen-256color"): set environment variable
24+
  `TERM`.
25+
* **prefix** (default #f): For keys that control tmux itself. if `#f`
26+
  use default prefix.
27+
* **mode-keys** (default "vi"): VI or Emacs style shortcuts.
28+
* **escapeTime** (default 500): Time in milliseconds for which tmux
29+
  waits after an escape is input.
30+
* **history-limit** (default 2000): Maximum number of lines held in
31+
  window history.
32+
* **mouse?** (default #f): Whether to use mouse.
33+
* **clock24?** (default #f): Whether to use 24 hour clock.
34+
* **extra-conf** (default '("")):  This is a list of strings and
35+
  file-like objects.
36+
37+
Example Configuration
38+
---------------------
39+
40+
```scheme
41+
(user-home
42+
  tmux-home-type
43+
  (tmux-configuration
44+
    (terminal "xterm-256color")
45+
    (prefix "F12")
46+
    (mode-keys "emacs")
47+
    (escapeTime 700)
48+
    (history-limit 5000)
49+
    (mouse? #t)
50+
    (clock24? #t)
51+
    (extra-conf (list "set -g set-titles on\n")))
52+
```

home/tmux.scm unknown status 1

1+
;;; Guix Home Manager.
2+
;;;
3+
;;; Copyright ?? 2020 Z572 <873216071@qq.com>
4+
;;;
5+
;;; This program is free software: you can redistribute it and/or modify
6+
;;; it under the terms of the GNU General Public License as published by
7+
;;; the Free Software Foundation, either version 3 of the License, or
8+
;;; (at your option) any later version.
9+
;;;
10+
;;; This program is distributed in the hope that it will be useful,
11+
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13+
;;; GNU General Public License for more details.
14+
;;;
15+
;;; You should have received a copy of the GNU General Public License
16+
;;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
17+
18+
(define-module (home tmux)
19+
  #:use-module (guix build utils)
20+
  #:use-module (guix gexp)
21+
  #:use-module (guix records)
22+
  #:use-module (ice-9 match)
23+
  #:use-module (home)
24+
  #:export (tmux-configuration
25+
            tmux-configuration-terminal
26+
            tmux-configuration-prefix
27+
            tmux-configuration-mode-keys
28+
            tmux-configuration-escapeTime
29+
            tmux-configuration-history-limit
30+
            tmux-configuration-mouse?
31+
            tmux-configuration-clock24?
32+
            tmux-configuration-extra-conf
33+
            tmux-home-type))
34+
35+
(define-record-type* <tmux-configuration>
36+
  tmux-configuration make-tmux-configuration
37+
  tmux-configuration?
38+
  (terminal tmux-configuration-terminal
39+
            (default "screen-256color"))
40+
  (prefix tmux-configuration-prefix
41+
          (default #f))
42+
  (mode-keys tmux-configuration-mode-keys
43+
             (default "vi"))
44+
  (escapeTime tmux-configuration-escapeTime
45+
              (default 500))
46+
  (history-limit tmux-configuration-history-limit
47+
                 (default 2000))
48+
  (mouse? tmux-configuration-mouse?
49+
          (default #f))
50+
  (clock24? tmux-configuration-clock24?
51+
            (default #f))
52+
  (extra-conf tmux-configuration-extra-conf
53+
              (default '(""))))
54+
55+
(define tmux-home-type
56+
  (home-type
57+
   (name 'tmux)
58+
   (extensions
59+
    (list
60+
     (home-extension
61+
      (target root-home-type)
62+
      (compute
63+
       (match-lambda
64+
         (($ <tmux-configuration>
65+
             terminal
66+
             prefix
67+
             mode-keys
68+
             escapeTime
69+
             history-limit
70+
             mouse?
71+
             clock24?
72+
             extra-conf)
73+
          (let ((tmux.conf
74+
                 (apply mixed-text-file "tmux.conf"
75+
                        (cons* (format #f "
76+
~{setw -g ~a ~S\n~}
77+
~{set -g ~a ~S\n~}
78+
~a
79+
"
80+
                                       `("clock-mode-style"
81+
                                         ,(if clock24? "24" "12"))
82+
                                       `("escape-time" ,escapeTime
83+
                                         "history-limit" ,history-limit
84+
                                         "default-terminal" ,terminal
85+
                                         "status-keys" ,mode-keys
86+
                                         "mode-keys" ,mode-keys
87+
                                         "mouse" ,(if mouse? "on" "off"))
88+
                                       (if (eq? #f prefix)
89+
                                           ""
90+
                                           (string-append
91+
                                            "unbind C-b\n"
92+
                                            "set -g prefix " prefix)))
93+
                               extra-conf))))
94+
            `((".tmux.conf" ,tmux.conf)))))))))))