summaryrefslogtreecommitdiff
path: root/awesome/default.nix
blob: 423c98dcedea3a7d28ef2bb53df6b3c6fe55cb84 (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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
{

  config,


}: rec {

  pkgs = (import ../pkgs.nix).stable {};
  pkgs2305 = (import ../pkgs.nix).stable2305 {};
  pkgsEdge = (import ../pkgs.nix).edge {};

  # nativeWrap is used for apps which are not installed via nix which don't play
  # nicely with it.
  nativeWrap = pkgs.writeScriptBin "native-wrap" ''
    #!${pkgs.bash}/bin/bash

    unset XDG_CONFIG_DIRS
    unset XDG_DATA_DIRS
    unset GDK_PIXBUF_MODULE_FILE

    exec "$@"
  '';

  browser = pkgs.writeScriptBin "browser" ''
    #!${pkgs.bash}/bin/bash
    exec ${nativeWrap}/bin/native-wrap ${config.browser} "$@"
  '';

  env = pkgs.buildEnv {
    name = "awesome-env";
    paths = [

      pkgs.awesome
      pkgs.tela-icon-theme

      nativeWrap
      browser

      pkgs.xorg.xrandr
      pkgs.xsel
      pkgs.pavucontrol
      pkgs.xdg-utils
      pkgs.arandr

      pkgs.i3lock
      pkgs.scrot
      pkgs.feh
      pkgs.brightnessctl

      pkgs.cbatticon
      pkgs.phwmon

      pkgs.castor
      pkgs2305.libreoffice
      pkgs.gimp
      pkgs.inkscape
      pkgs.vlc
      pkgs.sylpheed
      pkgs.calibre

      pkgsEdge.lagrange
    ];
  };

  wp = ../wallpapers;

  dirsLua = pkgs.writeTextDir "dirs.lua" ''
    home_dir = os.getenv("HOME").."/"
    bin_dir = "${./bin}/"
    share_dir = "${./share}/"
    wp_dir = "${wp}/"
  '';

  awesome = pkgs.writeScriptBin "awesome" ''
    #!${pkgs.bash}/bin/bash

    export BROWSER=${browser}/bin/browser

    # Turn off powersaving (fuck the environment)
    xset -dpms
    xset s off

    export PATH=${env}/bin:$PATH

    export XDG_CONFIG_DIRS=${./config}

    export XDG_DATA_DIRS=${env}/share
    export XDG_DATA_DIRS=$XDG_DATA_DIRS:/home/mediocregopher/.nix-profile/share

    ${config.awesome.startupExtra}

    # HACK: This sleep is here because phwmon actually creates a separate tray
    # icon for each thing it monitors, and if the process runs at the same time
    # as another process which creates a tray icon they can get interleaved.
    (sleep 5 && phwmon.py) &

    ############################################################################
    # Init awesome

    data_dir="$HOME/.local/share/awesome";
    mkdir -p "$dataDir"

    log_dir="$data_dir"/logs
    mkdir -p $log_dir

    # only keep last N awesome.log files
    ls "$log_dir" | sort -n | head -n -5 | while read f; do rm "$log_dir"/"$f"; done

    ############################################################################
    # Exec

    this_log=$log_dir/awesome.$(date '+%Y%m%d.%H%M%S').log

    echo "New awesome session starting" > $this_log

    exec awesome \
      -c ${./rc.lua} \
      --search ${dirsLua} \
      --search ${./share} \
      --search ${env}/share/awesome/themes \
      2>&1 2>>$this_log
  '';
}