summaryrefslogtreecommitdiffstats
path: root/.config/bspwm
diff options
context:
space:
mode:
authorJozanLeClerc <bousset.rudy@gmail.com>2020-08-06 17:26:51 +0200
committerJozanLeClerc <bousset.rudy@gmail.com>2020-08-06 17:26:51 +0200
commitc16b736fdc3885b87f285bb0f6ae9120784d26bd (patch)
treef45b6cc018a6ef4289504e58cd1049a6b9d2113a /.config/bspwm
parentRemoved README.org for bspwm rewrite (diff)
downloaddotfiles-bsd-c16b736fdc3885b87f285bb0f6ae9120784d26bd.tar.gz
dotfiles-bsd-c16b736fdc3885b87f285bb0f6ae9120784d26bd.tar.bz2
dotfiles-bsd-c16b736fdc3885b87f285bb0f6ae9120784d26bd.tar.xz
dotfiles-bsd-c16b736fdc3885b87f285bb0f6ae9120784d26bd.tar.zst
dotfiles-bsd-c16b736fdc3885b87f285bb0f6ae9120784d26bd.zip
Rewrite of the bspwmrc in perl
Diffstat (limited to '.config/bspwm')
-rwxr-xr-x.config/bspwm/bspwmrc288
1 files changed, 288 insertions, 0 deletions
diff --git a/.config/bspwm/bspwmrc b/.config/bspwm/bspwmrc
index 4e38a84..b10917c 100755
--- a/.config/bspwm/bspwmrc
+++ b/.config/bspwm/bspwmrc
@@ -1,3 +1,291 @@
+#!/usr/local/bin/perl
+
+use strict;
+use warnings;
+use Capture::Tiny qw(capture);
+use WWW::Curl::Easy;
+
+use constant {
+ PGREP_PATH => '/bin/pgrep',
+ PKILL_PATH => '/bin/pkill',
+ XRANDR_PATH => '/usr/local/bin/xrandr',
+ MAINSCREEN_PATH => '/usr/home/jozan/.local/bin/mainscreen',
+ DUALSCREEN_PATH => '/usr/home/jozan/.local/bin/dualscreen',
+ TRIPLESCREEN_PATH => '/usr/home/jozan/.local/bin/triplescreen',
+ BSPC_PATH => '/usr/local/bin/bspc',
+ COMPTON_PATH => '/usr/local/bin/compton',
+ FEH_PATH => '/usr/local/bin/feh',
+ XSET_PATH => '/usr/local/bin/xset',
+ SETXKBMAP_PATH => '/usr/local/bin/setxkbmap',
+ DUNST_PATH => '/usr/local/bin/dunst',
+ LOWBAT_PATH => '/usr/local/bin/lowbat',
+ EMACS_PATH => '/usr/local/bin/emacs',
+ ALACRITTY_PATH => '/usr/local/bin/alacritty',
+ DASH_PATH => '/usr/local/bin/dash',
+ SH_PATH => '/bin/sh',
+ ZSH_PATH => '/usr/local/bin/zsh',
+ COWSAY_PATH => '/usr/local/bin/cowsay',
+ ESPEAK_PATH => '/usr/local/bin/espeak',
+ HTOP_PATH => '/usr/local/bin/htop',
+ GOTOP_PATH => '/usr/local/bin/gotop',
+ VIFM_PATH => '/usr/local/bin/vifm',
+ GIT_PATH => '/usr/local/bin/git',
+ QTOX_PATH => '/usr/local/bin/qtox'
+};
+use constant {
+ BSP_BORDER_WIDTH => 1,
+ BSP_WINDOW_GAP => 0,
+ BSP_BORDER_COLOR => '#b92121',
+ BSP_SPLIT_RATIO => '0.50',
+ BSP_BORDERLESS_MONOCLE => 'true',
+ BSP_GAPLESS_MONOCLE => 'true',
+ BSP_SINGLE_MONOCLE => 'true',
+ XSET_R_RATE_DELAY => 200,
+ XSET_R_RATE_RATE => 100,
+};
+use constant WALLPAPER_PATH => '/usr/home/jozan/Pictures/wallpaper.jpg';
+use constant COWSAY_WELCOME => 'Welcome back, partner! And remember to try glest!';
+use constant NETWORK_TEST_URL => 'https://freebsd.org/';
+
+sub run_if_dead
+{
+ my @argv = @_;
+ my $bin;
+ my $cat_str;
+ my $i;
+
+ $bin = $argv[0];
+ $bin =~ s/.+\///g;
+ my (undef, undef, $retval) = capture {
+ system(
+ PGREP_PATH,
+ $bin
+ );
+ };
+ $retval = ($retval >> 8) & 0xff;
+ $cat_str = '';
+ $i = 0;
+ foreach (@argv) {
+ if ($i == 0 || $_ eq '&') {
+ $cat_str .= $_;
+ }
+ else {
+ $cat_str .= '"' . $_ . '" ';
+ }
+ $i += 1;
+ }
+ if ($retval != 0) {
+ system($cat_str);
+ }
+ return;
+}
+
+sub kill_some
+{
+ system(PKILL_PATH, 'alacritty');
+ system(PKILL_PATH, 'compton');
+ return;
+}
+
+sub enable_screens
+{
+ my $stdout;
+ my $screens;
+
+ $screens = 1;
+ ($stdout, undef, undef) = capture {
+ system(XRANDR_PATH);
+ };
+ if ($stdout =~ m/DP1 connected/ && $stdout =~ m/VGA1 connected/ == 1) {
+ $screens = 3;
+ system(TRIPLESCREEN_PATH);
+ }
+ elsif ($stdout =~ m/DP1 connected/) {
+ $screens = 2;
+ system(DUALSCREEN_PATH);
+ }
+ else {
+ system(MAINSCREEN_PATH);
+ }
+ return $screens;
+}
+
+sub bspc_configs
+{
+ system(BSPC_PATH, 'config', 'border_width', BSP_BORDER_WIDTH);
+ system(BSPC_PATH, 'config', 'window_gap', BSP_WINDOW_GAP);
+ system(BSPC_PATH, 'config', 'focused_border_color', BSP_BORDER_COLOR);
+ system(BSPC_PATH, 'config', 'split_ratio', BSP_SPLIT_RATIO);
+ system(BSPC_PATH, 'config', 'borderless_monocle', BSP_BORDERLESS_MONOCLE);
+ system(BSPC_PATH, 'config', 'gapless_monocle', BSP_GAPLESS_MONOCLE);
+ system(BSPC_PATH, 'config', 'single_monocle', BSP_SINGLE_MONOCLE);
+ return;
+}
+
+sub bspc_rules
+{
+ system(BSPC_PATH, 'rule', '-a', 'Emacs', 'state=tiled');
+ system(BSPC_PATH, 'rule', '-a', 'Firefox', 'desktop=08', 'follow=true');
+ system(BSPC_PATH, 'rule', '-a', 'Wine', 'desktop=07', 'state=floating');
+ system(BSPC_PATH, 'rule', '-a', 'Dunst', 'layer=above');
+ system(BSPC_PATH, 'rule', '-a', 'Zathura', 'state=tiled');
+ system(BSPC_PATH, 'rule', '-a', 'qTox', 'desktop=12');
+ system(BSPC_PATH, 'rule', '-a', 'DergodsRealmII', 'state=floating');
+ return;
+}
+
+sub run_bg_programs
+{
+ my ($screens) = @_;
+
+ run_if_dead(COMPTON_PATH, '&');
+ if ($screens > 1) {
+ system(FEH_PATH, '--bg-fill', WALLPAPER_PATH, '--bg-fill', WALLPAPER_PATH);
+ }
+ else {
+ system(FEH_PATH, '--bg-fill', WALLPAPER_PATH);
+ }
+ system(XSET_PATH, 'r', 'rate', XSET_R_RATE_DELAY, XSET_R_RATE_RATE);
+ system(SETXKBMAP_PATH, '-layout', 'us,fr', '-option', 'grp:alt_shift_toggle');
+ run_if_dead(DUNST_PATH, '&');
+ run_if_dead(LOWBAT_PATH, '&');
+ return;
+}
+
+sub fg_on_three_screens
+{
+ system(ESPEAK_PATH . ' "' . COWSAY_WELCOME . '" &');
+ system(
+ ALACRITTY_PATH . ' -e ' . SH_PATH . ' -c \'' .
+ COWSAY_PATH . ' "' . COWSAY_WELCOME . '"; ' . ZSH_PATH .
+ '\' &'
+ );
+ sleep(1);
+ system(ALACRITTY_PATH . ' -e ' . HTOP_PATH . ' &');
+ sleep(1);
+ system(ALACRITTY_PATH . ' -e ' . GOTOP_PATH . ' &');
+ sleep(1);
+ system(BSPC_PATH, 'node', '-f', 'west');
+ system(ALACRITTY_PATH . ' -e ' . VIFM_PATH . ' &');
+ sleep(1);
+ system(BSPC_PATH, 'node', '-z', 'right', '180', '0');
+ system(BSPC_PATH, 'node', '-z', 'top', '0', '70');
+ system(BSPC_PATH, 'node', '-f', 'east');
+ system(BSPC_PATH, 'node', '-f', 'north');
+ system(BSPC_PATH, 'node', '-z', 'bottom', '0', '-280');
+ system(BSPC_PATH, 'node', '-f', 'north');
+ system(BSPC_PATH, 'node', '-f', 'west');
+ return;
+}
+
+sub fg_on_two_screens
+{
+ system(ESPEAK_PATH, COWSAY_WELCOME, '&');
+ system(
+ ALACRITTY_PATH . ' -e ' . SH_PATH . ' -c \'' .
+ COWSAY_PATH . ' "' . COWSAY_WELCOME . '"; ' . ZSH_PATH .
+ '\' &'
+ );
+ sleep(1);
+ system(ALACRITTY_PATH . ' -e ' . HTOP_PATH . ' &');
+ sleep(1);
+ system(ALACRITTY_PATH, ' -e ', GOTOP_PATH, ' &');
+ sleep(1);
+ system(BSPC_PATH, 'node', '-f', 'west');
+ system(ALACRITTY_PATH . ' -e ' . VIFM_PATH . ' &');
+ sleep(1);
+ system(BSPC_PATH, 'node', '-z', 'right', '180', '0');
+ system(BSPC_PATH, 'node', '-z', 'top', '0', '70');
+ system(BSPC_PATH, 'node', '-f', 'east');
+ system(BSPC_PATH, 'node', '-f', 'north');
+ system(BSPC_PATH, 'node', '-z', 'bottom', '0', '-280');
+ system(BSPC_PATH, 'node', '-f', 'north');
+ system(BSPC_PATH, 'node', '-f', 'west');
+ return;
+}
+
+sub fg_on_one_screen
+{
+ system(ESPEAK_PATH, COWSAY_WELCOME, '&');
+ system(
+ ALACRITTY_PATH . ' -e ' . SH_PATH . ' -c \'' .
+ COWSAY_PATH . ' "' . COWSAY_WELCOME . '"; ' . ZSH_PATH .
+ '\' &'
+ );
+ sleep(1);
+ system(BSPC_PATH, 'node', '-p', 'west');
+ system(ALACRITTY_PATH . ' -e ' . HTOP_PATH . ' &');
+ sleep(1);
+ system(ALACRITTY_PATH . ' -e ' . GOTOP_PATH . ' &');
+ sleep(1);
+ system(BSPC_PATH, 'node', '-f', 'east');
+ system(ALACRITTY_PATH . ' -e ' . VIFM_PATH . ' &');
+ sleep(1);
+ system(BSPC_PATH, 'node', '-f', 'west');
+ system(BSPC_PATH, 'node', '-f', 'north');
+ system(BSPC_PATH, 'node', '-z', 'bottom', '0', '-280');
+ system(BSPC_PATH, 'node', '-z', 'right', '-220', '0');
+ system(BSPC_PATH, 'node', '-f', 'east');
+ system(BSPC_PATH, 'node', '-z', 'top', '0', '70');
+ system(BSPC_PATH, 'node', '-f', 'north');
+ return;
+}
+
+sub run_fg_programs
+{
+ my ($screens) = @_;
+
+ system(BSPC_PATH, 'desktop', '-f', '01');
+ run_if_dead(EMACS_PATH, '&');
+ sleep(12);
+ system(BSPC_PATH, 'desktop', '-f', '09');
+ if ($screens == 3) {
+ fg_on_three_screens();
+ }
+ elsif ($screens == 2) {
+ fg_on_two_screens();
+ }
+ else {
+ fg_on_one_screen();
+ }
+ return;
+}
+
+sub run_network_programs
+{
+ my $curl;
+ my $response_body;
+ my $retval;
+
+ $curl = WWW::Curl::Easy->new;
+ $curl->setopt(CURLOPT_URL, NETWORK_TEST_URL);
+ $curl->setopt(CURLOPT_WRITEDATA, \$response_body);
+ $retval = $curl->perform;
+ if ($retval == 0) {
+ system(GIT_PATH, '-C', '/usr/home/jozan/.elfeed', 'pull', 'origin', 'master');
+ run_if_dead(QTOX_PATH, '&');
+ }
+ return;
+}
+
+sub main
+{
+ my $screens;
+
+ kill_some();
+ $screens = enable_screens();
+ bspc_configs();
+ bspc_rules();
+ run_bg_programs($screens);
+ run_fg_programs($screens);
+ run_network_programs();
+ return;
+}
+
+main();
+
+__END__
+
#!/usr/local/bin/dash
run() {
if ! pgrep "$1";