{ config, pkgs, ... }: let VERSION = "22.11"; # HOME-MANAGER = builtins.fetchTarball # "https://github.com/nix-community/home-manager/archive/master.tar.gz"; UNSTABLE_TARBALL = builtins.fetchTarball https://github.com/nixos/nixpkgs/tarball/master; unstable = import UNSTABLE_TARBALL { config = config.nixpkgs.config; }; in { # Remember to close this bracket at the end of the document imports = [ ./hardware-configuration.nix ]; networking.hostName = "workstation"; # networking.wireless.enable = true; networking.networkmanager.enable = true; time.timeZone = "America/Mexico_City"; i18n = { defaultLocale = "en_CA.UTF-8"; extraLocaleSettings = { LC_MONETARY = "es_MX.UTF-8"; }; }; console = { font = "Lat2-Terminus16"; keyMap = "us"; # useXkbConfig = true; # use xkbOptions in tty. }; services = { xserver = { enable = true; # videoDrivers = [ "nvidia" "modesetting" ]; videoDrivers = [ "nvidia" ]; displayManager.gdm.enable = true; desktopManager.gnome.enable = true; # wacom.enable = true; layout = "us"; libinput.enable = true; # Wacom required? # useGlamor = true; }; }; environment.gnome.excludePackages = (with pkgs; [ gnome-photos gnome-tour gnome-text-editor gnome-connections # gnome-shell-extensions baobab ]) ++ (with pkgs.gnome; [ # totem gedit gnome-music epiphany gnome-characters yelp gnome-font-viewer cheese ]); hardware.pulseaudio.enable = false; sound.enable = false; security.rtkit.enable = true; services.pipewire = { enable = true; alsa.enable = true; alsa.support32Bit = true; pulse.enable = true; }; security.sudo = { enable = true; wheelNeedsPassword = false; }; # security.sudo.enable = false; # security.doas.enable = true; # security.doas.extraRules = [{ # users = [ "jawz" ]; # keepEnv = true; # #persist = true; # noPass = true; # }]; nixpkgs.config = { allowUnfree = true; }; users.users.jawz = { isNormalUser = true; extraGroups = [ "wheel" "networkmanager" "docker" "scanner" "lp" ]; initialPassword = "password"; shell = pkgs.fish; packages = (with pkgs; [ blender # cgi animation and sculpting godot # game development unstable.gdtoolkit # gdscript language server krita # art to your heart desire! # drawpile # arty party with friends!! mypaint # not the best art program mypaint-brushes # but it's got some mypaint-brushes1 # nice damn brushes unstable.pureref # create inspiration/reference boards unstable.gimp # the coolest bestest art program to never exist lutris # game/emulator manager unstable.grapejuice # roblox manager minecraft # minecraft official launcher parsec-bin # remote gaming with friends unstable.protonup-qt # update proton-ge libreoffice-fresh # office, but based calibre # ugly af eBook library manager foliate # gtk eBook reader gnome-feeds # feed reader, maybe will replace with nextcloud unstable.wike # gtk wikipedia wow! unstable.furtherance # I made this one tehee track time utility gnome.simple-scan # scanner # sequeler # friendly SQL client blanket # background noise unstable.czkawka # duplicate finder pika-backup # backups # tilix # used to be my favourite terminal, but it's so outdated, that each time I use it less and less… gnome-obfuscate # censor private information metadata-cleaner # remove any metadata and geolocation from files gnome-recipes # migrate these to mealie and delete unstable.denaro # manage your finances # unstable.celeste # sync tool for any cloud provider # libgda # for pano shell extension celluloid # video player cozy # audiobooks player gnome-podcasts # podcast player handbrake # video converter, may be unnecessary curtail # image compressor pitivi # video editor unstable.identity # compare images or videos mousai # poor man shazam tagger # tag music files # bottles # wine prefix manager obs-studio # screen recorder & streamer shortwave # listen to world radio nextcloud-client # teehee discord # chat google-chrome # web browser with spyware included firefox # web browser that allows to disable spyware librewolf # no spyware web browser tor-browser-bundle-bin # dark web, so dark! # hugo # website engine nicotine-plus # remember Ares? warp # never used, but supposedly cool for sharing files HentaiAtHome # uh-oh yt-dlp # downloads videos from most video websites unstable.gallery-dl # similar to yt-dlp but for most image gallery websites gdu # disk-space utility, somewhat useful gocryptfs # encrypted filesystem! shhh!!! exa # like ls but with colors trash-cli # oop! didn't meant to delete that ffmpeg_5 # coolest video converter! neofetch # use once for brag, never again rmlint # probably my favourite app, amazing dupe finder that integrates well with BTRFS tldr # man for retards # ffmpegthumbnailer # create video thumbnails for nautilus, in absence of totem vcsi # video thumbnails for torrents, can I replace it with ^? mediainfo # technical info about videos, needed by some of my scripts tree-sitter # code parsing, required by Doom emacs xdg-ninja # help declutter $HOME torrenttools # create torrent files from the terminal! lm_sensors # for extension, displays cpu temp # required by doom emacs, but still are rather useful. fd # modern find, faster searches fzf # fuzzy finder! super cool and useful ripgrep # modern grep languagetool # proofreader for English. check if works without the service graphviz # graphs # these two are for doom everywhere xorg.xwininfo xdotool # development environment nix-direnv # creates ephimeral environments direnv # manages development environment exercism # learn to code # SH bats # testing system, required by Exercism bashdb # autocomplete shellcheck # linting shfmt # a shell parser and formatter nodePackages.bash-language-server # LSP support file # required by my tasks script? gnome.zenity # dependency of my scripts xclip # manipulate clipboard from scripts # NIX nixfmt # linting # PYTHON. python3 # base language pipenv # python development workflow for humans # C# & Rust omnisharp-roslyn # c# linter and code formatter # HASKELL # cabal-install # haskell interface # JS # jq # linting nodejs # not as bad as I thought hunspell hunspellDicts.it_IT hunspellDicts.es_MX hunspellDicts.en_CA # Themes adwaita-qt unstable.adw-gtk3 unstable.gradience # theme customizer, allows you to modify adw-gtk3 themes gnome.gnome-tweaks # tweaks for the gnome desktop environment # Fonts (nerdfonts.override { fonts = [ "Agave" "CascadiaCode" "SourceCodePro" "Ubuntu" "FiraCode" "Iosevka" ]; }) symbola (papirus-icon-theme.override { color = "adwaita"; }) ]) ++ (with pkgs.python310Packages; [ black # Python code formatter flake8 # wraper for pyflakes, pycodestyle and mccabe isort # sort Python imports nose # testing and running python scripts pipx # install python packages in a virtual environment poetry # dependency management made easy pyflakes # checks source code for errors pylint # bug and style checker for python pytest # framework for writing tests speedtest-cli # check internet speed from the comand line editorconfig # follow rules of contributin ]) ++ (with pkgs.bat-extras; [ batman # man pages batpipe # piping batgrep # ripgrep batdiff # this is getting crazy! batwatch # probably my next best friend prettybat # trans your sourcecode! ]) ++ (with pkgs.fishPlugins; [ sponge # keep history clean from typos fzf-fish # fish command line with fzf keybindings colored-man-pages # self explanatory autopair-fish # who has time for a closing bracket? bass # integrate bash utilities on fish ]) ++ (with pkgs.gnomeExtensions; [ appindicator gsconnect freon panel-scroll reading-strip tactile pano ]) ++ (with pkgs.nodePackages; [ dockerfile-language-server-nodejs markdownlint-cli prettier pnpm ]); }; # <--- end of package list fonts.fontconfig.enable = true; home-manager.useUserPackages = true; home-manager.useGlobalPkgs = true; home-manager.users.jawz = { config, pkgs, ... }:{ # imports = [ ./dotfiles/dconf.nix ]; home.stateVersion = VERSION; home.packages = with pkgs; [ ]; programs.starship.enable = true; programs.fish = { enable = true; # useBabelfish = true; This setting doens't work from inside home-manager shellAliases = { ls = "exa --icons --group-directories-first --no-permissions --no-user --no-time"; edit = "emacsclient -t"; comic = "download -u jawz -i (cat $lc | fzf --multi --exact -i)"; gallery = "download -u jawz -i (cat $lw | fzf --multi --exact -i)"; open_gallery = "open (find /mnt/disk2/scrapping/JawZ/gallery-dl -type d | fzf)"; unique_extensions = "find . -type f | string match -r '([^.\/]+)\$' | sort -u"; cp = "cp -i"; mv = "mv -i"; mkdir = "mkdir -p"; rm = "trash"; ".." = "cd .."; "..." = "cd ../.."; ".3" = "cd ../../.."; ".4" = "cd ../../../.."; ".5" = "cd ../../../../.."; }; shellAbbrs = { dl = "download -u jawz -i"; ex = "ls"; e = "edit"; c = "cat"; f = "fzf --multi --exact -i"; sc = "systemctl --user"; jc = "journalctl --user -xeu"; }; interactiveShellInit = '' function fish_greeting pokemon-colorscripts -r --no-title end # Lists set -l list_root ${config.home.homeDirectory}/.config/jawz/lists/jawz set lw $list_root/watch.txt set li $list_root/instant.txt set lc $list_root/comic.txt set command_timeout = 30 set GPG_TTY (tty) # Set EMACS/VI mode function fish_user_key_bindings # fish_default_key_bindings fish_vi_key_bindings end ''; functions = { nixos-magic = '' set -l nix_file "$HOME/Development/NixOS/configuration.nix" set -l hardware_file "$HOME/Development/NixOS/hardware-configuration.nix" nixfmt $nix_file nixfmt $hardware_file sudo nixos-rebuild switch -I nixos-config=$nix_file ''; mkcd = '' mkdir -pv $argv cd $argv ''; }; }; programs = { bat = { enable = true; config = { # map-syntax = [ "*.jenkinsfile:Groovy" "*.props:Java Properties" ]; pager = "less -FR"; theme = "base16"; }; }; git = { enable = true; userName = "Danilo Reyes"; userEmail = "CaptainJawZ@outlook.com"; }; # gpg = { # enable = true; # homedir = "${config.xdg.dataHome}/gnupg"; # }; htop = { enable = true; package = pkgs.htop-vim; }; }; xdg = { enable = true; userDirs = { enable = true; # createDirectories = true; desktop = "${config.home.homeDirectory}"; documents = "${config.home.homeDirectory}/Documents"; download = "${config.home.homeDirectory}/Downloads"; music = "${config.home.homeDirectory}/Music"; pictures = "${config.home.homeDirectory}/Pictures"; # publicShare = "${config.home.homeDirectory}/.local/hd/Public"; templates = "${config.home.homeDirectory}/.local/share/Templates"; videos = "${config.home.homeDirectory}/Videos"; }; configFile = { "wgetrc".source = ./dotfiles/wget/wgetrc; "configstore/update-notifier-npm-check.json".source = ./dotfiles/npm/update-notifier-npm-check.json; "npm/npmrc".source = ./dotfiles/npm/npmrc; "gallery-dl/config.json".source = ./dotfiles/gallery-dl/config.json; "htop/htoprc".source = ./dotfiles/htop/htoprc; }; }; services = { emacs = { enable = true; defaultEditor = true; package = pkgs.emacs; }; }; }; environment.systemPackages = with pkgs; [ wget docker-compose # easy way to migrate my docker anywhere! ]; environment.variables = rec { # PATH XDG_CACHE_HOME = "\${HOME}/.cache"; XDG_CONFIG_HOME = "\${HOME}/.config"; XDG_BIN_HOME = "\${HOME}/.local/bin"; XDG_DATA_HOME = "\${HOME}/.local/share"; XDG_STATE_HOME = "\${HOME}/.local/state"; SCRIPTS = "\${HOME}/Development/Scripts"; # DEV PATH CABAL_CONFIG = "\${XDG_CONFIG_HOME}/cabal/config"; CABAL_DIR = "\${XDG_CACHE_HOME}/cabal"; CARGO_HOME = "\${XDG_DATA_HOME}/cargo"; GEM_HOME = "\${XDG_DATA_HOME}/ruby/gems"; GEM_PATH = "\${XDG_DATA_HOME}/ruby/gems"; GEM_SPEC_CACHE = "\${XDG_DATA_HOME}/ruby/specs"; GOPATH = "\${XDG_DATA_HOME}/go"; NPM_CONFIG_USERCONFIG = "\${XDG_CONFIG_HOME}/npm/npmrc"; PNPM_HOME = "\${XDG_DATA_HOME}/pnpm"; # OPTIONS HISTFILE = "\${XDG_STATE_HOME}/bash/history"; LESSHISTFILE = "-"; GHCUP_USE_XDG_DIRS = "true"; RIPGREP_CONFIG_PATH = "\${XDG_CONFIG_HOME}/ripgrep/ripgreprc"; ELECTRUMDIR = "\${XDG_DATA_HOME}/electrum"; VISUAL = "emacsclient -ca emacs"; WGETRC = "\${XDG_CONFIG_HOME}/wgetrc"; XCOMPOSECACHE = "${XDG_CACHE_HOME}/X11/xcompose"; "_JAVA_OPTIONS" = "-Djava.util.prefs.userRoot=\${XDG_CONFIG_HOME}/java"; # NVIDIA CUDA_CACHE_PATH = "\${XDG_CACHE_HOME}/nv"; # GBM_BACKEND = "nvidia-drm"; # "__GLX_VENDOR_LIBRARY_NAME" = "nvidia"; # Themes # GTK_THEME = "Adwaita:light"; # QT_QPA_PLATFORMTHEME = "adwaita"; # QT_STYLE_OVERRIDE = "adwaita"; CALIBRE_USE_SYSTEM_THEME = "1"; PATH = [ "\${HOME}/.local/bin" "\${XDG_CONFIG_HOME}/emacs/bin" "\${XDG_DATA_HOME}/npm/bin" "\${XDG_DATA_HOME}/pnpm" ]; }; virtualisation.docker = { enable = true; storageDriver = "btrfs"; enableNvidia = true; }; snapraid = { enable = true; touchBeforeSync = true; sync.interval = "02:00"; scrub = { plan = 10; olderThan = 10; interval = "4:00"; }; parityFiles = [ "/mnt/parity/snapraid.parity" ]; extraConfig = '' autosave 50 ''; exclude = [ "/tmp/" "/lost+found/" "/multimedia/downloads/" "/scrapping/nextcloud/" "/backups/" ]; dataDisks = { d1 = "/mnt/disk1/"; d2 = "/mnt/disk2/"; }; contentFiles = [ "/var/snapraid.content" "/mnt/disk1/snapraid.content" "/mnt/disk2/snapraid.content" ]; }; programs = { mtr.enable = true; neovim = { enable = true; vimAlias = true; }; gnupg.agent = { enable = true; enableSSHSupport = true; }; geary = { enable = true; }; steam = { enable = true; remotePlay.openFirewall = true; dedicatedServer.openFirewall = true; }; }; services = { printing = { enable = true; drivers = [ pkgs.hplip pkgs.hplipWithPlugin ]; }; # ipp-usb.enable = true; # usb scanner avahi.enable = true; avahi.nssmdns = true; fstrim.enable = true; btrfs.autoScrub = { enable = true; fileSystems = [ "/" "/mnt/disk1" "/mnt/disk2" ]; }; openssh = { enable = true; ports = [ 25152 ]; }; # udev.packages = with pkgs; [ gnome.gnome-settings-daemon ]; emacs = { enable = true; defaultEditor = true; package = pkgs.emacs; }; }; systemd.services = { "docker-compose" = { enable = true; restartIfChanged = true; description = "Start docker-compose servers"; after = [ "docker.service" "docker.socket" ]; requires = [ "docker.service" "docker.socket" ]; wantedBy = [ "default.target" ]; environment = { FILE = "/home/jawz/Development/Docker/docker-compose.yml"; }; path = [ pkgs.docker-compose ]; serviceConfig = { Restart = "on-failure"; # Type = "simple"; RestartSec = 30; ExecStart = "${pkgs.docker-compose}/bin/docker-compose -f \${FILE} up --remove-orphans"; ExecStop = "${pkgs.docker-compose}/bin/docker-compose -f \${FILE} down"; }; }; }; systemd.user.services = { "HentaiAtHome" = { enable = true; restartIfChanged = true; description = "Run hentai@home server"; wantedBy = [ "default.target" ]; path = [ pkgs.HentaiAtHome ]; serviceConfig = { Restart = "on-failure"; RestartSec = 30; WorkingDirectory="/mnt/hnbox"; ExecStart = "${pkgs.HentaiAtHome}/bin/HentaiAtHome"; }; }; }; # networking.firewall.allowedTCPPorts = [ ... ]; # networking.firewall.allowedUDPPorts = [ ... ]; # Or disable the firewall altogether. networking.firewall.enable = false; system.copySystemConfiguration = true; system.stateVersion = VERSION; }