NixOS/hosts/workstation/configuration.nix

240 lines
7.0 KiB
Nix

{ config, lib, pkgs, ... }:
let
unstable = import
(builtins.fetchTarball "https://github.com/nixos/nixpkgs/tarball/master") {
config = config.nixpkgs.config;
};
in {
imports = [
# <agenix/modules/age.nix>
./hardware-configuration.nix
../../base.nix
../../gnome.nix
../../home-manager/default.nix
# ../../services/systemd-user/tasks.nix
];
my = {
apps = {
art.enable = true;
dictionaries.enable = true;
fonts.enable = true;
gaming.enable = true;
internet.enable = true;
office.enable = true;
};
dev = {
haskell.enable = true;
nix.enable = true;
python.enable = true;
gameDev.enable = true;
};
services = {
network.enable = true;
nvidia.enable = true;
printing.enable = true;
sound.enable = true;
};
};
networking = {
hostName = "workstation";
firewall = let
openPorts = [
7860 # chatgpt
6674 # ns-usbloader
];
openPortRanges = [{
from = 1714; # kdeconnect
to = 1764; # kdeconnect
}];
in {
allowedTCPPorts = openPorts;
allowedUDPPorts = openPorts;
allowedTCPPortRanges = openPortRanges;
allowedUDPPortRanges = openPortRanges;
};
};
nix = let
featuresList = [
"nixos-test"
"benchmark"
"big-parallel"
"kvm"
"gccarch-znver3"
"gccarch-skylake"
"gccarch-alderlake"
];
in {
distributedBuilds = true;
settings = {
cores = 16;
trusted-users = [ "nixremote" ];
system-features = featuresList;
};
};
nixpkgs = {
config = {
allowUnfree = true;
permittedInsecurePackages = [ ];
};
};
users = {
groups.nixremote.gid = 555;
users = {
nixremote = {
isNormalUser = true;
createHome = true;
group = "nixremote";
home = "/var/nixremote/";
openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN6HsajaTL+nTJtSIu00M5WJwgt/7fyU59gBr2R7tbnv root@server"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGrC7sVvDT0is2oq/H1Do99LPaQKvyGMAsrF6/fuf1aP root@miniserver"
];
};
jawz = {
packages = (with pkgs; [
blanket # background noise
pika-backup # backups
metadata-cleaner # remove any metadata and geolocation from files
# sequeler # friendly SQL client
# czkawka # duplicate finder
# celeste # sync tool for any cloud provider
easyeffects # equalizer
celluloid # video player
# cozy # audiobooks player
# hakuneko # manga & comic GUI downloader
# gnome-podcasts # podcast player
handbrake # video converter, may be unnecessary
curtail # image compressor
pitivi # video editor
identity # compare images or videos
gnome-obfuscate # censor private information
mousai # poor man shazam
tagger # tag music files
obs-studio # screen recorder & streamer
shortwave # listen to world radio
unstable.yt-dlp # downloads videos from most video websites
gallery-dl # similar to yt-dlp but for most image gallery websites
fd # modern find, faster searches
fzf # fuzzy finder! super cool and useful
gdu # disk-space utility checker, somewhat useful
du-dust # rusty du similar to gdu
(ripgrep.override { withPCRE2 = true; }) # modern grep
trash-cli # oop! did not meant to delete that
eza # like ls but with colors
gocryptfs # encrypted filesystem! shhh!!!
rmlint # probably my favourite app, amazing dupe finder that integrates well with BTRFS
imagemagick # photoshop what??
ffmpeg_5-full # not ffmpreg, the coolest video conversion tool!
torrenttools # create torrent files from the terminal!
vcsi # video thumbnails for torrents, can I replace it with ^?
(writeScriptBin "tasks" (builtins.readFile ../../scripts/tasks.sh))
(writeScriptBin "ffmpeg4discord"
(builtins.readFile ../../scripts/ffmpeg4discord.py))
(writeScriptBin "ffmpreg"
(builtins.readFile ../../scripts/ffmpreg.sh))
(writeScriptBin "split-dir"
(builtins.readFile ../../scripts/split-dir.sh))
(writeScriptBin "run" (builtins.readFile ../../scripts/run.sh))
(writeScriptBin "pika-list"
(builtins.readFile ../../scripts/pika-list.sh))
# required (optionally) by doom emacs, but still are rather useful
tree-sitter # code parsing based on symbols and shit, I do not get it
graphviz # graphs
tetex
languagetool # proofreader for English
# these two are for doom everywhere
xorg.xwininfo
xdotool
xclip
tldr # man for retards
exercism # learn to code
# SH
bats # testing system, required by Exercism
bashdb # autocomplete
shellcheck # linting
shfmt # a shell parser and formatter
# DOCKER
dockfmt
# JS
nodejs # not as bad as I thought
jq # linting
]) ++ (with pkgs.python3Packages; [
(buildPythonApplication rec {
pname = "download";
version = "1.5";
src = ../../scripts/download/.;
doCheck = false;
buildInputs = [ setuptools ];
propagatedBuildInputs = [ pyyaml types-pyyaml ];
})
(buildPythonApplication rec {
pname = "ffpb";
version = "0.4.1";
src = fetchPypi {
inherit pname version;
sha256 = "sha256-7eVqbLpMHS1sBw2vYS4cTtyVdnnknGtEI8190VlXflk=";
};
doCheck = false;
buildInputs = [ setuptools ];
propagatedBuildInputs = [ tqdm ];
})
]) ++ (with pkgs.nodePackages; [
# Language servers
dockerfile-language-server-nodejs
yaml-language-server
bash-language-server
vscode-json-languageserver
pyright
markdownlint-cli # Linter
prettier # Linter
pnpm # Package manager
]);
}; # <--- end of package list
};
};
environment.etc = {
"wireplumber/bluetooth.lua.d/51-bluez-config.lua".text = ''
bluez_monitor.properties = {
["bluez5.enable-sbc-xq"] = true,
["bluez5.enable-msbc"] = true,
["bluez5.enable-hw-volume"] = true,
["bluez5.headset-roles"] = "[ hsp_hs hsp_ag hfp_hf hfp_ag ]"
}
'';
};
programs.kdeconnect = {
enable = true;
package = pkgs.gnomeExtensions.gsconnect;
};
services.resilio = {
deviceName = "chichis";
enable = true;
useUpnp = true;
enableWebUI = true;
httpPass = "528491";
httpLogin = "chichis";
httpListenPort = 9876;
httpListenAddr = "0.0.0.0";
directoryRoot = "/resilio";
};
}