summary refs log tree commit diff stats
path: root/modules/user-interface.nix
blob: 88dedfab4a44ef5b3fd1974f429f5bd9d3b01af0 (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
143
144
{ config, pkgs, lib, ... }:

let
  emacsPackage = import ../packages/emacs.nix {
    pkgs = pkgs.unstable;
    emacs = pkgs.unstable.emacs.override {
      withGTK3 = false;
    };
  };
  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
{ documentation.info.enable = true;
  nixpkgs.config.firefox.enableOfficialBranding = true;

  nixpkgs.config.packageOverrides = pkgs: {
    myEmacs = emacsPackage;
  };
  environment.systemPackages = with pkgs; [
    aria2
    firefox
    pcmanfm

    epdfview
    geeqie

    cmus

    fish # for emacs-fish-completion
    myEmacs
    editorScript

    unstable.xst # st, but with support for XResources

    lxappearance
    lxrandr
    lxtask

    python3Packages.keyring
    isync
    msmtp
    html2text

    weechat

    unstable.pass-otp

    mpv

    mosh
    aspell
    aspellDicts.en

    cifs-utils
    hexchat
    signal-desktop
    wire-desktop

    trash-cli
  ] ++ (if !stdenv.isDarwin
  then [
    unstable.mu
  ]
  else []);

  nixpkgs.config.allowUnfree = true;

  services.compton = {
    enable = true;
  };

  services.devmon.enable = true;

  environment.sessionVariables.TERMINAL = "st";

  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.ssh.startAgent = true;

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

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