config

NixOS config
Log | Files | Refs | README | LICENSE

default.nix (9250B) - Raw


      1 {
      2   lib,
      3   pkgs,
      4   config,
      5   ...
      6 }:
      7 let
      8   cfg = config.mj.profiles.desktop;
      9   inherit (config.mj) username;
     10   inherit (lib)
     11     types
     12     mkOption
     13     ;
     14 
     15   brightness = pkgs.writeShellApplication {
     16     name = "brightness";
     17     text = builtins.readFile ./brightness;
     18   };
     19 in
     20 {
     21   options.mj.profiles.desktop = with types; {
     22     enableUserServices = mkOption {
     23       type = bool;
     24       default = false;
     25     };
     26   };
     27 
     28   imports = [
     29     ../basedesktop
     30     ../terminal
     31   ];
     32 
     33   config = {
     34     boot = {
     35       kernelModules = [ "kvm-intel" ];
     36     };
     37 
     38     hardware = {
     39       bluetooth = {
     40         enable = true;
     41         powerOnBoot = true;
     42       };
     43     };
     44 
     45     programs = {
     46       firefox = {
     47         enable = true;
     48         package = pkgs.firefox-bin;
     49         languagePacks = [
     50           "en-US"
     51           "lt"
     52         ];
     53       };
     54 
     55       wireshark = {
     56         enable = true;
     57         package = pkgs.wireshark-qt;
     58       };
     59     };
     60 
     61     mj.services.printing.enable = true;
     62 
     63     mj.base.users.user.extraGroups = [
     64       "adbusers"
     65       "networkmanager"
     66       "wireshark"
     67     ];
     68 
     69     services = lib.mkIf cfg.enableUserServices {
     70       blueman.enable = true;
     71       udev.packages = [ pkgs.yubikey-personalization ];
     72       gnome.gnome-keyring.enable = true;
     73       openssh.settings.X11Forwarding = true;
     74 
     75       pulseaudio = {
     76         enable = true;
     77         package = pkgs.pulseaudioFull;
     78       };
     79 
     80       logind.settings.Login = {
     81         HandlePowerKey = "suspend";
     82         HandlePowerKeyLongPress = "poweroff";
     83         HandleLidSwitchExternalPower = "ignore";
     84       };
     85 
     86       avahi = {
     87         enable = true;
     88         nssmdns4 = true;
     89         openFirewall = true;
     90       };
     91 
     92       xserver = {
     93         enable = true;
     94         xkb = {
     95           layout = "us,lt";
     96           options = "grp:alt_shift_toggle";
     97         };
     98 
     99         desktopManager.xfce.enable = true;
    100         windowManager.awesome.enable = true;
    101         displayManager.lightdm.enable = true;
    102       };
    103 
    104       displayManager = {
    105         defaultSession = lib.mkDefault "none+awesome";
    106         autoLogin = {
    107           enable = true;
    108           user = username;
    109         };
    110       };
    111 
    112       pipewire.enable = false;
    113 
    114     };
    115 
    116     programs = {
    117       adb.enable = true;
    118       slock.enable = true;
    119       nm-applet.enable = true;
    120       command-not-found.enable = false;
    121     };
    122 
    123     security.rtkit.enable = true;
    124 
    125     networking.networkmanager.enable = true;
    126 
    127     # wip put clight-gui to nixpkgs
    128     #services.geoclue2 = {
    129     #  enable = true;
    130     #  enableWifi = true;
    131     #};
    132     #location.provider = "geoclue2";
    133 
    134     fonts.packages = with pkgs; [
    135       xkcd-font
    136     ];
    137 
    138     environment.systemPackages = with pkgs; [
    139       # packages defined here
    140       nicer
    141       brightness
    142 
    143       f3 # flight-flash-fraud
    144       gdb
    145       ntp
    146       sox
    147       mpv
    148       imv # image viewer
    149       gimp
    150       qemu
    151       xclip
    152       pdftk
    153       scrot
    154       dillo
    155       typst
    156       sioyek
    157       cowsay
    158       xboard
    159       (kazam.override {
    160         python3Packages = pkgs.python311Packages;
    161       }) # alternative to gtk-recordMyDesktop
    162       x11vnc
    163       tinycc
    164       cheese
    165       arandr
    166       evince
    167       ioping
    168       motion
    169       gthumb
    170       csvkit
    171       calibre
    172       gparted
    173       scribus
    174       gnumake
    175       libwebp
    176       librsvg
    177       picocom
    178       libheif
    179       mplayer
    180       tcpflow
    181       fairymax
    182       ddrescue
    183       gcompris
    184       nautilus
    185       smplayer
    186       inkscape
    187       hunspell
    188       tigervnc
    189       bsdgames
    190       pstoedit
    191       xss-lock
    192       audacity
    193       colordiff
    194       trayscale
    195       espeak-ng
    196       man-pages
    197       rox-filer
    198       miniupnpc
    199       v4l-utils
    200       #nerdfonts
    201       winetricks
    202       shellcheck
    203       virtualenv
    204       get_iplayer
    205       #ventoy-full
    206       pavucontrol
    207       photocollage
    208       libqalculate # qalc
    209       qalculate-qt # qalculate
    210       google-chrome
    211       wirelesstools
    212       squashfsTools
    213       aspellDicts.en
    214       aspellDicts.lt
    215       libreoffice-qt
    216       graphicsmagick
    217       signal-desktop
    218       gnome-calendar
    219       element-desktop
    220       netsurf-browser
    221       man-pages-posix
    222       gnome-calculator
    223       kdePackages.okular
    224       nvtopPackages.amd
    225       nvtopPackages.intel
    226       hunspellDicts.en_US
    227       samsung-unified-linux-driver
    228 
    229       xdotool
    230       xorg.xev
    231       xorg.xeyes
    232       xorg.lndir
    233       xorg.xinit
    234 
    235     ];
    236 
    237     # https://discourse.nixos.org/t/nixos-rebuild-switch-upgrade-networkmanager-wait-online-service-failure/30746
    238     systemd.services.NetworkManager-wait-online.enable = false;
    239 
    240     home-manager.users.${username} =
    241       { pkgs, config, ... }:
    242       {
    243         imports = [ ./plasma.nix ];
    244         xdg.configFile = {
    245           "gdb/gdbinit".text = ''
    246             set style address foreground yellow
    247             set style function foreground cyan
    248             set style string foreground magenta
    249           '';
    250         };
    251 
    252         programs = {
    253           ghostty = {
    254             settings = {
    255               window-decoration = false;
    256               gtk-single-instance = true;
    257             };
    258           };
    259 
    260           chromium = lib.mkIf pkgs.stdenv.isLinux {
    261             enable = true;
    262             extensions = [
    263               { id = "cjpalhdlnbpafiamejdnhcphjbkeiagm"; } # ublock origin
    264               { id = "mdjildafknihdffpkfmmpnpoiajfjnjd"; } # consent-o-matic
    265             ];
    266           };
    267 
    268           firefox = {
    269             enable = true;
    270             package = pkgs.firefox-bin;
    271             policies.DisableAppUpdate = true;
    272             profiles = {
    273               xdefault = {
    274                 isDefault = true;
    275                 settings = {
    276                   "app.update.auto" = false;
    277                   "browser.uidensity" = 1;
    278                   "browser.aboutConfig.showWarning" = false;
    279                   "browser.contentblocking.category" = "strict";
    280                   "browser.urlbar.showSearchSuggestionsFirst" = false;
    281                   "layout.css.prefers-color-scheme.content-override" = 0;
    282                   "signon.management.page.breach-alerts.enabled" = false;
    283                   "signon.rememberSignons" = false;
    284 
    285                   # go/
    286                   "browser.fixup.domainwhitelist.go" = true;
    287                 };
    288                 extensions.packages = with pkgs.nur.repos.rycee.firefox-addons; [
    289                   bitwarden
    290                   ublock-origin
    291                   consent-o-matic
    292                   multi-account-containers
    293                 ];
    294               };
    295             };
    296           };
    297 
    298         };
    299 
    300         services = {
    301           cbatticon.enable = true;
    302           blueman-applet.enable = true;
    303 
    304           syncthing.tray = {
    305             enable = true;
    306             #extraOptions = ["--wait"];
    307           };
    308 
    309           pasystray = {
    310             enable = true;
    311             extraOptions = [
    312               "--key-grabbing"
    313               "--notify=all"
    314             ];
    315           };
    316 
    317           gpg-agent = {
    318             enable = true;
    319             enableSshSupport = true;
    320             pinentry.package = pkgs.pinentry-gtk2;
    321           };
    322 
    323           screen-locker = {
    324             enable = lib.mkDefault true;
    325             xautolock.enable = false;
    326             lockCmd = ''${pkgs.bash}/bin/bash -c "${pkgs.coreutils}/bin/sleep 0.2; ${pkgs.xorg.xset}/bin/xset dpms force off; /run/wrappers/bin/slock"'';
    327           };
    328         };
    329 
    330         # https://github.com/nix-community/home-manager/issues/2064
    331         systemd.user.targets.tray = {
    332           Unit = {
    333             Description = "Home Manager System Tray";
    334             Requires = [ "graphical-session-pre.target" ];
    335           };
    336         };
    337 
    338         # thanks K900
    339         gtk = {
    340           enable = true;
    341           theme = {
    342             package = pkgs.kdePackages.breeze-gtk;
    343             name = "Breeze";
    344           };
    345           cursorTheme = {
    346             package = pkgs.kdePackages.breeze-icons;
    347             name = "Breeze_Snow";
    348           };
    349           iconTheme = {
    350             package = pkgs.papirus-icon-theme;
    351             name = "Papirus-Dark";
    352           };
    353           gtk2 = {
    354             configLocation = "${config.xdg.configHome}/gtk-2.0/gtkrc";
    355             extraConfig = ''
    356               gtk-alternative-button-order = 1
    357             '';
    358           };
    359           gtk3.extraConfig = {
    360             gtk-application-prefer-dark-theme = true;
    361             gtk-decoration-layout = "icon:minimize,maximize,close";
    362           };
    363           gtk4.extraConfig = {
    364             gtk-application-prefer-dark-theme = true;
    365             gtk-decoration-layout = "icon:minimize,maximize,close";
    366           };
    367         };
    368 
    369         mj.plasma.kconfig = {
    370           kdeglobals = {
    371             General.ColorScheme = "ArcDark";
    372             Icons.Theme = "Papirus-Dark";
    373             KDE.widgetStyle = "Breeze";
    374           };
    375           plasmarc.Theme.name = "Arc-Dark";
    376           kscreenlockerrc.Greeter = {
    377             Theme = "com.github.varlesh.arc-dark";
    378           };
    379           ksplashrc.KSplash = {
    380             Engine = "KSplashQML";
    381             Theme = "com.github.varlesh.arc-dark";
    382           };
    383           kwinrc."org.kde.kdecoration2" = {
    384             library = "org.kde.kwin.aurorae";
    385             theme = "__aurorae__svg__Arc-Dark";
    386           };
    387           kcminputrc.Mouse.cursorTheme = "Breeze_Snow";
    388           # don't mess with GTK settings
    389           kded5rc."Module-gtkconfig".autoload = false;
    390         };
    391       };
    392   };
    393 }