{ 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"; }