summary refs log tree commit diff stats
path: root/modules/user-interface.nix
blob: 660bb4cba1a5c4484141d1d5d0f8c777b226dd3a (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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
{ config, pkgs, lib, ... }:

let
  emacsPackage = import ../packages/emacs.nix {
    pkgs = pkgs.unstable;
  };
  editorScript = pkgs.writeScriptBin "edit" ''
    #!${pkgs.runtimeShell}
    if [ -z "$1" ]; then
      exec ${emacsPackage}/bin/emacsclient --create-frame --alternate-editor ${emacsPackage}/bin/emacs
    else
      exec ${emacsPackage}/bin/emacsclient --alternate-editor ${emacsPackage}/bin/emacs "$@"
    fi
  '';
  desktopApplicationFile = pkgs.writeTextFile {
    name = "emacsclient.desktop";
    destination = "/share/applications/emacsclient.desktop";
    text = ''
      [Desktop Entry]
      Name=Emacsclient
      GenericName=Text Editor
      Comment=Edit text
      MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++;
      Exec=${editorScript}/bin/edit %F
      Icon=emacs
      Type=Application
      Terminal=false
      Categories=Development;TextEditor;
      StartupWMClass=Emacs
      Keywords=Text;Editor;
    '';
  };
in
{ programs.browserpass.enable = true;
  documentation.info.enable = true;
  nixpkgs.config.firefox.enableOfficialBranding = true;

  environment.systemPackages = with pkgs; [
    aria2
    firefox
    pcmanfm

    epdfview
    geeqie

    fish # for emacs-fish-completion
    emacsPackage
    editorScript
    termite

    lxappearance

    python3Packages.keyring
    isync
    unstable.mu
    msmtp
    html2text

    weechat

    unstable.pass-otp

    mpv

    mosh
    aspell
    aspellDicts.en

    cifs-utils
    hexchat
    signal-desktop

    trash-cli
  ];

  nixpkgs.config.allowUnfree = true;

  services.compton = {
    enable = true;
  };

  services.devmon.enable = true;

  environment.sessionVariables.TERMINAL = "termite";
  # termite sets a custom TERM whose definition isn't installed by
  # default. I SSH into too many servers to set this up on every
  # single one of them, and some get recreated anyway
  environment.sessionVariables.TERM = "xterm-color";

  services.nscd.enable = true;
  systemd.services.nscd.wantedBy = lib.mkForce [];
  systemd.timers.nscd = {
    description = "Delayed startup of nscd";
    wantedBy = [ "timers.target" ];
    timerConfig = {
      OnActiveSec = "1 min";
    };
  };

  systemd.user.services.trash-clean = {
    path = with pkgs; [ trash-cli ];
    description = "Remove old files from FreeDesktop.org trash";

    serviceConfig = {
      Type = "oneshot";
    };
    script = "trash-empty 30";
  };
  systemd.user.timers.trash-clean = {
    wantedBy = [ "default.target" ];
    timerConfig = {
      OnCalendar = "weekly";
      Persistent = true;
    };
  };

  environment.variables = {
    # This is required so that GTK applications launched from Emacs
    # get properly themed:
    GTK_DATA_PREFIX = "${config.system.path}";
    EDITOR = lib.mkOverride 900 "${editorScript}/bin/edit";
  };

  services.redshift = {
    enable = true;
    temperature = {
      day = 6500;
      night = 3600;
    };
  };

  programs.dconf.enable = true;
  services.gnome3 = {
    gnome-keyring.enable = true;
    seahorse.enable = true;
    at-spi2-core.enable = true;
  };

  imports = [
    ./services/xserver.nix
  ];
}