summaryrefslogtreecommitdiff
path: root/scripts/desktop/sway-ftp-master
blob: bd74cb953b2e7f4256e1d6cc2f1e253c777d61e3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#!/usr/bin/env perl

# sway-ftp-master -- set up some windows for doing work on Debian's ftp-master
#
# Copyright (C) 2019, 2021 Sean Whitton
#
# GPL-3 or later

# BROKEN: Needs updating for transition from Local::Desktop to papersway

use 5.032;
use strict;
use warnings;
use lib "$ENV{HOME}/src/dotfiles/perl5";

use JSON;

sub walk_tree (&$) {
    my ($pred, $tree) = @_;
    $pred->($tree) and return $tree;
    map &walk_tree($pred, $_), $tree->{nodes}->@*, $tree->{floating_nodes}->@*;
}

sub title_exists {
    my $name = shift;
    walk_tree { $_->{name} and $_->{name} =~ /^\Q$name\E/ }
    decode_json `swaymsg -t get_tree`;
}

sub marked_exists {
    my $mark = shift;
    walk_tree { grep $_ eq $mark, $_->{marks}->@* }
    decode_json `swaymsg -t get_tree`;
}

sub focus_title { wmipc qq|[title="$_[0]"] focus| }

sub bring_title {
    wmipc qq|[title="$_[0]"] move to workspace current|, "focus"
}

sub focus_marked { wmipc qq|[con_mark="$_[0]"] focus| }

sub bring_marked {
    wmipc qq|[con_mark="$_[0]"] move to workspace current|, "focus"
}

if (marked_exists "dak") {
    focus_marked "dak";
} else {
    # first establish a control socket, so that the two interactive ssh
    # connections don't race to do this and one of them disables multiplexing
    system "ssh", "-fN", "ftp-master.debian.org";

    # start Emacs on ftp-master
    system "ssh", "ftp-master.debian.org", "pgrep", "-u", "spwhitton",
      "emacs", "||", "ssh", "ftp-master.debian.org", "emacs", "--daemon", "&";

    my $first = fresh_workspace(go => 1) // die "no fresh workspace";

    fork // die "couldn't fork"
      or exec "foot", "--override=locked-title=yes",
      "--title=ftp-master dak command session",
      "ssh-and-tmux", "ftp-master.debian.org", "dak";
    sleep 0.3 until marked_exists "dak";
    bring_marked "dak";

    fork // die "couldn't fork"
      or exec "foot", "--override=locked-title=yes",
      "--title=ftp-master GNU mc session",
      "ssh-and-tmux", "ftp-master.debian.org", "mc";
    sleep 0.3 until marked_exists "mc";
    bring_marked "mc";

    system "emacsclient", "-c", "-a", "", "-n", "-e",
      '(progn (switch-to-buffer "*NEW notes*") (text-mode))';
    sleep 0.3 until title_exists "*NEW notes*";
    bring_title "\\*NEW notes\\*";

    # Currently we implement only the layout the X11 script chose for melete.
    # The commented commands were necessary with bullseye's Sway v1.5.
    wmipc
      "move down",
      "focus up",
      "focus left",
      "move right",
      "move right",
      "move right",
      # "split v",
      # "layout tabbed",
      "resize set width 38",
      "focus left",
      # "split v",
      # "layout tabbed",
      "resize set height 65",
      "focus right";
}