diff --git a/configuration.nix b/configuration.nix index a5f744b..fc5d648 100644 --- a/configuration.nix +++ b/configuration.nix @@ -3,559 +3,565 @@ 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"; }; + UNSTABLE_TARBALL = builtins.fetchTarball + https://github.com/nixos/nixpkgs/tarball/master; + unstable = import UNSTABLE_TARBALL { + config = config.nixpkgs.config; }; - console = { - font = "Lat2-Terminus16"; - keyMap = "us"; - # useXkbConfig = true; # use xkbOptions in tty. +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" ]; - displayManager.gdm.enable = true; - desktopManager.gnome.enable = true; - layout = "us"; - libinput.enable = true; # Wacom required? - }; - }; - - environment.gnome.excludePackages = (with pkgs; [ - gnome-photos - gnome-tour - gnome-text-editor - gnome-connections - baobab - ]) ++ (with pkgs.gnome; [ - totem - gedit - gnome-music - epiphany - gnome-characters - yelp - simple-scan - gnome-font-viewer - ]); - - hardware.pulseaudio.enable = false; - sound.enable = false; - security.rtkit.enable = true; - services.pipewire = { +services = { + xserver = { enable = true; - alsa.enable = true; - alsa.support32Bit = true; - pulse.enable = true; + videoDrivers = [ "nvidia" ]; + displayManager.gdm.enable = true; + desktopManager.gnome.enable = true; + layout = "us"; + libinput.enable = true; # Wacom required? }; +}; - security.sudo = { - enable = true; - wheelNeedsPassword = false; - }; +environment.gnome.excludePackages = (with pkgs; [ + gnome-photos + gnome-tour + gnome-text-editor + gnome-connections + baobab +]) +++ (with pkgs.gnome; [ + totem + gedit + gnome-music + epiphany + gnome-characters + yelp + simple-scan + gnome-font-viewer +]); - # security.sudo.enable = false; - # security.doas.enable = true; - # security.doas.extraRules = [{ - # users = [ "jawz" ]; - # keepEnv = true; - # #persist = true; - # noPass = true; - # }]; +hardware.pulseaudio.enable = false; +sound.enable = false; +security.rtkit.enable = true; +services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; +}; - users.users.jawz = { - isNormalUser = true; - extraGroups = [ "wheel" "networkmanager" "docker" ]; - initialPassword = "password"; - shell = pkgs.fish; - packages = with pkgs; [ ]; - }; +security.sudo = { + enable = true; + wheelNeedsPassword = false; +}; - nixpkgs.config = { allowUnfree = true; }; +# security.sudo.enable = false; +# security.doas.enable = true; +# security.doas.extraRules = [{ +# users = [ "jawz" ]; +# keepEnv = true; +# #persist = true; +# noPass = true; +# }]; - fonts.fontconfig.enable = true; +nixpkgs.config = { + allowUnfree = true; +}; - home-manager.useUserPackages = true; - home-manager.useGlobalPkgs = true; +users.users.jawz = { + isNormalUser = true; + extraGroups = [ "wheel" "networkmanager" "docker" ]; + initialPassword = "password"; + shell = pkgs.fish; + packages = (with pkgs; [ - home-manager.users.jawz = { config, 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 +# 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.simple-scan # document scanner +gnome-feeds # feed reader, maybe will replace with nextcloud + +# 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 + +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 + +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 + +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! + +# 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 + +gnome.gnome-tweaks # tweaks for the gnome desktop environment + +gnomeExtensions.appindicator +gnomeExtensions.gsconnect + +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 + +# Fonts +(nerdfonts.override { + fonts = [ "Agave" "CascadiaCode" "SourceCodePro" "Ubuntu" "FiraCode" "Iosevka" ]; +}) +symbola + +# (papirus-icon-theme.override { +# color = "grey"; +# }) + +]) ++ (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.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.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; [ - - # Art - 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 - - # Gaming - lutris # game/emulator manager - grapejuice # roblox manager - minecraft # minecraft official launcher - parsec-bin # remote gaming with friends - unstable.protonup-qt # update proton-ge - - # Productivity - libreoffice-fresh # office, but based - calibre # ugly af eBook library manager - foliate # gtk eBook reader - gnome.simple-scan # document scanner - gnome-feeds # feed reader, maybe will replace with nextcloud - tagger # tag music files - - # Misc - sequeler # friendly SQL client - blanket # background noise - unstable.czkawka # duplicate finder - # pika-backup # backups - tilix # terminal - 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 - - # Multimedia - 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 - # bottles # wine prefix manager - obs-studio # screen recorder & streamer - shortwave # listen to world radio - - # Web - 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 - - 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! - yt-dlp # downloads videos from most video websites - unstable.gallery-dl # similar to yt-dlp but for most image gallery websites - 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! - - # 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 - # doom everywhere - xorg.xwininfo - xdotool - - # development environment - nix-direnv # creates ephimeral environments - direnv # manages development environment - # editorconfig-checker # rules for contributing - 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 - - gnome.gnome-tweaks # tweaks for the gnome desktop environment - - gnomeExtensions.appindicator - gnomeExtensions.gsconnect - - 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 - - # Fonts - (nerdfonts.override { - fonts = [ - "Agave" - "CascadiaCode" - "SourceCodePro" - "Ubuntu" - "FiraCode" - "Iosevka" - ]; - }) - symbola - - # (papirus-icon-theme.override { - # color = "grey"; - # }) - - ]) ++ (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.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.nodePackages; [ - dockerfile-language-server-nodejs - markdownlint-cli - prettier - pnpm - ]); - - 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 = '' - - set fish_greeting "pika pika chu!!!! also remember fisher!" - # 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" - echo $nix_file - nixfmt $nix_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; - }; - }; + 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 = '' - environment.systemPackages = with pkgs; [ - wget - neovim - docker-compose # easy way to migrate my docker anywhere! +set fish_greeting "pika pika chu!!!! also remember fisher!" +# 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" +echo $nix_file +nixfmt $nix_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 + neovim + 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 + 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"; + "_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-dark"; + # QT_STYLE_OVERRIDE = "adwaita"; + # CALIBRE_USE_SYSTEM_THEME = "1"; + + PATH = [ + "\${XDG_BIN_HOME}" + "\${XDG_CONFIG_HOME}/emacs/bin" + "\${XDG_DATA_HOME}/npm/bin" + "\${PNPM_HOME}" + "\${SCRIPTS}" ]; +}; - 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 - 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"; - "_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-dark"; - # QT_STYLE_OVERRIDE = "adwaita"; - # CALIBRE_USE_SYSTEM_THEME = "1"; - - PATH = [ - "\${XDG_BIN_HOME}" - "\${XDG_CONFIG_HOME}/emacs/bin" - "\${XDG_DATA_HOME}/npm/bin" - "\${PNPM_HOME}" - "\${SCRIPTS}" - ]; - }; - - virtualisation.docker = { +virtualisation.docker = { enable = true; storageDriver = "btrfs"; enableNvidia = true; - }; +}; - snapraid = { +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/" + ]; + dataDisks = { + d1 = "/mnt/disk1/"; + d2 = "/mnt/disk2/"; + }; + contentFiles = [ + "/var/snapraid.content" + "/mnt/disk1/snapraid.content" + "/mnt/disk2/snapraid.content" + ]; +}; + +programs = { + mtr.enable = true; + gnupg.agent = { 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/" - ]; - dataDisks = { - d1 = "/mnt/disk1/"; - d2 = "/mnt/disk2/"; - }; - contentFiles = [ - "/var/snapraid.content" - "/mnt/disk1/snapraid.content" - "/mnt/disk2/snapraid.content" + enableSSHSupport = true; + }; + geary = { + enable = true; + }; + steam = { + enable = true; + remotePlay.openFirewall = true; + dedicatedServer.openFirewall = true; + }; +}; + +services = { + printing.enable = true; + fstrim.enable = true; + btrfs.autoScrub = { + enable = true; + fileSystems = [ + "/" + "/mnt/disk1" + "/mnt/disk2" ]; }; - programs = { - mtr.enable = true; - gnupg.agent = { - enable = true; - enableSSHSupport = true; + 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 = [ "multi-user.target" ]; + environment = { + FILE = "/home/jawz/Development/Docker/docker-compose.yml"; }; - geary = { enable = true; }; - steam = { - enable = true; - remotePlay.openFirewall = true; - dedicatedServer.openFirewall = true; + 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}docker-compose -f \${FILE} down"; }; }; +}; - services = { - printing.enable = 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 ]; - }; +# networking.firewall.allowedTCPPorts = [ ... ]; +# networking.firewall.allowedUDPPorts = [ ... ]; +# Or disable the firewall altogether. +networking.firewall.enable = false; - systemd.services = { - "docker-compose" = { - enable = true; - restartIfChanged = true; - description = "Start docker-compose servers"; - after = [ "docker.service" "docker.socket" ]; - requires = [ "docker.service" "docker.socket" ]; - wantedBy = [ "multi-user.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}docker-compose -f \${FILE} down"; - }; - }; - }; +system.copySystemConfiguration = true; - # networking.firewall.allowedTCPPorts = [ ... ]; - # networking.firewall.allowedUDPPorts = [ ... ]; - # Or disable the firewall altogether. - networking.firewall.enable = false; - - system.copySystemConfiguration = true; - - system.stateVersion = VERSION; +system.stateVersion = VERSION; } diff --git a/configuration.org b/configuration.org index f12db42..bcc4d92 100755 --- a/configuration.org +++ b/configuration.org @@ -36,8 +36,8 @@ - [ ] appimages - [-] Compile missing apps [1/8] - [X] furtherance upgrade - - [ ] zap init - - [ ] font-downloader + - [-] zap init + - [-] font-downloader - [ ] pokemon-colorscripts - [ ] SaveDesktop (flathub) - [ ] gelata @@ -70,7 +70,7 @@ in { # Remember to close this bracket at the end of the document #+end_src -** IMPORTS +* IMPORTS These are files and modules which get loaded onto the configuration file, in the future I may segment this file into different modules, but for the time being, the two ones I need are hardware and home-manager. @@ -82,7 +82,6 @@ imports = [ ]; #+end_src - * SYSTEM CONFIGURATION ** NETWORKING At the moment, I don't have a wireless card on this computer, however as I build @@ -213,24 +212,11 @@ such as patches or symlinks. # }]; #+end_src -* USER +* USER PACKAGES Being part of the "wheel" group, means that the user has root privileges. -#+begin_src nix -users.users.jawz = { - isNormalUser = true; - extraGroups = [ "wheel" "networkmanager" "docker" ]; - initialPassword = "password"; - shell = pkgs.fish; - packages = with pkgs; [ - ]; -}; -#+end_src - -* MISC SETTINGS -** NIXPKGS settings -this allows to install unfree packages, and also a toggle for installing -packages from the unstable repository by preppending "unstable" to the package +This allows to install non-free packages, and also a toggle for installing +packages from the unstable repository by prepending "unstable" to the package name. #+begin_src nix @@ -239,47 +225,36 @@ nixpkgs.config = { }; #+end_src -** ENABLE FONTCONFIG -If enabled, a Fontconfig configuration file will point to a set of default -fonts. If you don't care about running X11 applications or any other program -that uses Fontconfig, you can turn this option off and prevent a dependency on -all those fonts. -=tip= once that Wayland is ready for deployment, I probably can remove this -setting. - -#+begin_src nix -fonts.fontconfig.enable = true; -#+end_src - -* HOME-MANAGER -** HOME-MANAGER SETTINGS -These make it so packages install to '/etc' rather than the user home directory, -also allow for upgrades when rebuilding the system. - -#+begin_src nix -home-manager.useUserPackages = true; -home-manager.useGlobalPkgs = true; -#+end_src - -** PACKAGES This section of the document categorizes and organizes all he packages that I want installed, attempting to group them as dependencies of others when necessary. +It has come to my attention, that using home-manager to manage packages, isn't a +recommended thing, while in theory there should be no errors with it, being a +downstream package there is no warranty that an upstream change will break +things with a new upgrade, breaking thus, the declarative nature of NixOs, for +that purpose, I have decided to keep home-manager as a module, with the +intention of reduce the number of dotfiles, however I will keep it exclusively +as a dotfile and service manager. + #+begin_src nix -home-manager.users.jawz = { config, pkgs, ... }:{ - # imports = [ ./dotfiles/dconf.nix ]; - home.stateVersion = VERSION; - home.packages = (with pkgs; [ +users.users.jawz = { + isNormalUser = true; + extraGroups = [ "wheel" "networkmanager" "docker" ]; + initialPassword = "password"; + shell = pkgs.fish; + packages = (with pkgs; [ #+end_src -*** GUI PACKAGES :ATTACH: -:PROPERTIES: -:ID: d5a59b97-4c99-4813-9583-4bdbc978dbad -:END: +** GUI PACKAGES +All of my GUI applications categorized to make it easier to identify what each +application does, and the justification for is existence on my system. + +*** ART AND DEVELOPMENT +Art and development applications are together, as a game-developer one of my +goals is to create a workflow between this ecosystem of applications. #+begin_src nix -# Art blender # cgi animation and sculpting godot # game development unstable.gdtoolkit # gdscript language server @@ -290,35 +265,55 @@ 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 +#+end_src -# Gaming +*** GAMING +So far gaming has been a lot less painful than I could have originally +anticipated, most everything seems to run seamlessly. +=note= Roblox uninstalled as there is ongoing drama regarding linux users. + +#+begin_src nix lutris # game/emulator manager -grapejuice # roblox manager +# grapejuice # roblox manager minecraft # minecraft official launcher parsec-bin # remote gaming with friends unstable.protonup-qt # update proton-ge +#+end_src -# Productivity +*** PRODUCTIVITY +This is the section where the apps that help me be productive come, a lot of +this are not used as often as I wish… +#+begin_src nix libreoffice-fresh # office, but based calibre # ugly af eBook library manager foliate # gtk eBook reader gnome.simple-scan # document scanner gnome-feeds # feed reader, maybe will replace with nextcloud -tagger # tag music files +#+end_src -# Misc -sequeler # friendly SQL client +*** MISC +Most of these apps, are part of the gnome circle, and I decide to install them +if just for a try and play a little. + +#+begin_src nix +# sequeler # friendly SQL client blanket # background noise unstable.czkawka # duplicate finder -# pika-backup # backups -tilix # terminal +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 +gnome-recipes # migrate these to mealie and delete unstable.denaro # manage your finances -unstable.celeste # sync tool for any cloud provider +# unstable.celeste # sync tool for any cloud provider +#+end_src -# Multimedia +*** MULTIMEDIA +Overwhelmingly player applications, used for videos and music, while most of my +consumption has moved towards Danilo-flix, it's still worth the install of most +of these, for now. + +#+begin_src nix celluloid # video player cozy # audiobooks player gnome-podcasts # podcast player @@ -327,11 +322,16 @@ 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 +#+end_src -# Web +*** Web +Stuff that I use to interact with the web, web browsers, chats, downloaders, +etc. +#+begin_src nix discord # chat google-chrome # web browser with spyware included firefox # web browser that allows to disable spyware @@ -342,16 +342,16 @@ nicotine-plus # remember Ares? warp # never used, but supposedly cool for sharing files #+end_src -*** COMMAND-LINE PACKAGES +** COMMAND-LINE PACKAGES #+begin_src nix +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! -yt-dlp # downloads videos from most video websites -unstable.gallery-dl # similar to yt-dlp but for most image gallery websites neofetch # use once for brag, never again rmlint # probably my favourite app, amazing dupe finder that integrates well with BTRFS tldr # man for retards @@ -363,7 +363,7 @@ xdg-ninja # help declutter $HOME torrenttools # create torrent files from the terminal! #+end_src -*** DEVELOPMENT PACKAGES +** DEVELOPMENT PACKAGES #+begin_src nix # required by doom emacs, but still are rather useful. @@ -372,14 +372,13 @@ fzf # fuzzy finder! super cool and useful ripgrep # modern grep languagetool # proofreader for English. check if works without the service graphviz # graphs -# doom everywhere +# these two are for doom everywhere xorg.xwininfo xdotool # development environment nix-direnv # creates ephimeral environments direnv # manages development environment -# editorconfig-checker # rules for contributing exercism # learn to code # SH @@ -410,7 +409,7 @@ omnisharp-roslyn # c# linter and code formatter nodejs # not as bad as I thought #+end_src -*** GNOME EXTENSIONS +** GNOME EXTENSIONS #+begin_src nix gnome.gnome-tweaks # tweaks for the gnome desktop environment @@ -419,7 +418,7 @@ gnomeExtensions.appindicator gnomeExtensions.gsconnect #+end_src -*** HUNSPELL +** HUNSPELL These dictionaries work with Firefox, Doom Emacs and LibreOffice. #+begin_src nix @@ -429,8 +428,9 @@ hunspellDicts.es_MX hunspellDicts.en_CA #+end_src -*** CUSTOMIZATION PACKAGES -Also, this finishes the packages array, put new modules above. +** CUSTOMIZATION PACKAGES +Themes and other customization, making my DE look the way I want is one of the +main draws of Linux for me. #+begin_src nix # Themes @@ -477,7 +477,7 @@ symbola bass # integrate bash utilities on fish #+end_src -** NPM +** NODE JS PACKAGES #+begin_src nix ]) ++ (with pkgs.nodePackages; [ @@ -485,7 +485,39 @@ symbola markdownlint-cli prettier pnpm -]); +]); }; # <--- end of package list +#+end_src + +* MISC SETTINGS +** ENABLE FONTCONFIG +If enabled, a Fontconfig configuration file will point to a set of default +fonts. If you don't care about running X11 applications or any other program +that uses Fontconfig, you can turn this option off and prevent a dependency on +all those fonts. +=tip= once that Wayland is ready for deployment, I probably can remove this +setting. + +#+begin_src nix +fonts.fontconfig.enable = true; +#+end_src + +* HOME-MANAGER +** HOME-MANAGER SETTINGS +These make it so packages install to '/etc' rather than the user home directory, +also allow for upgrades when rebuilding the system. + +#+begin_src nix +home-manager.useUserPackages = true; +home-manager.useGlobalPkgs = true; +#+end_src + +** PACKAGES + +#+begin_src nix +home-manager.users.jawz = { config, pkgs, ... }:{ + # imports = [ ./dotfiles/dconf.nix ]; + home.stateVersion = VERSION; + home.packages = with pkgs; [ ]; #+end_src ** DOTFILES @@ -633,13 +665,13 @@ xdg = { ** USER-SERVICES #+begin_src nix -services = { - emacs = { - enable = true; - defaultEditor = true; - package = pkgs.emacs; - }; -}; +# services = { +# emacs = { +# enable = true; +# defaultEditor = true; +# package = pkgs.emacs; +# }; +# }; #+end_src ** CLOSING HOME-MANAGER @@ -724,8 +756,12 @@ virtualisation.docker = { }; #+end_src -* PROGRAMS & SERVICES -Some programs need SUID wrappers. +* SNAPRAID +It's a parity raid utility which creates a scheme similar to what UNRAID +offered, except not in real time, I schedule it to run every night, so it keeps +my files sync, while it is possible to use snapraid as a solution to keep a +historic backup of your files, I am more concerned with the whole disk recovery +in case of failure, as such a frequent sync fits my preferences. #+begin_src nix snapraid = { @@ -759,6 +795,13 @@ snapraid = { "/mnt/disk2/snapraid.content" ]; }; +#+end_src + +* PROGRAMS & SERVICES +Some programs get enabled and installed through here, as well as the activation +of some services. + +#+begin_src nix programs = { mtr.enable = true; gnupg.agent = { @@ -791,6 +834,11 @@ services = { ports = [ 25152 ]; }; udev.packages = with pkgs; [ gnome.gnome-settings-daemon ]; + emacs = { + enable = true; + defaultEditor = true; + package = pkgs.emacs; + }; }; #+end_src