Summary Files Commits Branches @commit @diff @stats
path: root / modules / personal
diff options
context:
space:
mode:
Commitcb613ed855f6661ecac17b696bafc17472256215 (patch)
Author
 Syndamia <kamen@syndamia.com>
2024-07-12 16:38:01 +0300
Committer
 Syndamia <kamen@syndamia.com>
2024-07-12 16:38:01 +0300
Files5c8a381e55f6d011c0e3cb1598814ae15f64c5c6 /modules/personal
nix-cb613ed855f6661ecac17b696bafc17472256215.tar
nix-cb613ed855f6661ecac17b696bafc17472256215.tar.gz
nix-cb613ed855f6661ecac17b696bafc17472256215.zip
Parent279900a9a5b4d4a1ffb9bf5d29ce0afd8ad33ae2 (diff)
[modules] Added subtypes to modules
diff --git a/modules/personal/battery.nix b/modules/personal/battery.nix
new file mode 100644
index 0000000..417446e
--- /dev/null
+++ b/modules/personal/battery.nix
@@ -0,0 +1,10 @@
+{ pkgs, ... }: {
+ environment.systemPackages = with pkgs; [
+ powertop upower acpid tlp
+ ];
+
+ services = {
+ upower.enable = true;
+ tlp.enable = true;
+ };
+}
diff --git a/modules/personal/cli-essential.nix b/modules/personal/cli-essential.nix
new file mode 100644
index 0000000..b3c38f5
--- /dev/null
+++ b/modules/personal/cli-essential.nix
@@ -0,0 +1,20 @@
+{ pkgs, ... }: {
+ environment.systemPackages = with pkgs; [
+ dash htop rlwrap bc
+ # Hardware
+ lm_sensors lshw
+ # Network
+ wget git rsync inetutils
+ # Files
+ vim-full
+ # Archive formats
+ gnutar p7zip zip unzip rar unrar
+ ];
+
+ programs = {
+ gnupg.agent = {
+ enable = true;
+ enableSSHSupport = true;
+ };
+ };
+}
diff --git a/modules/personal/cli-powerful.nix b/modules/personal/cli-powerful.nix
new file mode 100644
index 0000000..558adb5
--- /dev/null
+++ b/modules/personal/cli-powerful.nix
@@ -0,0 +1,18 @@
+{ pkgs, ... }: {
+ environment.systemPackages = with pkgs; [
+ neovim cron
+ # Hardware
+ usbutils chrony iotop efibootmgr libva-utils
+ # File systems
+ parted dosfstools mtpfs ntfs3g squashfsTools
+ # Network
+ vnstat yt-dlp
+ # Working with files
+ neovim inotify-tools lsof tree xmlstarlet
+ # Working with (media) files
+ ffmpeg img2pdf pdftk imagemagick pngcrush jpegoptim optipng gd kid3 pandoc libisoburn mediainfo
+ cdrtools rpm dpkg
+ # Misc
+ neofetch nixpkgs-2305.exa moc lazygit aspell ddrescue
+ ];
+}
diff --git a/modules/personal/dev-cli.nix b/modules/personal/dev-cli.nix
new file mode 100644
index 0000000..6b0994e
--- /dev/null
+++ b/modules/personal/dev-cli.nix
@@ -0,0 +1,25 @@
+{ pkgs, ... }: {
+ environment.systemPackages = with pkgs; [
+ gnumake
+ lowdown wakatime cloc go php fontforge ruby csslint
+ # C/C++
+ clang clang-tools glibc gcc gdb valgrind pugixml cmake libusb libusb-compat-0_1 meson
+ # .NET
+ dotnet-sdk mono
+ # Python
+ python3Minimal
+ # Android
+ android-tools heimdall
+ # awk
+ gawk mawk nawk
+ # DB
+ sqlite sqlitebrowser flyway
+ # Functional
+ racket ghc sbcl
+ # Compilers
+ flex bison
+ ];
+
+ services.mysql.enable = false;
+ services.mysql.package = pkgs.mysql;
+}
diff --git a/modules/personal/dev-gui.nix b/modules/personal/dev-gui.nix
new file mode 100644
index 0000000..fd066f3
--- /dev/null
+++ b/modules/personal/dev-gui.nix
@@ -0,0 +1,8 @@
+{ pkgs, ... }: {
+ environment.systemPackages = with pkgs; [
+ # Networking
+ gns3-gui gns3-server dynamips
+ # Other
+ rstudio
+ ];
+}
diff --git a/modules/personal/fonts.nix b/modules/personal/fonts.nix
new file mode 100644
index 0000000..923f452
--- /dev/null
+++ b/modules/personal/fonts.nix
@@ -0,0 +1,9 @@
+{ pkgs, ... }: {
+ fonts.packages = with pkgs; [
+ meslolgs-nerdfont
+ # Note to self: DO NOT INSTALL ADOBE FONTS!
+ corefonts vistafonts liberation_ttf helvetica-neue-lt-std noto-fonts noto-fonts-emoji cm_unicode symbola
+ # CJK
+ noto-fonts-cjk arphic-ukai arphic-uming takao wqy_microhei wqy_zenhei
+ ];
+}
diff --git a/modules/personal/gui-essential.nix b/modules/personal/gui-essential.nix
new file mode 100644
index 0000000..f6cf40e
--- /dev/null
+++ b/modules/personal/gui-essential.nix
@@ -0,0 +1,35 @@
+{ pkgs, ... }: {
+ environment.systemPackages = with pkgs; [
+ devilspie2 sxhkd speedcrunch peek wireshark
+ obs-studio qbittorrent glava
+ # Terminals
+ terminator xterm
+ # Settings and backup tools
+ feh arandr pavucontrol blueberry piper
+ # Tray
+ copyq flameshot barrier redshift
+ # File openers/players
+ audacious mpv libreoffice
+ # File editors
+ gimp xed-editor
+ # Web (app) clients
+ brave nixpkgs-2305.bitwarden nextcloud-client thunderbird birdtray
+ ];
+
+ programs.firefox.enable = true;
+
+ systemd.user.services = {
+ devilspie2 = {
+ description = "devilspie2 runner";
+ wantedBy = [ "graphical-session.target" ];
+ wants = [ "graphical-session.target" ];
+ after = [ "graphical-session.target" ];
+ serviceConfig = {
+ ExecStart = "${pkgs.devilspie2}/bin/devilspie2";
+ Restart = "on-failure";
+ RestartSec = 1;
+ TimeoutStopSec = 10;
+ };
+ };
+ };
+}
diff --git a/modules/personal/gui-powerful.nix b/modules/personal/gui-powerful.nix
new file mode 100644
index 0000000..469dd15
--- /dev/null
+++ b/modules/personal/gui-powerful.nix
@@ -0,0 +1,8 @@
+{ pkgs, ... }: {
+ environment.systemPackages = with pkgs; [
+ # File/image/audio editors
+ inkscape krita ardour
+ # System
+ gparted timeshift
+ ];
+}
diff --git a/modules/personal/hardware-general.nix b/modules/personal/hardware-general.nix
new file mode 100644
index 0000000..4f83454
--- /dev/null
+++ b/modules/personal/hardware-general.nix
@@ -0,0 +1,9 @@
+{ pkgs, ... }: {
+ environment.systemPackages = with pkgs; [
+ pipewire bluez
+ ];
+
+ programs = {
+ mtr.enable = true;
+ };
+}
diff --git a/modules/personal/hardware-laptop.nix b/modules/personal/hardware-laptop.nix
new file mode 100644
index 0000000..3a6d045
--- /dev/null
+++ b/modules/personal/hardware-laptop.nix
@@ -0,0 +1,18 @@
+{ pkgs, ... }: {
+ environment.systemPackages = with pkgs; [
+ brightnessctl
+ libinput libinput-gestures
+ epkowa
+ (epsonscan2.override { withNonFreePlugins = true; withGui = true; })
+ ];
+
+ hardware.sane.extraBackends = [ (pkgs.epsonscan2.override { withNonFreePlugins = true; withGui = true; }) ];
+
+ services.xserver = {
+ # touchpad support
+ libinput = {
+ enable = true;
+ touchpad.naturalScrolling = true;
+ };
+ };
+}
diff --git a/modules/personal/keyboards-custom.nix b/modules/personal/keyboards-custom.nix
new file mode 100644
index 0000000..9dcc502
--- /dev/null
+++ b/modules/personal/keyboards-custom.nix
@@ -0,0 +1,9 @@
+{ pkgs, ... }: {
+ environment.systemPackages = with pkgs; [
+ via qmk
+ ];
+ services.udev.packages = with pkgs; [
+ via qmk
+ ];
+ hardware.keyboard.qmk.enable = true;
+}
diff --git a/modules/personal/openbox-de.nix b/modules/personal/openbox-de.nix
new file mode 100644
index 0000000..aa9a16b
--- /dev/null
+++ b/modules/personal/openbox-de.nix
@@ -0,0 +1,98 @@
+{ pkgs, ... }: {
+ environment.systemPackages = with pkgs; [
+ # Essential libs
+ dbus cairo libnotify gtk3 yad gnome.zenity gnome.gvfs gmtp at-spi2-atk
+ # Main apps and their config apps
+ # window manager, compositor, taskbar, notifications, app menu, lockscreen, session manager
+ openbox lxappearance obconf picom nixpkgs-2305.tint2 dunst jgmenu i3lock-color lightdm lightdm-gtk-greeter
+ # General X11 tools
+ lxqt.lxqt-policykit xorg.xev xfontsel xorg.xmodmap xorg.xwininfo xorg.xprop clipnotify xdotool xautolock xcape xorg.setxkbmap xkbmon xorg.xhost xclip wmctrl
+ menu-cache
+ # Tray
+ libappindicator networkmanagerapplet pnmixer
+ # File openers
+ evince gnome.eog nixpkgs-2305.gnome.file-roller cinnamon.nemo-with-extensions gnome.seahorse
+ # System
+ gnome.gnome-system-monitor udisks gnome.gnome-disk-utility baobab gnome.simple-scan
+ # Theme
+ nixpkgs-mint.cinnamon.mint-themes nixpkgs-mint.cinnamon.mint-y-icons oreo-black-bordered-cursor
+ openbox-theme-collections openbox-blocks-dark
+
+ xdg-desktop-portal-gtk xdg-desktop-portal-xapp
+ ];
+
+ security.polkit.enable = true;
+
+ xdg.portal = {
+ enable = true;
+ configPackages = with pkgs; [ xdg-desktop-portal-gtk xdg-desktop-portal-xapp ];
+ config.common = {
+ default = [ "gtk" "xapp" ];
+ "org.freedesktop.impl.portal.Screenshot" = [ "xapp" ];
+ };
+ };
+
+ programs = {
+ dconf.enable = true;
+ gnome-disks.enable = true;
+ };
+
+ services = {
+ dbus.packages = with pkgs; [ gnome2.GConf ];
+ udev.packages = with pkgs; [ gnome.gnome-settings-daemon ];
+
+ udisks2.enable = true; # gnome-disks disk access
+ gnome.gnome-keyring.enable = true;
+ gvfs.enable = true; # MTP (for nemo)
+
+ logind.extraConfig = ''
+ InhibitDelayMaxSec=1
+ HoldoffTimeoutSec=1s
+ HandlePowerKey=poweroff'';
+ };
+
+ services.xserver = {
+ enable = true;
+ # Window manager
+ windowManager.openbox.enable = true;
+
+ xautolock = {
+ enable = true;
+ time = 15;
+ locker = "/home/kamen/.a/sys/lock.sh";
+ extraOptions = [ "-detectsleep" "-secure" ];
+ };
+ };
+
+ systemd.services = {
+ lockscreen = {
+ wantedBy = [ "sleep.target" ];
+ before = [ "suspend.target" ];
+ serviceConfig = {
+ User = "kamen";
+ Environment = [ "DISPLAY=:0" "PATH=/run/current-system/sw/bin" "DBUS_SESSION_BUS_ADDRESS=\"unix:path=/run/user/1000/bus\"" ];
+ ExecStart = "/home/kamen/.a/sys/lock.sh";
+ };
+ };
+ };
+
+ systemd.user.services = {
+ lxqt-policykit = {
+ description = "lxqt-policykit runner";
+ wantedBy = [ "graphical-session.target" ];
+ wants = [ "graphical-session.target" ];
+ after = [ "graphical-session.target" ];
+ serviceConfig = {
+ Type = "simple";
+ ExecStart = "${pkgs.lxqt.lxqt-policykit}/bin/lxqt-policykit-agent";
+ Restart = "on-failure";
+ RestartSec = 1;
+ TimeoutStopSec = 10;
+ };
+ };
+
+ # This is kinda gross, because the xautolock service is already defined and configured
+ # inside services.xserver.xautolock, but it's the only way I know
+ xautolock.serviceConfig.Environment = [ "DISPLAY=:0" "PATH=/run/current-system/sw/bin" ];
+ };
+}
diff --git a/modules/personal/rtl-sdr.nix b/modules/personal/rtl-sdr.nix
new file mode 100644
index 0000000..4347bf4
--- /dev/null
+++ b/modules/personal/rtl-sdr.nix
@@ -0,0 +1,150 @@
+{ pkgs, ... }: {
+ environment.systemPackages = with pkgs; [
+ rtl-sdr gqrx sdrangel
+ ];
+
+ services.udev.extraRules = ''
+#
+# Copyright 2012-2013 Osmocom rtl-sdr project
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+
+# original RTL2832U vid/pid (hama nano, for example)
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="2832", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# RTL2832U OEM vid/pid, e.g. ezcap EzTV668 (E4000), Newsky TV28T (E4000/R820T) etc.
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="2838", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# DigitalNow Quad DVB-T PCI-E card (4x FC0012?)
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="0413", ATTRS{idProduct}=="6680", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# Leadtek WinFast DTV Dongle mini D (FC0012)
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="0413", ATTRS{idProduct}=="6f0f", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# Genius TVGo DVB-T03 USB dongle (Ver. B)
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="0458", ATTRS{idProduct}=="707f", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# Terratec Cinergy T Stick Black (rev 1) (FC0012)
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00a9", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# Terratec NOXON rev 1 (FC0013)
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b3", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# Terratec Deutschlandradio DAB Stick (FC0013)
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b4", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# Terratec NOXON DAB Stick - Radio Energy (FC0013)
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b5", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# Terratec Media Broadcast DAB Stick (FC0013)
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b7", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# Terratec BR DAB Stick (FC0013)
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b8", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# Terratec WDR DAB Stick (FC0013)
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00b9", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# Terratec MuellerVerlag DAB Stick (FC0013)
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00c0", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# Terratec Fraunhofer DAB Stick (FC0013)
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00c6", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# Terratec Cinergy T Stick RC (Rev.3) (E4000)
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00d3", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# Terratec T Stick PLUS (E4000)
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00d7", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# Terratec NOXON rev 2 (E4000)
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ccd", ATTRS{idProduct}=="00e0", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# PixelView PV-DT235U(RN) (FC0012)
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1554", ATTRS{idProduct}=="5020", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# Astrometa DVB-T/DVB-T2 (R828D)
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="15f4", ATTRS{idProduct}=="0131", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# HanfTek DAB+FM+DVB-T
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="15f4", ATTRS{idProduct}=="0133", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# Compro Videomate U620F (E4000)
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="185b", ATTRS{idProduct}=="0620", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# Compro Videomate U650F (E4000)
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="185b", ATTRS{idProduct}=="0650", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# Compro Videomate U680F (E4000)
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="185b", ATTRS{idProduct}=="0680", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# GIGABYTE GT-U7300 (FC0012)
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d393", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# DIKOM USB-DVBT HD
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d394", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# Peak 102569AGPK (FC0012)
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d395", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# KWorld KW-UB450-T USB DVB-T Pico TV (TUA9001)
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d397", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# Zaapa ZT-MINDVBZP (FC0012)
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d398", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# SVEON STV20 DVB-T USB & FM (FC0012)
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d39d", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# Twintech UT-40 (FC0013)
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d3a4", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# ASUS U3100MINI_PLUS_V2 (FC0013)
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d3a8", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# SVEON STV27 DVB-T USB & FM (FC0013)
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d3af", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# SVEON STV21 DVB-T USB & FM
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="d3b0", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# Dexatek DK DVB-T Dongle (Logilink VG0002A) (FC2580)
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1d19", ATTRS{idProduct}=="1101", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# Dexatek DK DVB-T Dongle (MSI DigiVox mini II V3.0)
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1d19", ATTRS{idProduct}=="1102", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# Dexatek DK 5217 DVB-T Dongle (FC2580)
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1d19", ATTRS{idProduct}=="1103", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# MSI DigiVox Micro HD (FC2580)
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1d19", ATTRS{idProduct}=="1104", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# Sweex DVB-T USB (FC0012)
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1f4d", ATTRS{idProduct}=="a803", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# GTek T803 (FC0012)
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1f4d", ATTRS{idProduct}=="b803", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# Lifeview LV5TDeluxe (FC0012)
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1f4d", ATTRS{idProduct}=="c803", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# MyGica TD312 (FC0012)
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1f4d", ATTRS{idProduct}=="d286", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+
+# PROlectrix DV107669 (FC0012)
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1f4d", ATTRS{idProduct}=="d803", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"
+ '';
+}
diff --git a/modules/personal/tex.nix b/modules/personal/tex.nix
new file mode 100644
index 0000000..9e45bb6
--- /dev/null
+++ b/modules/personal/tex.nix
@@ -0,0 +1,12 @@
+{ pkgs, ... }:
+let
+ tex = (pkgs.texlive.combine {
+ inherit (pkgs.texlive) scheme-medium
+ babel-bulgarian cyrillic cancel enumitem;
+ });
+in {
+ environment.systemPackages = with pkgs; [
+ texmaker tex
+ ];
+}
+
diff --git a/modules/personal/users-standard.nix b/modules/personal/users-standard.nix
new file mode 100644
index 0000000..a9065d2
--- /dev/null
+++ b/modules/personal/users-standard.nix
@@ -0,0 +1,16 @@
+{ config, pkgs, ... }: {
+ # zsh
+ programs.zsh.enable = true;
+ environment.shells = with pkgs; [ zsh ];
+ # Thanks https://discourse.nixos.org/t/gns3-setcap-and-ubridge-gns3-unable-to-execute-setcap-command/13485/3
+ users = {
+ groups.ubridge = {};
+ users.kamen = {
+ isNormalUser = true;
+ extraGroups = [ "wheel" "audio" "video" "input" "lpadmin" "libvirtd" "lp" "scanner" "plugdev" "docker" "ubridge" ]; # Enable ‘sudo’ for the user.
+ packages = [ ];
+ shell = pkgs.zsh;
+ homeMode = "711"; # mostly done for httpd access
+ };
+ };
+}
diff --git a/modules/personal/virtualization.nix b/modules/personal/virtualization.nix
new file mode 100644
index 0000000..38c7536
--- /dev/null
+++ b/modules/personal/virtualization.nix
@@ -0,0 +1,10 @@
+{ pkgs, ... }: {
+ environment.systemPackages = with pkgs; [
+ virt-manager libvirt qemu_kvm kvmtool qemu_full
+ ];
+
+ virtualisation = {
+ libvirtd.enable = true;
+ docker.enable = true;
+ };
+}
diff --git a/modules/personal/web-server.nix b/modules/personal/web-server.nix
new file mode 100644
index 0000000..bb4a968
--- /dev/null
+++ b/modules/personal/web-server.nix
@@ -0,0 +1,17 @@
+{ pkgs, ... }: {
+ environment.systemPackages = with pkgs; [
+ apacheHttpd
+ ];
+
+ services.httpd = {
+ enable = true;
+
+ virtualHosts = {
+ syndamiadotcom-local = {
+ hostName = "synd.local";
+ listen = [ { port = 80; } ];
+ documentRoot = "/home/kamen/Programming/GitLab-repos/syndamiadotcom/website";
+ };
+ };
+ };
+}
diff --git a/modules/personal/xserver.nix b/modules/personal/xserver.nix
new file mode 100644
index 0000000..810122a
--- /dev/null
+++ b/modules/personal/xserver.nix
@@ -0,0 +1,13 @@
+{ pkgs, ... }: {
+ services.xserver = {
+ # xkbmap
+ xkb.layout = "us,bg-custom";
+ xkb.variant = ",phonetic-nonstandard";
+ xkb.options = "grp:rwin_toggle,grp:alt_shift_toggle,lv3:switch,caps:escape";
+ xkb.extraLayouts.bg-custom = {
+ description = "Non-standard variant of the traditional Bulgarian phonetic keyboard, which replaces some characters with their English counterparts";
+ languages = [ "bg" ];
+ symbolsFile = ../../packages/bg-custom;
+ };
+ };
+}