aboutsummaryrefslogtreecommitdiff
path: root/nixos/modules/desktop.nix
blob: 1ef5354292e2630c673a518e946f8bb64e689242 (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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
{ config, lib, pkgs, ... }:

with lib;
let

  cnf = config.cynerd.desktop;

in {

  options = {
    cynerd.desktop = {
      enable = mkOption {
        type = types.bool;
        default = false;
        description = "Enable my desktop";
      };
      laptop = mkOption {
        type = types.bool;
        default = false;
        description = "The desktop requires Laptop extensions";
      };
    };
  };

  config = mkIf cnf.enable {
    cynerd.hosts.enable = true;

    # TODO autologin but only on tty1
    services.gpm.enable = true;

    programs.sway.enable = true;
    programs.sway.extraPackages = with pkgs; [
      gnome.dconf-editor
      glib gsettings-desktop-schemas
      i3blocks sysstat
      wofi rofimoji wev
      swaybackground myswaylock

      alacritty

      kanshi wdisplays wayvnc wl-mirror
      slurp grim
      xdg-desktop-portal-wlr xdg-desktop-portal-gtk pipewire wf-recorder
      wl-clipboard wl-color-picker
      swayidle
      dunst

      isync msmtp notmuch astroid
      taskwarrior vdirsyncer khal khard
      gnupg pass pinentry-gnome pinentry-curses

      firefox chromium
      ferdi
      libreoffice
      mupdf pdfgrep

      xdg-utils xdg-launch
      mesa-demos vulkan-tools

      pulsemixer
      mpd mpc-cli ncmpcpp
      feh shotwell id3lib
      vlc mpv youtube-dl

      delft-icon-theme gnome3.adwaita-icon-theme
      vanilla-dmz
      sound-theme-freedesktop
      gucharmap

      samba cifs-utils

      tigervnc freerdp
      kdeconnect

      hdparm ethtool multipath-tools
      usb-modeswitch
      v4l-utils

      # Calculating
      python3Packages.numpy python3Packages.sympy python3Packages.matplotlib

      # Creation
      simple-scan
      audacity
      gimp inkscape
      blender
      kdenlive

      # GStreamer
      gst_all_1.gst-libav
      gst_all_1.gst-plugins-bad
      gst_all_1.gst-plugins-base
      gst_all_1.gst-plugins-good
      gst_all_1.gst-plugins-ugly
      gst_all_1.gst-plugins-viperfx

    ] ++ (optionals cnf.laptop [
      # Power management
      powertop
      acpi
    ]);
    programs.vim.package = pkgs.vimHugeX;
    programs.shellrc.desktop = true;
    xdg.portal.enable = true;
    xdg.portal.wlr.enable = true;
    xdg.portal.gtkUsePortal = true;
    xdg.mime.defaultApplications = {
      "application/pdf" = [ "mupdf.desktop" ];
    };

    programs.gnupg.agent = {
      enable = true;
      enableSSHSupport = true;
      enableBrowserSocket = true;
    };
    services.dbus.packages = [ pkgs.gcr ];

    services.pipewire = {
      enable = true;
      alsa.enable = true;
      alsa.support32Bit = true;
      pulse.enable = true;
    };
    security.rtkit.enable = true;

    services.printing = {
      enable = true;
      drivers = with pkgs; [
        gutenprint gutenprintBin
        cnijfilter2
      ];
    };

    services.samba-wsdd = {
      enable = true;
      discovery = true;
    };
    networking.firewall.allowedTCPPorts = [ 5357 ];
    networking.firewall.allowedUDPPorts = [ 3702 ];

    fonts.fonts = with pkgs; [
      arkpandora_ttf
      corefonts
      dejavu_fonts
      font-awesome
      freefont_ttf
      hack-font
      liberation_ttf
      libertine
      noto-fonts
      noto-fonts-emoji
      terminus_font_ttf
      ubuntu_font_family
      unifont
    ];

    services.udev.extraRules = ''
      ACTION=="add|change", KERNEL=="sd*[!0-9]", ATTR{queue/scheduler}="bfq"
      '';
    hardware.opengl.driSupport = true;
    hardware.opengl.driSupport32Bit = true;

    hardware.bluetooth.enable = mkIf cnf.laptop true;


  };
}