From 8852818d8b222494e5f13277984a2a6df977d5f2 Mon Sep 17 00:00:00 2001 From: Danilo Reyes Date: Mon, 10 Apr 2023 13:05:53 -0600 Subject: [PATCH] initial commit --- configuration.nix | 521 ++++++++++++ configuration.org | 891 ++++++++++++++++++++ dotfiles/Caddyfile | 147 ++++ dotfiles/dconf.nix | 128 +++ dotfiles/gallery-dl/config.json | 200 +++++ dotfiles/gopass/config.yml | 10 + dotfiles/htop/htoprc | 61 ++ dotfiles/mpdas/mpdasrc | 4 + dotfiles/npm/npmrc | 7 + dotfiles/npm/update-notifier-npm-check.json | 4 + dotfiles/wget/wgetrc | 1 + hardware-configuration.nix | 55 ++ pacman list | 90 ++ pacman list new | 162 ++++ 14 files changed, 2281 insertions(+) create mode 100755 configuration.nix create mode 100755 configuration.org create mode 100755 dotfiles/Caddyfile create mode 100755 dotfiles/dconf.nix create mode 100755 dotfiles/gallery-dl/config.json create mode 100755 dotfiles/gopass/config.yml create mode 100755 dotfiles/htop/htoprc create mode 100755 dotfiles/mpdas/mpdasrc create mode 100755 dotfiles/npm/npmrc create mode 100755 dotfiles/npm/update-notifier-npm-check.json create mode 100755 dotfiles/wget/wgetrc create mode 100755 hardware-configuration.nix create mode 100755 pacman list create mode 100755 pacman list new diff --git a/configuration.nix b/configuration.nix new file mode 100755 index 0000000..11a6197 --- /dev/null +++ b/configuration.nix @@ -0,0 +1,521 @@ +{ config, pkgs, ... }: +{ # Remember to close this bracket at the end of the document + +imports = [ + ./hardware-configuration.nix + +]; + +boot.loader.systemd-boot.enable = true; +boot.loader.efi.canTouchEfiVariables = true; + +networking.hostName = "workstation"; + +# networking.wireless.enable = true; +networking.networkmanager.enable = true; + +time.timeZone = "America/Mexico_City"; + +i18n.defaultLocale = "en_CA.UTF-8"; +console = { + font = "Lat2-Terminus16"; + keyMap = "us"; + # useXkbConfig = true; # use xkbOptions in tty. +}; + +services.xserver.enable = true; + +services.xserver.layout = "us"; +# services.xserver.xkbOptions = { +# "eurosign:e"; +# "caps:escape" # map caps to escape. +# }; + +services.xserver.displayManager.gdm.enable = true; +services.xserver.desktopManager.gnome.enable = true; +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.bluetooth.enable = 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; +}; + +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; +# }]; + +users.users.jawz = { + isNormalUser = true; + extraGroups = [ "wheel" "networkmanager" ]; + initialPassword = "password"; + shell = pkgs.fish; + packages = with pkgs; [ ]; +}; + +nixpkgs.config = { allowUnfree = true; }; + +fonts.fontconfig.enable = true; + +# services.xserver.libinput.enable = true; + +home-manager.useUserPackages = true; +home-manager.useGlobalPkgs = true; + +home-manager.users.jawz = { config, pkgs, ... }:{ + imports = [ ./dotfiles/dconf.nix ]; + home.packages = with pkgs; [ + +blanket # background noise +blender # cgi animation and sculpting +celluloid # video player +cozy # audiobooks player +czkawka # duplicate finder +discord # chat +dropbox # cloud sync +# foliate # ebook reader +# gnome-podcasts # podcast player +# gnome-recipes # migrate these to mealie and delete +godot # game development +google-chrome # web browser +handbrake # video converter, may be unnecessary +# krita # art to your heart desire! +# libreoffice-fresh # office, but based +# lutris # game/emulator manager +megasync # cloud sync +mpdevil # ugly icon, but pretty mpd client nwn +# pika-backup # backups +pitivi # video editor +tilix # terminal + +ffmpegthumbnailer # create video thumbnails for nautilus, in absence of totem +mpdas # scrobble mpd songs to last.fm + +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! + +fd # modern find, faster searches +fzf # fuzzy finder! super cool and useful +ripgrep # modern grep + +# SH +bashdb # autocomplete +shellcheck # linting +nodePackages.bash-language-server # LSP support + +# NIX +nixfmt # linting + +# PYTHON. +python # base language + +# HASKELL +# cabal-install # haskell interface + +# JS +# jq # linting +# Node-js +# nodePackages.pnpm + + + +gnomeExtensions.appindicator +gnomeExtensions.gsconnect +gnome.gnome-tweaks + +hunspell +hunspellDicts.it_IT +hunspellDicts.es_MX +hunspellDicts.en_CA + +# Fonts +(nerdfonts.override { + fonts = [ "Agave" "CascadiaCode" "SourceCodePro" "Ubuntu" ]; +}) +# (papirus-icon-theme.override { +# color = "grey"; +# }) +]; + +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 ${config.xdg.userDirs.download}/To\ Organize/gdl-organizing/ -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"; + 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}/Dropboxxx/jawz +set lw $list_root/watch.txt +set li $list_root/instant.txt +set lc $list_root/comic.txt + +set GPG_TTY (tty) + +# Set EMACS/VI mode +function fish_user_key_bindings + # fish_default_key_bindings + fish_vi_key_bindings +end + +''; + +functions = { + nix_magic = '' + +nixfmt ~/MEGAsync/nixos/configuration.nix +sudo rsync -r ~/MEGAsync/nixos/ /etc/nixos/ +sudo nixos-rebuild switch + + ''; + }; +}; + +programs.bat = { + enable = true; + config = { + # map-syntax = [ "*.jenkinsfile:Groovy" "*.props:Java Properties" ]; + pager = "less -FR"; + theme = "base16"; }; +}; + +programs.beets = { + enable = true; + settings = { + directory = "${config.xdg.userDirs.music}"; + library = "${config.xdg.dataHome}/beets/musiclibrary.db"; + plugins = "embedart fetchart lyrics discogs spotify deezer edit lastgenre mbsync replaygain scrub mpdupdate duplicates info fish ftintitle fuzzy"; + ignore_hidden = true; + threaded = true; + duplicate = { + album = false; + delete = false; + }; + ftintitle = { + auto = true; + drop = true; + format = "feat. {0}"; + }; + fetchart = { + maxwidth = 1000; + quality = 70; + enforce_ratio = true; + lastfm_key = "aeae592346534482202bd94bc14a80c4"; + fanarttv_key = "f12b0931d2f971a5b5215c3f451bafb7"; + sources = "*"; + cover_format = "JPEG"; + }; + embedart = { + auto = true; + maxwidth = 1000; + quality = 70; + remove_art_file = false; + ifempty = true; + }; + lyrics = { + auto = true; + sources = "*"; + }; + replaygain = { + auto = true; + overwrite = true; + peak = "true"; + backend = "ffmpeg"; + }; + lastgenre = { + auto = true; + canonical = true; + force = true; + source = "album"; + count = 1; + title_case = true; + }; + mpd = { + host = "localhost"; + port = 6600; + }; + ui = { + color = true; + }; + "import" = { + move = true; + write = true; + genres = true; + log = "${config.xdg.dataHome}/beets/beetslog.txt"; + }; + replace = { + "[\\\\/]" = ""; # \ / + "^\\." = ""; # dotfiles + "[\\x00-\\x1f]" = ""; # NULL to US + "\\x00" = ""; # NULL + "[<>:\"\\?\\*\\|]" = ""; # <>:"?*| + "\\.$" = ""; # dot at the end + "\\s+$" = ""; # ends with whitespace + "^\\s+" = ""; # starts with whitespace + "^-" = ""; # starts with - + }; + paths = { + default = "$albumartist/$album/$track $title"; + singleton = "Singletons/$artist - $title"; + comp = "$album/$track $title"; + "albumtype:soundtrack" = "Soundtracks/$album/$track $title"; + }; + convert = { + auto = true; + embed = true; + delete_originals = true; + extension = "opus"; + # command = "ffmpeg -i $source -y -vn -acodec libopus -ab 256k $dest"; + }; + }; +}; + +programs.git = { + enable = true; + userName = "Danilo Reyes"; + userEmail = "CaptainJawZ@outlook.com"; +}; + +programs.gpg = { + enable = true; + homedir = "${config.xdg.dataHome}/gnupg"; +}; + +programs.htop = { + enable = true; + package = pkgs.htop-vim; +}; +xdg.configFile."htop/htoprc".source = ./dotfiles/htop/htoprc; + +xdg = { + enable = true; +}; +xdg.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"; +}; + +xdg.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; + # "gopass/config.yml".source = ./dotfiles/gopass/config.yml; + "mpdasrc".source = ./dotfiles/mpdas/mpdasrc; +}; + +services.mpd = { + enable = true; + musicDirectory = "${config.xdg.userDirs.music}"; + network.listenAddress = "any"; + # network.startWhenNeeded = true; + extraConfig = '' + + restore_paused "yes" + auto_update "yes" + follow_outside_symlinks "yes" + follow_inside_symlinks "yes" + # zeroconf_enabled "yes" + # zeroconf_name "Music Player @ %h" + input { + plugin "curl" + # proxy "proxy.isp.com:8080" + # proxy_user "user" + # proxy_password "password" + } + + audio_output { + type "pipewire" + name "PipeWire Sound Server" + } + audio_output { + type "fifo" + name "my_fifo" + path "/tmp/mpd.fifo" + format "44100:16:2" + } + replaygain "auto" + replaygain_limit "yes" + volume_normalization "yes" + + ''; +}; + +services.mpd-discord-rpc.enable = true; +services.mpdris2 = { + enable = true; + multimediaKeys = true; + mpd.host = "localhost"; +}; + +}; + +environment.systemPackages = with pkgs; [ + wget + git +]; + +environment.sessionVariables = rec { + # PATH + XDG_CACHE_HOME = "\${HOME}/.cache"; + XDG_CONFIG_HOME = "\${HOME}/.config"; + XDG_BIN_HOME = "\${HOME}/.local/bin"; + XDG_DATA_HOME = "\${HOME}/.local/share"; + SCRIPTS = "/home/jawz/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=/home/jawz/.config/java"; + # NVIDIA + CUDA_CACHE_PATH = "\${XDG_CACHE_HOME}/nv"; + # GBM_BACKEND = "nvidia-drm"; + # "__GLX_VENDOR_LIBRARY_NAME" = "nvidia"; + # FISH + fisher_path = "\${XDG_CONFIG_HOME}/fish/fisher"; + # 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" + # "\${XDG_DATA_HOME}/pnpm" + "\${SCRIPTS}" + ]; +}; + +programs.mtr.enable = true; + +programs.gnupg.agent = { + enable = true; + enableSSHSupport = true; +}; + +# services.caddy = { +# enable = true; +# email = "CaptainJawZ@outlook.com"; +# configFile = ./dotfiles/Caddyfile; +# # config = '' +# # torrent.danilo-reyes.com { +# # reverse_proxy localhost:9091 +# # } +# # ''; +# }; + +services.emacs = { + enable = true; + defaultEditor = true; + package = pkgs.emacs28NativeComp; +}; + +services.fstrim.enable = true; +services.btrfs.autoScrub = { + enable = true; + fileSystems = [ + "/" + # "/torrents" + # "/home/jawz/.local/hd" # Maybe change mount point? + ]; +}; + +services.openssh = { + enable = true; + ports = [ 25152 ]; +}; + +services.udev.packages = with pkgs; [ gnome.gnome-settings-daemon ]; + +# networking.firewall.allowedTCPPorts = [ ... ]; +# networking.firewall.allowedUDPPorts = [ ... ]; +# Or disable the firewall altogether. +networking.firewall.enable = false; + +system.copySystemConfiguration = true; + +system.stateVersion = "22.05"; + +} diff --git a/configuration.org b/configuration.org new file mode 100755 index 0000000..04253bd --- /dev/null +++ b/configuration.org @@ -0,0 +1,891 @@ +#+TITLE: JawZ NixOS main Configuration +#+AUTHOR: Danilo Reyes +#+PROPERTY: header-args :tangle configuration.nix +#+auto_tangle: t + +* TODO +- [ ] Check music [0/5] + - [ ] Last.fm + - [ ] Libre.fm (optional) + - [ ] Beet plugins work + - [ ] Beet web server works + - [ ] Move music around +- [ ] System configurations [0/6] + - [ ] Bluetooth multiple devices + pass-through + - [ ] Automatic updates + - [ ] SSH settings + - [ ] Automatic garbage collection + - [ ] Firewall ports + - [ ] Topgrade (perhaps unnecessary) +- [ ] SystemD services [0/3] + - [ ] FStrim + - [ ] BTRFS scrub + - [ ] Personal scripts [0/3] + - [ ] download + - [ ] Instagram + - [ ] startup tasks +- [ ] Migrate dotfiles [0/3] + - [ ] .config [0/3] + - [ ] celluloid [0/2] + - [ ] Make sure plugins work + - [ ] Declare plugins? + - [ ] Firefox [0/7] + https://ffprofile.com/#finish + - [ ] Extensions + - [ ] Settings + - [ ] Gnome integration + - [ ] Profile + - [ ] Bookmarks + - [ ] Extra security/privacy config + - [ ] gallery-dl integration + - [ ] + - [ ] .var + - [ ] .local/share [0/2] + - [ ] beets + - [ ] mpd +- [ ] Migrate apps [0/4] + - [ ] paru + - [ ] pipx + - [ ] pip IMPORTANT for beet + - [ ] appimages +- [ ] Figure out how to get rid of xterm +- [ ] Compile missing apps [0/4] + - [ ] Identity + https://gitlab.gnome.org/YaLTeR/identity + Only challenge may be gstreamer, but probably not an issue. May be the easier one to package. + - [ ] Bats + https://github.com/bats-core/bats-core + - [ ] wine-discord-ipc-bridge + https://github.com/fufexan/nix-gaming + - [ ] make binaries of my own scripts + https://github.com/asimpson/dotfiles/blob/899b45e1586aac04d4e5541d638bbbffc66b4bba/nixos/scripts.nix +- [ ] AdwCustomizer [0/1] + https://github.com/AdwCustomizerTeam/AdwCustomizer + - [ ] Figure out pip +- [ ] (optional) adw-gtk3 theme + https://github.com/lassekongo83/adw-gtk3#readme + I think it can be locally installed, no need for theme, but in case + https://github.com/NixOS/nixpkgs/blob/nixos-22.05/pkgs/data/themes/vertex/default.nix#L32 + + +* ABOUT +Setting up the document. + +#+begin_src nix +{ config, pkgs, ... }: +{ # Remember to close this bracket at the end of the document +#+end_src + +** 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. + +#+begin_src nix +imports = [ + ./hardware-configuration.nix + +]; +#+end_src + +* BOOT +I am comfortable with the defaults which NixOS recommends for UEFI systems. + +#+begin_src nix +boot.loader.systemd-boot.enable = true; +boot.loader.efi.canTouchEfiVariables = true; +#+end_src + +* SYSTEM CONFIGURATION +** NETWORKING +At the moment, I don't have a wireless card on this computer, however as I build +a new system, such setting may come in handy. + +#+begin_src nix +networking.hostName = "workstation"; +#+end_src + +Pick *ONLY ONE* of the below networking options. +- *wireless.enable* enables wireless support via wpa_supplicant. +- *NetworkManager* it's the default of GNOME, and easiest to use and integrate. + +#+begin_src nix +# networking.wireless.enable = true; +networking.networkmanager.enable = true; +#+end_src + +** TIMEZONE + +#+begin_src nix +time.timeZone = "America/Mexico_City"; +#+end_src + +** LOCALE +For some reason, useXkbConfig throws an error when building the system, either +way it is an unnecessary setting as my keyboards are the default en_US, only +locale set to Canadian out because I prefer how it displays the date. + +#+begin_src nix +i18n.defaultLocale = "en_CA.UTF-8"; +console = { + font = "Lat2-Terminus16"; + keyMap = "us"; + # useXkbConfig = true; # use xkbOptions in tty. +}; +#+end_src + +* DISPLAY MANAGER +At the time of writing this file, I require of X11, as the NVIDIA support for +Wayland isn't perfect yet. At the time being, the ability to switch through GDM +from Wayland to XORG, it's pretty handy, but in the future these settings will +require an update. + +#+begin_src nix +services.xserver.enable = true; +#+end_src + +As previously mentioned, the settings for useXkbConfig prompt issues. + +#+begin_src nix +services.xserver.layout = "us"; +# services.xserver.xkbOptions = { +# "eurosign:e"; +# "caps:escape" # map caps to escape. +# }; +#+end_src + +* GNOME +Sets up GNOME as the default desktop environment, while excluding some +undesirable packages from installing. + +#+begin_src nix +services.xserver.displayManager.gdm.enable = true; +services.xserver.desktopManager.gnome.enable = true; +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 +]); +#+end_src + +* HARDWARE +** BLUETOOTH + +#+begin_src nix +hardware.bluetooth.enable = true; +#+end_src + +** SOUND +In order to avoid issues with PipeWire, the wiki recommends to disable /sound.enable/ +This is a basic PipeWire configuration, in the future stuff like Bluetooth or +latency will require expanding these settings. + +#+begin_src nix +hardware.pulseaudio.enable = false; +sound.enable = false; +security.rtkit.enable = true; +services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; +}; +#+end_src + +* SECURITY +Recently, I've gotten frustrated with OpenDoas, as such I've decided to +temporarily enable Sudo, but in the future, I plan to revert that decision. +** SUDO + +#+begin_src nix +security.sudo = { + enable = true; + wheelNeedsPassword = false; +}; +#+end_src + +** OPENDOAS +It's mayor advantage over Sudo, is that is being a smaller package, being lessen known +means that there is less security risks associated with it, overall a less +bloated more secure package. Which comes with the caveat that due to it's age, +there is little support for it. Constantly having to resort to hack solutions +such as patches or symlinks. + +#+begin_src nix +# security.sudo.enable = false; +# security.doas.enable = true; +# security.doas.extraRules = [{ +# users = [ "jawz" ]; +# keepEnv = true; +# #persist = true; +# noPass = true; +# }]; +#+end_src + +* USER +Being part of the "wheel" group, means that the user has root privileges. + +#+begin_src nix +users.users.jawz = { + isNormalUser = true; + extraGroups = [ "wheel" "networkmanager" ]; + initialPassword = "password"; + shell = pkgs.fish; + packages = with pkgs; [ ]; +}; +#+end_src + +* MISC SETTINGS +** ALLOW NON FREE packages + +#+begin_src nix +nixpkgs.config = { allowUnfree = true; }; +#+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 + +** WACOM +This setting could be a requirement for my tablet to properly work. Even +though, my tablet is Huion, the Linux Wacom drivers cover most of the settings. + +#+begin_src nix +# services.xserver.libinput.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. + +#+begin_src nix +home-manager.users.jawz = { config, pkgs, ... }:{ + imports = [ ./dotfiles/dconf.nix ]; + home.packages = with pkgs; [ +#+end_src + +*** GUI PACKAGES + +#+begin_src nix +blanket # background noise +blender # cgi animation and sculpting +celluloid # video player +cozy # audiobooks player +czkawka # duplicate finder +discord # chat +dropbox # cloud sync +# foliate # ebook reader +# gnome-podcasts # podcast player +# gnome-recipes # migrate these to mealie and delete +godot # game development +google-chrome # web browser +handbrake # video converter, may be unnecessary +# krita # art to your heart desire! +# libreoffice-fresh # office, but based +# lutris # game/emulator manager +megasync # cloud sync +mpdevil # ugly icon, but pretty mpd client nwn +# pika-backup # backups +pitivi # video editor +tilix # terminal +#+end_src + +*** MISC PACKAGES + +#+begin_src nix +ffmpegthumbnailer # create video thumbnails for nautilus, in absence of totem +mpdas # scrobble mpd songs to last.fm +#+end_src + +*** COMMAND-LINE PACKAGES + +#+begin_src nix +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! +#+end_src + +*** DEVELOPMENT PACKAGES +**** DOOM EMACS + +#+begin_src nix +fd # modern find, faster searches +fzf # fuzzy finder! super cool and useful +ripgrep # modern grep + +# SH +bashdb # autocomplete +shellcheck # linting +nodePackages.bash-language-server # LSP support + +# NIX +nixfmt # linting + +# PYTHON. +python # base language + +# HASKELL +# cabal-install # haskell interface + +# JS +# jq # linting +# Node-js +# nodePackages.pnpm +#+end_src + +**** EXERCISM + +#+begin_src nix +#+end_src + +*** GNOME EXTENSIONS + +#+begin_src nix +gnomeExtensions.appindicator +gnomeExtensions.gsconnect +gnome.gnome-tweaks +#+end_src + +*** HUNSPELL +These dictionaries work with Firefox, Doom Emacs and LibreOffice. + +#+begin_src nix +hunspell +hunspellDicts.it_IT +hunspellDicts.es_MX +hunspellDicts.en_CA +#+end_src + +*** CUSTOMIZATION PACKAGES +Also, this finishes the packages array, put new modules above. + +#+begin_src nix +# Fonts +(nerdfonts.override { + fonts = [ "Agave" "CascadiaCode" "SourceCodePro" "Ubuntu" ]; +}) +# (papirus-icon-theme.override { +# color = "grey"; +# }) +]; +#+end_src + +** DOTFILES +*** FISH + +#+begin_src nix +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 ${config.xdg.userDirs.download}/To\ Organize/gdl-organizing/ -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"; + e = "edit"; + c = "cat"; + f = "fzf --multi --exact -i"; + sc = "systemctl --user"; + jc = "journalctl --user -xeu"; + }; + interactiveShellInit = '' +#+end_src + + +#+begin_src fish + +set fish_greeting "pika pika chu!!!! also remember fisher!" +# Lists +set -l list_root ${config.home.homeDirectory}/Dropboxxx/jawz +set lw $list_root/watch.txt +set li $list_root/instant.txt +set lc $list_root/comic.txt + +set GPG_TTY (tty) + +# Set EMACS/VI mode +function fish_user_key_bindings + # fish_default_key_bindings + fish_vi_key_bindings +end + +#+end_src + + +#+begin_src nix +''; +#+end_src + + +#+begin_src nix +functions = { + nix_magic = '' +#+end_src + + +#+begin_src fish +nixfmt ~/MEGAsync/nixos/configuration.nix +sudo rsync -r ~/MEGAsync/nixos/ /etc/nixos/ +sudo nixos-rebuild switch +#+end_src + + +#+begin_src nix + ''; + }; +}; +#+end_src + +*** BAT + +#+begin_src nix +programs.bat = { + enable = true; + config = { + # map-syntax = [ "*.jenkinsfile:Groovy" "*.props:Java Properties" ]; + pager = "less -FR"; + theme = "base16"; }; +}; +#+end_src + +*** BEETS + +#+begin_src nix +programs.beets = { + enable = true; + settings = { + directory = "${config.xdg.userDirs.music}"; + library = "${config.xdg.dataHome}/beets/musiclibrary.db"; + plugins = "embedart fetchart lyrics discogs spotify deezer edit lastgenre mbsync replaygain scrub mpdupdate duplicates info fish ftintitle fuzzy"; + ignore_hidden = true; + threaded = true; + duplicate = { + album = false; + delete = false; + }; + ftintitle = { + auto = true; + drop = true; + format = "feat. {0}"; + }; + fetchart = { + maxwidth = 1000; + quality = 70; + enforce_ratio = true; + lastfm_key = "aeae592346534482202bd94bc14a80c4"; + fanarttv_key = "f12b0931d2f971a5b5215c3f451bafb7"; + sources = "*"; + cover_format = "JPEG"; + }; + embedart = { + auto = true; + maxwidth = 1000; + quality = 70; + remove_art_file = false; + ifempty = true; + }; + lyrics = { + auto = true; + sources = "*"; + }; + replaygain = { + auto = true; + overwrite = true; + peak = "true"; + backend = "ffmpeg"; + }; + lastgenre = { + auto = true; + canonical = true; + force = true; + source = "album"; + count = 1; + title_case = true; + }; + mpd = { + host = "localhost"; + port = 6600; + }; + ui = { + color = true; + }; + "import" = { + move = true; + write = true; + genres = true; + log = "${config.xdg.dataHome}/beets/beetslog.txt"; + }; + replace = { + "[\\\\/]" = ""; # \ / + "^\\." = ""; # dotfiles + "[\\x00-\\x1f]" = ""; # NULL to US + "\\x00" = ""; # NULL + "[<>:\"\\?\\*\\|]" = ""; # <>:"?*| + "\\.$" = ""; # dot at the end + "\\s+$" = ""; # ends with whitespace + "^\\s+" = ""; # starts with whitespace + "^-" = ""; # starts with - + }; + paths = { + default = "$albumartist/$album/$track $title"; + singleton = "Singletons/$artist - $title"; + comp = "$album/$track $title"; + "albumtype:soundtrack" = "Soundtracks/$album/$track $title"; + }; + convert = { + auto = true; + embed = true; + delete_originals = true; + extension = "opus"; + # command = "ffmpeg -i $source -y -vn -acodec libopus -ab 256k $dest"; + }; + }; +}; +#+end_src + +*** GIT + +#+begin_src nix +programs.git = { + enable = true; + userName = "Danilo Reyes"; + userEmail = "CaptainJawZ@outlook.com"; +}; +#+end_src + +*** GNUPG + +#+begin_src nix +programs.gpg = { + enable = true; + homedir = "${config.xdg.dataHome}/gnupg"; +}; +#+end_src + +*** HTOP + +#+begin_src nix +programs.htop = { + enable = true; + package = pkgs.htop-vim; +}; +xdg.configFile."htop/htoprc".source = ./dotfiles/htop/htoprc; +#+end_src + +*** XDG + +#+begin_src nix +xdg = { + enable = true; +}; +xdg.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"; +}; +#+end_src + +*** OTHER + +#+begin_src nix +xdg.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; + # "gopass/config.yml".source = ./dotfiles/gopass/config.yml; + "mpdasrc".source = ./dotfiles/mpdas/mpdasrc; +}; +#+end_src + +** USER-SERVICES +*** MPD + +#+begin_src nix +services.mpd = { + enable = true; + musicDirectory = "${config.xdg.userDirs.music}"; + network.listenAddress = "any"; + # network.startWhenNeeded = true; + extraConfig = '' +#+end_src + + +#+begin_src conf + restore_paused "yes" + auto_update "yes" + follow_outside_symlinks "yes" + follow_inside_symlinks "yes" + # zeroconf_enabled "yes" + # zeroconf_name "Music Player @ %h" + input { + plugin "curl" + # proxy "proxy.isp.com:8080" + # proxy_user "user" + # proxy_password "password" + } + + audio_output { + type "pipewire" + name "PipeWire Sound Server" + } + audio_output { + type "fifo" + name "my_fifo" + path "/tmp/mpd.fifo" + format "44100:16:2" + } + replaygain "auto" + replaygain_limit "yes" + volume_normalization "yes" +#+end_src + + +#+begin_src nix + ''; +}; +#+end_src + +*** MPD EXTENSIONS + +#+begin_src nix +services.mpd-discord-rpc.enable = true; +services.mpdris2 = { + enable = true; + multimediaKeys = true; + mpd.host = "localhost"; +}; +#+end_src + +** CLOSING HOME-MANAGER + +#+begin_src nix +}; +#+end_src + +* ENVIRONMENT PACKAGES +These are a MUST to ensure the optimal function of nix, without these, recovery +may be challenging. + +#+begin_src nix +environment.systemPackages = with pkgs; [ + wget + git +]; +#+end_src + +* ENVIRONMENT VARIABLES + +#+begin_src nix +environment.sessionVariables = rec { + # PATH + XDG_CACHE_HOME = "\${HOME}/.cache"; + XDG_CONFIG_HOME = "\${HOME}/.config"; + XDG_BIN_HOME = "\${HOME}/.local/bin"; + XDG_DATA_HOME = "\${HOME}/.local/share"; + SCRIPTS = "/home/jawz/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=/home/jawz/.config/java"; + # NVIDIA + CUDA_CACHE_PATH = "\${XDG_CACHE_HOME}/nv"; + # GBM_BACKEND = "nvidia-drm"; + # "__GLX_VENDOR_LIBRARY_NAME" = "nvidia"; + # FISH + fisher_path = "\${XDG_CONFIG_HOME}/fish/fisher"; + # 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" + # "\${XDG_DATA_HOME}/pnpm" + "\${SCRIPTS}" + ]; +}; +#+end_src + +* WRAPPERS +Some programs need SUID wrappers. +** NETWORK DIAGNOSTICS TOOL +I don't know what it does, but it's recommended. + +#+begin_src nix +programs.mtr.enable = true; +#+end_src + +** GNUPG + +#+begin_src nix +programs.gnupg.agent = { + enable = true; + enableSSHSupport = true; +}; +#+end_src + +* SYSTEM-SERVICES +** CADDY + +#+begin_src nix +# services.caddy = { +# enable = true; +# email = "CaptainJawZ@outlook.com"; +# configFile = ./dotfiles/Caddyfile; +# # config = '' +# # torrent.danilo-reyes.com { +# # reverse_proxy localhost:9091 +# # } +# # ''; +# }; +#+end_src + +** EMACS + +#+begin_src nix +services.emacs = { + enable = true; + defaultEditor = true; + package = pkgs.emacs28NativeComp; +}; +#+end_src + +** HARD-DRIVE MAINTENANCE + +#+begin_src nix +services.fstrim.enable = true; +services.btrfs.autoScrub = { + enable = true; + fileSystems = [ + "/" + # "/torrents" + # "/home/jawz/.local/hd" # Maybe change mount point? + ]; +}; +#+end_src + +** OPENSSH + +#+begin_src nix +services.openssh = { + enable = true; + ports = [ 25152 ]; +}; +#+end_src + +** UDEV + +#+begin_src nix +services.udev.packages = with pkgs; [ gnome.gnome-settings-daemon ]; +#+end_src + +* FIREWALL +Open ports in the firewall. +=TIP= list what app a port belongs to in a table. + +#+begin_src nix +# networking.firewall.allowedTCPPorts = [ ... ]; +# networking.firewall.allowedUDPPorts = [ ... ]; +# Or disable the firewall altogether. +networking.firewall.enable = false; +#+end_src + +* FINAL SYSTEM CONFIGURATIONS +** CREATE COPY OF NIXOS CONFIGURATION +Copy the NixOS configuration file and link it from the resulting system +(/run/current-system/configuration.nix). This is useful in case you +accidentally delete configuration.nix. + +#+begin_src nix +system.copySystemConfiguration = true; +#+end_src + +** NIX VERSION +This value determines the NixOS release from which the default settings for +stateful data, like file locations and database versions on your system. +It‘s perfectly fine and recommended to leave this value at the release version +of the first install of this system. +Before changing this value read the documentation for this option. + +#+begin_src nix +system.stateVersion = "22.05"; +#+end_src + +** CLOSING :D +That super pesky closing bracket. + +#+begin_src nix +} +#+end_src diff --git a/dotfiles/Caddyfile b/dotfiles/Caddyfile new file mode 100755 index 0000000..3c9b043 --- /dev/null +++ b/dotfiles/Caddyfile @@ -0,0 +1,147 @@ +sonarr.danilo-reyes.com { + reverse_proxy localhost:8989 +} +code.danilo-reyes.com { + reverse_proxy localhost:5538 +} +radarr.danilo-reyes.com { + reverse_proxy localhost:7878 +} +bazarr.danilo-reyes.com { + reverse_proxy localhost:6767 +} +prowlarr.danilo-reyes.com { + reverse_proxy localhost:9696 +} +flix.danilo-reyes.com { + reverse_proxy localhost:8096 +} +library.danilo-reyes.com { + reverse_proxy localhost:5000 +} +shiori.danilo-reyes.com { + reverse_proxy localhost:7680 +} +start.danilo-reyes.com { + reverse_proxy localhost:5005 +} +torrent.danilo-reyes.com { + reverse_proxy localhost:9091 +} +kitchen.danilo-reyes.com { + reverse_proxy localhost:9925 +} +vault.danilo-reyes.com { + log { + level INFO + output file /home/jawz/Development/Docker/vaultwarden/caddy.log { + roll_size 10MB + roll_keep 10 + } + } + tls captainjawz@outlook.com + # comment if giving issues with firefox + encode gzip + @insecureadmin { + not remote_ip 192.168.0.0/16 172.16.0.0/12 10.0.0.0/8 + path /admin* + } + redir @insecureadmin / + reverse_proxy /notifications/hub localhost:3012 + reverse_proxy localhost:7780 { + header_up X-Real-IP {remote_host} + } +} +searx.danilo-reyes.com { + log { + output discard + } + + tls captainjawz@outlook.com + + @api { + path /config + path /healthz + path /stats/errors + path /stats/checker + } + + @static { + path /static/* + } + + @notstatic { + not path /static/* + } + + @imageproxy { + path /image_proxy + } + + @notimageproxy { + not path /image_proxy + } + + header { + # Enable HTTP Strict Transport Security (HSTS) to force clients to always connect via HTTPS + Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" + + # Enable cross-site filter (XSS) and tell browser to block detected attacks + X-XSS-Protection "1; mode=block" + + # Prevent some browsers from MIME-sniffing a response away from the declared Content-Type + X-Content-Type-Options "nosniff" + + # Disable some features + Permissions-Policy "accelerometer=(),ambient-light-sensor=(),autoplay=(),camera=(),encrypted-media=(),focus-without-user-activation=(),geolocation=(),gyroscope=(),magnetometer=(),microphone=(),midi=(),payment=(),picture-in-picture=(),speaker=(),sync-xhr=(),usb=(),vr=()" + + # Disable some features (legacy) + Feature-Policy "accelerometer 'none';ambient-light-sensor 'none'; autoplay 'none';camera 'none';encrypted-media 'none';focus-without-user-activation 'none'; geolocation 'none';gyroscope 'none';magnetometer 'none';microphone 'none';midi 'none';payment 'none';picture-in-picture 'none'; speaker 'none';sync-xhr 'none';usb 'none';vr 'none'" + + # Referer + Referrer-Policy "no-referrer" + + # X-Robots-Tag + X-Robots-Tag "noindex, noarchive, nofollow" + + # Remove Server header + -Server + } + + header @api { + Access-Control-Allow-Methods "GET, OPTIONS" + Access-Control-Allow-Origin "*" + } + + # Cache + header @static { + # Cache + Cache-Control "public, max-age=31536000" + defer + } + + header @notstatic { + # No Cache + Cache-Control "no-cache, no-store" + Pragma "no-cache" + } + + # CSP (see http://content-security-policy.com/ ) + header @imageproxy { + Content-Security-Policy "default-src 'none'; img-src 'self' data:" + } + + header @notimageproxy { + Content-Security-Policy "upgrade-insecure-requests; default-src 'none'; script-src 'self'; style-src 'self' 'unsafe-inline'; form-action 'self'; font-src 'self'; frame-ancestors 'self'; base-uri 'self'; connect-src 'self' https://overpass-api.de; img-src 'self' data: https://*.tile.openstreetmap.org; frame-src https://www.youtube-nocookie.com https://player.vimeo.com https://www.dailymotion.com https://www.deezer.com https://www.mixcloud.com https://w.soundcloud.com https://embed.spotify.com" + } + + # SearXNG + handle { + encode zstd gzip + + reverse_proxy localhost:8080 { + header_up X-Forwarded-Port {http.request.port} + header_up X-Forwarded-Proto {http.request.scheme} + } + } +} diff --git a/dotfiles/dconf.nix b/dotfiles/dconf.nix new file mode 100755 index 0000000..f517357 --- /dev/null +++ b/dotfiles/dconf.nix @@ -0,0 +1,128 @@ +# Generated via dconf2nix: https://github.com/gvolpe/dconf2nix +{ lib, ... }: + +with lib.hm.gvariant; + +{ + dconf.settings = { + "com/gexperts/Tilix" = { + control-scroll-zoom = true; + copy-on-select = true; + new-instance-mode = "new-session"; + terminal-title-style = "none"; + theme-variant = "system"; + }; + + "com/gexperts/Tilix/profiles" = { + list = [ "2b7c4080-0ddd-46c5-8f23-563fd3ba789d" ]; + }; + + "com/gexperts/Tilix/profiles/2b7c4080-0ddd-46c5-8f23-563fd3ba789d" = { + background-color = "#FAFAFAFAFAFA"; + background-transparency-percent = 0; + badge-color = "#AC7EA8"; + badge-color-set = false; + badge-position = "northeast"; + badge-text = ""; + badge-use-system-font = true; + bold-color-set = false; + bold-is-bright = false; + cursor-colors-set = false; + custom-command = "fish"; + font = "SauceCodePro Nerd Font Mono 17"; + foreground-color = "#444444444444"; + highlight-colors-set = false; + login-shell = false; + notify-silence-enabled = false; + palette = [ "#777776767B7B" "#FFFF5F5F5F5F" "#8787AFAF5F5F" "#FFFFAFAF8787" "#5F5F9393FFFF" "#FFFF5F5FFFFF" "#5F5FE3E3FFFF" "#C0C0BFBFBCBC" "#5F5F5A5A6060" "#FFFF87878787" "#AFAFD7D78787" "#FFFFD7D7AFAF" "#8787AFAFFFFF" "#FFFF8787FFFF" "#8787EAEAFFFF" "#9A9A99999696" ]; + scrollback-lines = 2147483647; + use-custom-command = false; + use-system-font = false; + use-theme-colors = false; + visible-name = "Light Theme"; + }; + + "io/github/celluloid-player/celluloid" = { + dark-theme-enable = false; + mpv-config-enable = true; + mpv-config-file = "file:///home/jawz/.config/mpv/mpv.conf"; + mpv-input-config-enable = true; + mpv-input-config-file = "file:///home/jawz/.config/mpv/input.conf"; + settings-migrated = true; + }; + + "org/gnome/Weather" = { + locations = "[<(uint32 2, <('Querétaro', 'MMQT', true, [(0.35953782591083194, -1.752019674975877)], [(0.35953782591083194, -1.752019674975877)])>)>]"; + }; + + "org/gnome/clocks" = { + world-clocks = "[{'location': <(uint32 2, <('Seattle', 'KBFI', true, [(0.82983133145337307, -2.134775231953554)], [(0.83088509144255718, -2.135097419733472)])>)>}, {'location': <(uint32 2, <('Dallas', 'KDAL', true, [(0.57338429251143708, -1.690448351049749)], [(0.57217226606568217, -1.6895950770317414)])>)>}, {'location': <(uint32 2, <('Cleveland', 'KBKL', true, [(0.72475767592128648, -1.4253910094957791)], [(0.72430282566492421, -1.4258538708134081)])>)>}, {'location': <(uint32 2, <('London', 'EGWU', false, [(0.89971722940307675, -0.007272211034407213)], [(0.89971722940307675, -0.007272211034407213)])>)>}, {'location': <(uint32 2, <('Auckland', 'NZAA', true, [(-0.64606271726433173, 3.0508355324860883)], [(-0.64344472338634029, 3.0502537618865206)])>)>}]"; + }; + + "org/gnome/desktop/datetime" = { + automatic-timezone = true; + }; + + "org/gnome/desktop/input-sources" = { + sources = [ (mkTuple [ "xkb" "us" ]) ]; + xkb-options = [ "compose:menu" ]; + }; + + "org/gnome/desktop/interface" = { + icon-theme = "Papirus"; + }; + + "org/gnome/desktop/peripherals/keyboard" = { + numlock-state = true; + }; + + "org/gnome/desktop/peripherals/touchpad" = { + two-finger-scrolling-enabled = true; + }; + + "org/gnome/desktop/privacy" = { + disable-camera = true; + disable-microphone = true; + old-files-age = mkUint32 30; + recent-files-max-age = -1; + }; + + "org/gnome/desktop/search-providers" = { + sort-order = [ "org.gnome.Contacts.desktop" "org.gnome.Documents.desktop" "org.gnome.Nautilus.desktop" ]; + }; + + "org/gnome/desktop/session" = { + idle-delay = mkUint32 900; + }; + + "org/gnome/desktop/wm/preferences" = { + action-middle-click-titlebar = "minimize"; + }; + + "org/gnome/nautilus/preferences" = { + open-folder-on-dnd-hover = false; + }; + + "org/gnome/shell/weather" = { + automatic-location = true; + locations = "[<(uint32 2, <('Querétaro', 'MMQT', true, [(0.35953782591083194, -1.752019674975877)], [(0.35953782591083194, -1.752019674975877)])>)>]"; + }; + + "org/gnome/shell/world-clocks" = { + locations = "[<(uint32 2, <('Seattle', 'KBFI', true, [(0.82983133145337307, -2.134775231953554)], [(0.83088509144255718, -2.135097419733472)])>)>, <(uint32 2, <('Dallas', 'KDAL', true, [(0.57338429251143708, -1.690448351049749)], [(0.57217226606568217, -1.6895950770317414)])>)>, <(uint32 2, <('Cleveland', 'KBKL', true, [(0.72475767592128648, -1.4253910094957791)], [(0.72430282566492421, -1.4258538708134081)])>)>, <(uint32 2, <('London', 'EGWU', false, [(0.89971722940307675, -0.007272211034407213)], [(0.89971722940307675, -0.007272211034407213)])>)>, <(uint32 2, <('Auckland', 'NZAA', true, [(-0.64606271726433173, 3.0508355324860883)], [(-0.64344472338634029, 3.0502537618865206)])>)>]"; + }; + + "org/gnome/system/location" = { + enabled = true; + }; + + "org/gnome/tweaks" = { + show-extensions-notice = false; + }; + + "org/mpdevil/mpdevil" = { + mpris = false; + }; + + }; +} diff --git a/dotfiles/gallery-dl/config.json b/dotfiles/gallery-dl/config.json new file mode 100755 index 0000000..90d9363 --- /dev/null +++ b/dotfiles/gallery-dl/config.json @@ -0,0 +1,200 @@ +{ + "extractor": { + "cookies": ["chrome", "Default", "gnomekeyring"], + "user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36", + "retries": 10, + "sleep-request": 0, + "directlink": { + "directory": [], + "filename": "{filename}.{extension}" + }, + "twitter": { + "directory": ["{user[name]}"], + "retweets": false, + "videos": true, + "logout": true + }, + "flickr": { + "directory": ["{category}", "{owner[username]}"], + "size-max": "Original", + "access-token": "72157720849409732-e83af94a8ca145aa", + "access-token-secret": "0c7e86529694756a" + }, + "instagram": { + "sleep-request": 5, + "directory": ["{username}"], + "parent-directory": true, + "highlights": { + "reverse": "true", + "directory": ["{username}"] + }, + "stories": { + "reverse": "true", + "directory": ["{username}"] + }, + "tagged": { + "directory": ["{tagged_username}", "tagged"] + } + }, + "kemonoparty": { + "directory": ["{category}", "{user}"], + "retries": 10, + "timeout": 5, + "filename": "{id}_{filename}.{extension}" + }, + "exhentai": { + "directory": ["{category}", "{title}"] + }, + "tumblr": { + "directory": ["{blog_name}"], + "access-token": "NIbuc8UhR7ipT6Mqvy91TaFSnmDG0VnpElIyac8Lb36L7dAN3j", + "access-token-secret": "0YqHwyYFUH1JerYjS2N0snAA8xiB3OFSI6Z91skoBpuqs5SJAc", + "external": true, + "inline": true, + "posts": "all", + "reblogs": false, + "parent-directory": true, + "api-key": "uhBUtgPaX9gl7eaD8suGWW6ZInRedQoVT6xsZzopljy0jXHqm5", + "api-secret": "D3FDj1INyPzXikVpp4jmzSqjlC9czFUQ8oj2I883PSYJdqwURv" + }, + "deviantart": { + "client-id": "20016", + "client-secret": "52e1f9b0cb26e673da36f69e2ddd0e9a", + "refresh-token": "4f9817b7c42671003e10dd5a5a48473855779359", + "directory": ["{username}"], + "include": "gallery,scraps", + "flat": true, + "original": true, + "mature": true, + "auto-watch": true, + "auto-unwatch": true + }, + "furaffinity": { + "directory": ["{artist}"], + "include": ["scraps", "gallery"] + }, + "patreon": { + "directory": [ + "(Patreon) {creator[vanity]}", + "({date:%Y%m%d}) {title} ({id})" + ], + "filename": "{filename}.{extension}" + }, + "blogger": { + "directory": ["{blog[name]}", "{post[author]}"], + "filename": "{filename} - {num}.{extension}" + }, + "artstation": { + "directory": ["{userinfo[username]}"], + "external": true + }, + "gfycat": { + "format": "webm" + }, + "reddit": { + "user-agent": "Python:gallery-dl:v1.0 (by /u/captainjawz)", + "client-id": "T7nZ6WZ3_onJWBhLP8r08g", + "refresh-token": "184157546842-lQ_NOSVjzJ6udAsvple9mftkOcs0rg", + "directory": ["{author}"], + "parent-directory": true + }, + "redgifs": { + "directory": ["{userName}"] + }, + "imgur": { + "mp4": true + }, + "paheal": { + "directory": ["Husbands", "{search_tags}"] + }, + "e621": { + "directory": ["Husbands", "{search_tags}"] + }, + "pixiv": { + "refresh-token": "O4kc9tTzGItuuacDcfmevW6NELjm5CJdWiAbZdUv3Kk", + "directory": ["{user[account]} - {user[id]}"], + "ugoira": true, + "favorite": { + "directory": [ + "{user_bookmark[account]} - {user_bookmark[id]}", + "Bookmarks" + ] + }, + "postprocessors": [ + { + "name": "ugoira", + "extension": "webm", + "keep-files": false, + "whitelist": ["pixiv"], + "ffmpeg-twopass": true, + "ffmpeg-args": ["-c:v", "libvpx", "-crf", "4", "-b:v", "5000k", "-an"] + } + ] + }, + "readcomiconline": { + "chapter-reverse": true, + "directory": ["Comics", "{comic}", "{comic} #{issue}"], + "quality": "hq", + "captcha": "wait", + "postprocessors": ["cbz"] + }, + "kissmanga": { + "chapter-reverse": true, + "directory": ["Manga", "{manga}", "{manga} Ch.{chapter}{chapter_minor}"], + "captcha": "wait", + "postprocessors": ["cbz"] + }, + "mangahere": { + "chapter-reverse": true, + "directory": ["Manga", "{manga}", "{manga} Ch.{chapter}{chapter_minor}"], + "postprocessors": ["cbz"] + }, + "mangadex": { + "chapter-reverse": true, + "chapter-filter": "lang == 'en'", + "directory": ["Manga", "{manga}", "{manga} Ch.{chapter}{chapter_minor}"], + "postprocessors": ["cbz"] + }, + "mangareader": { + "chapter-reverse": true, + "directory": ["Manga", "{manga}", "{manga} Ch.{chapter}{chapter_minor}"], + "postprocessors": ["cbz"] + }, + "mangapanda": { + "chapter-reverse": true, + "directory": ["Manga", "{manga}", "{manga} Ch.{chapter}{chapter_minor}"], + "postprocessors": ["cbz"] + }, + "webtoons": { + "chapter-reverse": true, + "directory": ["Webtoons", "{comic}", "{comic} #{episode}"], + "postprocessors": ["cbz"] + } + }, + "output": { + "mode": "auto" + }, + "downloader": { + "part": true, + "part-directory": "/home/jawz/.cache/gallery-dl", + "ytdl": { + "logging": true, + "format": "bestvideo+bestaudio/best", + "forward-cookies": true + }, + "http": { + "rate": null, + "retries": 5, + "timeout": 10.0, + "verify": true + } + }, + "postprocessor": { + "cbz": { + "name": "zip", + "compression": "store", + "mode": "safe", + "extension": "cbz" + } + } +} diff --git a/dotfiles/gopass/config.yml b/dotfiles/gopass/config.yml new file mode 100755 index 0000000..ece10ca --- /dev/null +++ b/dotfiles/gopass/config.yml @@ -0,0 +1,10 @@ +autoclip: true +autoimport: false +cliptimeout: 45 +exportkeys: false +nopager: false +notifications: false +parsing: true +path: /home/jawz/.local/share/pass +safecontent: true +mounts: {} diff --git a/dotfiles/htop/htoprc b/dotfiles/htop/htoprc new file mode 100755 index 0000000..79ff45d --- /dev/null +++ b/dotfiles/htop/htoprc @@ -0,0 +1,61 @@ +# Beware! This file is rewritten by htop when settings are changed in the interface. +# The parser is also very primitive, and not human-friendly. +htop_version=3.2.1 +config_reader_min_version=3 +fields=18 0 123 124 46 47 38 50 1 +hide_kernel_threads=0 +hide_userland_threads=0 +shadow_other_users=0 +show_thread_names=0 +show_program_path=0 +highlight_base_name=1 +highlight_deleted_exe=1 +highlight_megabytes=1 +highlight_threads=1 +highlight_changes=0 +highlight_changes_delay_secs=5 +find_comm_in_cmdline=1 +strip_exe_from_cmdline=1 +show_merged_command=1 +header_margin=1 +screen_tabs=1 +detailed_cpu_time=0 +cpu_count_from_one=1 +show_cpu_usage=1 +show_cpu_frequency=1 +show_cpu_temperature=1 +degree_fahrenheit=0 +update_process_names=0 +account_guest_in_cpu_meter=0 +color_scheme=3 +enable_mouse=1 +delay=15 +hide_function_bar=0 +header_layout=two_67_33 +column_meters_0=LeftCPUs Swap Tasks NetworkIO Memory +column_meter_modes_0=1 1 2 2 2 +column_meters_1=RightCPUs Hostname Uptime LoadAverage +column_meter_modes_1=1 2 2 2 +tree_view=1 +sort_key=38 +tree_sort_key=0 +sort_direction=-1 +tree_sort_direction=1 +tree_view_always_by_pid=1 +all_branches_collapsed=1 +screen:Main=NICE PID COMM EXE PERCENT_CPU PERCENT_MEM M_VIRT NLWP Command +.sort_key=M_VIRT +.tree_sort_key=PID +.tree_view=1 +.tree_view_always_by_pid=1 +.sort_direction=-1 +.tree_sort_direction=1 +.all_branches_collapsed=1 +screen:I/O=PID USER IO_PRIORITY IO_RATE IO_READ_RATE IO_WRITE_RATE PERCENT_SWAP_DELAY PERCENT_IO_DELAY Command +.sort_key=IO_RATE +.tree_sort_key=PID +.tree_view=0 +.tree_view_always_by_pid=0 +.sort_direction=-1 +.tree_sort_direction=1 +.all_branches_collapsed=0 diff --git a/dotfiles/mpdas/mpdasrc b/dotfiles/mpdas/mpdasrc new file mode 100755 index 0000000..73c1287 --- /dev/null +++ b/dotfiles/mpdas/mpdasrc @@ -0,0 +1,4 @@ +username = Dornisaurio +password = PUOghI][pdUx|1W>druS)Alxh]b{!B0QM~,u@SKRi>p?xb)3qEy +host = localhost +port = 6600 diff --git a/dotfiles/npm/npmrc b/dotfiles/npm/npmrc new file mode 100755 index 0000000..8932649 --- /dev/null +++ b/dotfiles/npm/npmrc @@ -0,0 +1,7 @@ +user=0 +unsafe-perm=true +prefix=${XDG_DATA_HOME}/npm +cache=${XDG_CACHE_HOME}/npm +tmp=${XDG_RUNTIME_DIR}/npm +init-module=${XDG_CONFIG_HOME}/npm/config/npm-init.js +store-dir=${XDG_DATA_HOME}/pnpm-store diff --git a/dotfiles/npm/update-notifier-npm-check.json b/dotfiles/npm/update-notifier-npm-check.json new file mode 100755 index 0000000..d2275b3 --- /dev/null +++ b/dotfiles/npm/update-notifier-npm-check.json @@ -0,0 +1,4 @@ +{ + "optOut": false, + "lastUpdateCheck": 1646662583446 +} \ No newline at end of file diff --git a/dotfiles/wget/wgetrc b/dotfiles/wget/wgetrc new file mode 100755 index 0000000..ed7eedf --- /dev/null +++ b/dotfiles/wget/wgetrc @@ -0,0 +1 @@ +hsts-file = /home/jawz/.cache/wget-hsts diff --git a/hardware-configuration.nix b/hardware-configuration.nix new file mode 100755 index 0000000..bc11abf --- /dev/null +++ b/hardware-configuration.nix @@ -0,0 +1,55 @@ +# Do not modify this file! It was generated by ‘nixos-generate-config’ +# and may be overwritten by future invocations. Please make changes +# to /etc/nixos/configuration.nix instead. +{ config, lib, pkgs, modulesPath, ... }: + +{ + imports = + [ (modulesPath + "/profiles/qemu-guest.nix") + ]; + + boot.initrd.availableKernelModules = [ "ahci" "xhci_pci" "virtio_pci" "sr_mod" "virtio_blk" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-intel" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/3061620b-35eb-4b5f-b4e8-0e208404a749"; + fsType = "btrfs"; + options = [ "subvol=@" "compress=zstd:3" "ssd" "space_cache=v2" "commit=120" ]; + }; + + fileSystems."/home" = + { device = "/dev/disk/by-uuid/3061620b-35eb-4b5f-b4e8-0e208404a749"; + fsType = "btrfs"; + options = [ "subvol=@home" "compress=zstd:3" "ssd" "space_cache=v2" "commit=120" ]; + }; + + fileSystems."/nix" = + { device = "/dev/disk/by-uuid/3061620b-35eb-4b5f-b4e8-0e208404a749"; + fsType = "btrfs"; + options = [ "subvol=@nix" "compress=zstd:3" "ssd" "space_cache=v2" "commit=120" "noatime" ]; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/FF77-8AB3"; + fsType = "vfat"; + }; + + fileSystems."/swap" = + { device = "/dev/disk/by-uuid/3061620b-35eb-4b5f-b4e8-0e208404a749"; + fsType = "btrfs"; + options = [ "subvol=@swap" "noatime" ]; + }; + + swapDevices = [ { device = "/swap/swapfile"; } ]; + + # Enables DHCP on each ethernet and wireless interface. In case of scripted networking + # (the default) this is the recommended approach. When using systemd-networkd it's + # still possible to use this option, but it's recommended to use it in conjunction + # with explicit per-interface declarations with `networking.interfaces..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.enp1s0.useDHCP = lib.mkDefault true; + + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/pacman list b/pacman list new file mode 100755 index 0000000..aeb90c5 --- /dev/null +++ b/pacman list @@ -0,0 +1,90 @@ +# adw-gtk3 +# adwaita-qt5 +bash-language-server +caddy +curtail +# dnsmasq +# docker +# docker-compose +fail2ban +firewalld +fontdownloader +furtherance +gallery-dl-git +gnome-kra-ora-thumbnailer-git +graphviz +grilo-plugins +gtkhash-nautilus-git +haskell-language-server +hoogle +hunspell-en_ca +hunspell-es_mx +hunspell-it +identity-git +intel-ucode +languagetool +lazydocker +man-db +man-pages +menulibre +mousai +mpc +mpd +mpdas +mpdevil +mpdris2 +mypaint +nautilus-megasync +ncmpcpp +neofetch +noise-suppression-for-voice +noto-fonts-cjk +npm +nss-mdns +nvidia +nvidia-container-toolkit +opendoas +orca +pacman-contrib +papirus-folders-git +papirus-libreoffice-theme +paru +patch +pika-backup +pipewire-v4l2 +pkgconf +pokemon-colorscripts-git +protonvpn +pureref +python-nautilus +python-pipx +qemu-desktop +reflector +ripgrep +rmlint +rygel +samba +seahorse +seahorse-nautilus +shellcheck +starship +steam +sushi +syncplay +syncthing +texlive-latexextra +texlive-science +tilix +timeshift +topgrade +transmission-gtk +trash-cli +vino +virt-manager +warp +webp-pixbuf-loader +wine +wl-clipboard +xclip +xdg-user-dirs-gtk +zram-generator diff --git a/pacman list new b/pacman list new new file mode 100755 index 0000000..d0adc4a --- /dev/null +++ b/pacman list new @@ -0,0 +1,162 @@ +adw-gtk3 +adwaita-qt5 +bash-bats # exercism +bash-language-server +beets # check plugins +bluez-utils-compat +celluloid +curtail # build +discord +discount +dnsmasq +docker +docker-compose +dropbox +easyeffects +emacs +eog +exa +exercism +fail2ban +fd +ffmpegthumbnailer +file-roller +firefox +firewalld +fish +flex +foliate +fontdownloader +furtherance +fzf +gallery-dl-git +gdm +gdu +geary +gifsicle +gnome-backgrounds +gnome-browser-connector +gnome-calculator +gnome-calendar +gnome-clocks +gnome-kra-ora-thumbnailer-git +gnome-logs +gnome-maps +gnome-podcasts +gnome-recipes +gnome-remote-desktop +gnome-shell-extension-gsconnect +gnome-system-monitor +gnome-tweaks +gnome-user-share +gnome-weather +gocryptfs +godot +google-chrome +graphviz +grilo-plugins +gst-plugin-pipewire +gtkhash-nautilus-git +gvfs-afc +gvfs-google +gvfs-gphoto2 +gvfs-mtp +gvfs-nfs +gvfs-smb +handbrake +hoogle +htop +huiontablet +hunspell-en_ca +hunspell-es_mx +hunspell-it +identity +intel-ucode +krita +languagetool +lazydocker +libreoffice-fresh +linux-firmware +linux-headers +lutris +make +malcontent +man-db +man-pages +menulibre +mousai +mpc +mpd +mpdas +mpdevil +mpdris2 +mypaint +nautilus-megasync +ncmpcpp +neofetch +nerd-fonts-cascadia-code +nerd-fonts-source-code-pro +nerd-fonts-ubuntu-mono +nixfmt +noise-suppression-for-voice +noto-fonts-cjk +noto-fonts-emoji +npm +nss-mdns +nvidia +nvidia-container-toolkit +orca +pacman-contrib +papirus-folders-git +papirus-libreoffice-theme +paru +patch +pika-backup +pipewire-v4l2 +pitivi +pkgconf +pokemon-colorscripts-git +pokeshell-git +profile-sync-daemon +protonvpn +pureref +python-discogs-client +python-httpx +python-nautilus +python-pip +python-pipx +python-pylast +qemu-desktop +reflector +ripgrep +rmlint +rygel +samba +seahorse +seahorse-nautilus +shfmt +sshfs +starship +steam +sudo +sushi +syncplay +syncthing +texlive-latexextra +texlive-science +tilix +tldr +topgrade +transmission-gtk +trash-cli +vino +virt-manager +warp +webp-pixbuf-loader +wine +wl-clipboard +xclip +xdg-ninja-git +xdg-user-dirs-gtk +yt-dlp +zram-generator