aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorene <ene@sils.li>2023-02-01 20:22:29 +0100
committerene <ene@sils.li>2023-02-01 20:28:24 +0100
commita806c6776ea19ec068b7a60fde211310fd41d156 (patch)
treeb34083424e759459473b13b7c2f9f75cf9e8a80e
downloadnixos-config-a806c6776ea19ec068b7a60fde211310fd41d156.zip
Initial commit
-rw-r--r--flake.nix21
-rw-r--r--hosts/IDOHVE/configuration.nix23
-rw-r--r--hosts/IDOHVE/gpu.nix17
-rw-r--r--hosts/IDOHVE/hardware.nix85
-rw-r--r--hosts/IDOHVE/networking.nix10
-rw-r--r--services/custom_cursor.sh40
-rw-r--r--services/nix.nix18
-rw-r--r--services/zsh-init.sh38
-rw-r--r--services/zsh-prompt.sh63
-rw-r--r--services/zsh.nix130
-rw-r--r--system/packages.conf211
-rw-r--r--system/packages.nix86
-rw-r--r--system/users.nix17
13 files changed, 759 insertions, 0 deletions
diff --git a/flake.nix b/flake.nix
new file mode 100644
index 00000000..c8ba31df
--- /dev/null
+++ b/flake.nix
@@ -0,0 +1,21 @@
+# vim: ts=2
+{
+ description = "Nixos system config";
+
+ inputs = {
+ nixpkgs.url = "nixpkgs/nixos-unstable";
+ home-manager.url = "github:nix-community/home-manager/master";
+ };
+
+ outputs = {
+ self,
+ nixpkgs,
+ ...
+ } @ attrs: {
+ nixosConfigurations.IDOHVE = nixpkgs.lib.nixosSystem {
+ system = "x86_64-linux";
+ specialArgs = attrs;
+ modules = [./hosts/IDOHVE/configuration.nix];
+ };
+ };
+}
diff --git a/hosts/IDOHVE/configuration.nix b/hosts/IDOHVE/configuration.nix
new file mode 100644
index 00000000..a3cf2b2c
--- /dev/null
+++ b/hosts/IDOHVE/configuration.nix
@@ -0,0 +1,23 @@
+# vim: ts=2
+{
+ config,
+ lib,
+ nixpkgs,
+ home-manager,
+ ...
+}: {
+ imports = [
+ ./hardware.nix
+ ./gpu.nix
+ ./networking.nix
+
+ ../../system/packages.nix
+ ../../system/users.nix
+
+ ../../services/nix.nix
+ ../../services/zsh.nix
+ ];
+
+
+ system.stateVersion = "23.05";
+}
diff --git a/hosts/IDOHVE/gpu.nix b/hosts/IDOHVE/gpu.nix
new file mode 100644
index 00000000..6796d04b
--- /dev/null
+++ b/hosts/IDOHVE/gpu.nix
@@ -0,0 +1,17 @@
+{
+ config,
+ pkgs,
+ lib,
+ ...
+}: {
+ hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; # TODO
+
+ hardware.opengl.extraPackages = with pkgs; [
+ rocm-opencl-icd # open-cl
+ amdvlk # or directly through mesa
+ amd-media-driver # libva
+ ];
+
+ # Force radv, TODO is this logical?
+ environment.variables.AMD_VULKAN_ICD = "RADV";
+}
diff --git a/hosts/IDOHVE/hardware.nix b/hosts/IDOHVE/hardware.nix
new file mode 100644
index 00000000..be55c07c
--- /dev/null
+++ b/hosts/IDOHVE/hardware.nix
@@ -0,0 +1,85 @@
+{
+ config,
+ lib,
+ pkgs,
+ modulesPath,
+ ...
+}: let
+ main_disk = "/dev/disk/by-uuid/<uuid>";
+in {
+ imports = [
+ (modulesPath + "/installer/scan/not-detected.nix") # TODO is this necessary?
+ ];
+
+ boot = {
+ initrd = {
+ compressor = "lz4";
+ compressorArgs = ["-9"];
+
+ # TODO check this:
+ availableKernelModules = ["xhci_pci" "nvme" "rtsx_pci_sdmmc"];
+ };
+
+ kernelModules = ["kvm-amd"];
+ kernelPackages = pkgs.linuxPackages_latest;
+ loader = {
+ grub = {
+ enable = true;
+ version = 2;
+ theme = pkgs.nixos-grub2-theme;
+ splashImage = ./grub_boot_image.png;
+ efiSupport = true;
+ device = "nodev"; # TODO add this
+ };
+ efi = {
+ canTouchEfiVariables = true;
+ efiSysMountPoint = "/boot";
+ };
+ };
+ };
+
+ fileSystems = {
+ "/" = {
+ device = "none";
+ fsType = "tmpfs";
+ options = ["defaults" "size=2G" "mode=755"];
+ };
+ "/nix" = {
+ device = main_disk;
+ fsType = "btrfs";
+ options = ["subvol=@nix" "compress-force=zstd:9"];
+ };
+ "/boot" = {
+ device = "/dev/disk/by-uuid/<uuid>";
+ fsType = "vfat";
+ };
+
+ "/srv/home" = {
+ device = main_disk;
+ fsType = "btrfs";
+ options = ["subvol=@home" "compress-force=zstd:9"];
+ };
+ "/srv/nixos-config" = {
+ device = main_disk;
+ fsType = "btrfs";
+ options = ["subvol=@nixos-config" "compress-force=zstd:9"];
+ };
+
+ "/etc/nixos" = {
+ device = "/srv/nix-config";
+ options = ["bind"];
+ };
+ "/home" = {
+ device = "/srv/home";
+ options = ["bind"];
+ };
+ };
+
+ swapDevices = [];
+
+
+
+ nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
+ powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
+}
+
diff --git a/hosts/IDOHVE/networking.nix b/hosts/IDOHVE/networking.nix
new file mode 100644
index 00000000..67e5bd15
--- /dev/null
+++ b/hosts/IDOHVE/networking.nix
@@ -0,0 +1,10 @@
+{config, lib, ...}: {
+ # 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.<interface>.useDHCP`.
+ networking.useDHCP = lib.mkDefault true;
+ # networking.interfaces.enp0s31f6.useDHCP = lib.mkDefault true;
+ # networking.interfaces.wlp3s0.useDHCP = lib.mkDefault true;
+ networking.hostName = "IDOHVE";
+}
diff --git a/services/custom_cursor.sh b/services/custom_cursor.sh
new file mode 100644
index 00000000..9a6da012
--- /dev/null
+++ b/services/custom_cursor.sh
@@ -0,0 +1,40 @@
+# Change cursor shape for different vi modes.
+function zle-keymap-select {
+ if [[ ${KEYMAP} == vicmd ]] ||
+ [[ $1 = 'block' ]]; then
+ echo -ne '\e[1 q'
+ elif [[ ${KEYMAP} == main ]] ||
+ [[ ${KEYMAP} == viins ]] ||
+ [[ ${KEYMAP} = '' ]] ||
+ [[ $1 = 'beam' ]]; then
+ echo -ne '\e[5 q'
+ fi
+}
+zle -N zle-keymap-select
+
+# ci", ci', ci`, di", etc
+autoload -U select-quoted
+zle -N select-quoted
+for m in visual viopp; do
+ for c in {a,i}{\',\",\`}; do
+ bindkey -M $m $c select-quoted
+ done
+done
+
+# ci{, ci(, ci<, di{, etc
+autoload -U select-bracketed
+zle -N select-bracketed
+for m in visual viopp; do
+ for c in {a,i}${(s..)^:-'()[]{}<>bB'}; do
+ bindkey -M $m $c select-bracketed
+ done
+done
+
+zle-line-init() {
+ zle -K viins # initiate `vi insert` as keymap (can be removed if `bindkey -V` has been set elsewhere)
+ echo -ne "\e[5 q"
+}
+zle -N zle-line-init
+
+echo -ne '\e[5 q' # Use beam shape cursor on startup.
+precmd() { echo -ne '\e[5 q' ;} # Use beam shape cursor for each new prompt.
diff --git a/services/nix.nix b/services/nix.nix
new file mode 100644
index 00000000..b94cfc95
--- /dev/null
+++ b/services/nix.nix
@@ -0,0 +1,18 @@
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}: {
+ nix = {
+ gc = {
+ automatic = true;
+ dates = "daily";
+ options = "--delete-older-than 3";
+ };
+ settings = {
+ auto-optimise-store = true;
+ experimental-features = ["nix-command" "flakes"];
+ };
+ };
+}
diff --git a/services/zsh-init.sh b/services/zsh-init.sh
new file mode 100644
index 00000000..bc9af87a
--- /dev/null
+++ b/services/zsh-init.sh
@@ -0,0 +1,38 @@
+# If not running interactively, don't do anything
+[[ $- != *i* ]] && return
+
+# Flex on the ubuntu users
+[ "$NVIM" ] || neofetch || hyfetch
+#loginctl show-session $XDG_SESSION_ID
+
+## Enable colors and change prompt:
+#autoload -Uz colors && colors
+#autoload -Uz compinit && compinit -u
+## Edit line in vim buffer ctrl-v
+#autoload -Uz edit-command-line; zle -N edit-command-line
+## Enter vim buffer from normal mode
+#autoload -Uz edit-command-line && zle -N edit-command-line
+
+## zstyles
+#zstyle ':completion:*' menu select
+## Auto complete with case insensitivity
+#zstyle ':completion:*' matcher-list '' 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'
+
+#zmodload zsh/complist
+#fpath+=/home/dt/.config/zsh/comp
+#compinit
+#_comp_options+=(globdots) # Include hidden files.
+#
+## Source configs
+#source "${ZDOTDIR}/ali.sh"
+#source "${ZDOTDIR}/prompt.sh"
+#source "${ZDOTDIR}/hotkeys.sh"
+source "./${path_custom_cursor}"
+#source ~/.local/lib/shell/lib
+#
+## Load zsh-syntax-highlighting
+#source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
+## Suggest aliases for commands
+#source /usr/share/zsh/plugins/zsh-you-should-use/you-should-use.plugin.zsh
+#
+##eval "$(lua ~/scripts/z.lua --init zsh enhanced)"
diff --git a/services/zsh-prompt.sh b/services/zsh-prompt.sh
new file mode 100644
index 00000000..1f0f164b
--- /dev/null
+++ b/services/zsh-prompt.sh
@@ -0,0 +1,63 @@
+#vim:ft=zsh
+_command_time_preexec() {
+ timer=${timer:-$SECONDS}
+}
+
+_command_time_precmd() {
+ PROMPT_TMP_DIR=$(mktemp)
+ if [ $timer ]; then
+ ts=$(($SECONDS - $timer))
+ tts=$ts
+ mi=0
+ ho=0
+ if [ $ts -ge 3 ];then
+ while [ $ts -ge 60 ];do
+ ts=$((ts-60))
+ mi=$((mi+1))
+ done
+
+ while [ $mi -ge 60 ];do
+ mi=$((mi-60))
+ ho=$((ho+1))
+ done
+
+ if [ $tts -ge 3600 ];then
+ out=$(printf '%dh %dm %ds\n' $ho $mi $ts)
+ elif [ $tts -ge 60 ];then
+ out=$(printf '%dm %ds\n' $mi $ts)
+ elif [ $tts -lt 60 ];then
+ out=$(printf '%ds\n' $ts)
+ fi
+
+ export psvar[1]="took $(printf '%s ' "$out")"
+ echo $psvar[1] > $PROMPT_TMP_DIR
+ fi
+
+ unset timer
+ unset ts
+ unset tts
+ unset mi
+ unset ho
+fi
+}
+
+_command_ro_precmd() {
+if ! [ -w $(pwd) ];then
+ echo " "
+fi
+}
+
+preexec_functions+=(_command_time_preexec)
+precmd_functions+=(_command_time_precmd)
+
+blue="14"
+red="9"
+white="15"
+setopt PROMPT_SUBST
+export PROMPT='%(?.%F{$blue}.%F{$red})%B%3~%(!. %F{$red}as root %f. )%F{$white}$(if [ -n $PROMPT_TMP_DIR ];then cat $PROMPT_TMP_DIR; rm $PROMPT_TMP_DIR;fi)%f%(?.%F{$blue}.%F{$red})%F{$red}$(_command_ro_precmd)%F{$blue}❯ %b%f'
+export RPROMPT=''
+
+#%(2V.%F{$red}%2v%f$(export psvar[2]="") .)
+
+# TODO:
+# Add git support
diff --git a/services/zsh.nix b/services/zsh.nix
new file mode 100644
index 00000000..b194ab6b
--- /dev/null
+++ b/services/zsh.nix
@@ -0,0 +1,130 @@
+{
+ config,
+ pkgs,
+ ...
+}: let
+ path_config_cursor = builtins.writeFile ./custom_cursor;
+in {
+ programs.zsh = {
+ enable = true;
+ zsh-autoenv = {
+ enable = true;
+ };
+ syntaxHighlighting = {
+ enable = true;
+ };
+ shellAliases = {
+ ls = "ls -a --color=auto";
+ ll = ". ll";
+ pip = "pip --require-virtualenv";
+ hisea = "history info | grep";
+
+ mocp = "mocp -M \"$XDG_CONFIG_HOME\"/moc";
+ yarn = "yarn --use-yarnrc \"$XDG_CONFIG_HOME\"/yarn/config";
+ };
+ setOptions = [
+ "AUTO_CD"
+ "AUTO_PUSHD"
+ "CHASE_DOTS"
+
+ "ALWAYS_TO_END"
+
+ "EXTENDED_HISTORY"
+ "HIST_ALLOW_CLOBBER"
+ "HIST_VERIFY"
+ "HIST_FCNTL_LOCK"
+
+ "DVORAK"
+ "CORRECT"
+
+ "PROMPT_SUBST"
+ "TRANSIENT_RPROMPT" # maybe?
+
+ "COMBINING_CHARS"
+ "VI"
+ ];
+
+ promptInit =
+ builtins.readFile ./zsh-prompt.sh;
+ loginShellInit = ''
+ eval $(ssh-agent -s) > /dev/null # start ssh agent
+ export ENHANCHED_NEOFETCH="$(pacman -Qn | wc -l) (pacman), $(pacman -Qm | wc -l) (aur), $(($(cargo install --list | wc -l ) / 2)) (cargo)"
+ '';
+ interactiveShellInit = builtins.readFile ./zsh-init.sh;
+ histSize = 9999999;
+ histFile = "$XDG_DATA_HOME/zsh/history";
+ autosuggentions = {
+ enable = true;
+ };
+ };
+
+ environment = {
+ variables = {
+ XDG_DATA_HOME = "$HOME/.local/share";
+ XDG_STATE_HOME = "$HOME/.local/state";
+ XDG_CACHE_HOME = "$HOME/.cache";
+ XDG_CONFIG_HOME = "$HOME/.config";
+ XDG_BIN_HOME = "\${HOME}/.local/bin";
+
+ HISTSIZE = "9000000";
+ TIMEFMT = "'$fg[green]%J$reset_color' time: $fg[blue]%*Es$reset_color, cpu: $fg[blue]%P$reset_color"; # no idea what this does or why it is needed
+ REPORTTIME = "10";
+
+ PATH = [
+ "\${PATH}:/home/dt/repos/shell/scripts"
+ "/home/dt/.local/bin"
+ "/home/dt/.local/share/cargo/bin/"
+ ];
+ EDITOR = "nvim";
+ IVIEWER = "imv";
+ READER = "zathura";
+ VISUAL = "nvim";
+ CODEEDITOR = "nvim";
+ TERMINAL = "alacritty";
+ BROWSER = "firefox";
+ COLORTERM = "truecolor";
+ PAGER = "less";
+ WM = "river";
+ AWMWALLPAPER = "/home/dt/media/pictures/tes/wallpapers-linux_cast/Dedicated_Colorschemes/nord/Abstract-Nord.png";
+
+ # FUNCNEST for more functions in functions
+ FUNCNEST = "2000";
+
+ WALLPAPERDIR = "$HOME/media/pictures/wallpapers/";
+ LESS = "R";
+ MANPAGER = "less -R --use-color -Dd+r -Du+b";
+ LIBVIRT_DEFAULT_URI = "qemu:///system";
+ BEMENU_SCALE = "1.5";
+ BEMENU_BACKEND = "wayland";
+ BEMENU_OPTS = "--fn 'Source Code Pro 10' -c -l 30 -B 1 -W 0.9 --hf #ffffff";
+
+ # Clean the home dir {{{
+ _JAVA_OPTIONS = "-Djava.util.prefs.userRoot=$XDG_CONFIG_HOME/java -Djavafx.cachedir = \"$XDG_CACHE_HOME/openjfx\"";
+ GRADLE_USER_HOME = "\"$XDG_DATA_HOME\"/gradle";
+ CARGO_HOME = "\"$XDG_DATA_HOME\"/cargo";
+ GNUPGHOME = "\"$XDG_DATA_HOME\"/gnupg";
+ GOPATH = "\"$XDG_DATA_HOME\"/go";
+ GTK2_RC_FILES = "\"$XDG_CONFIG_HOME\"/gtk-2.0/gtkrc";
+ LESSHISFILE = "\"$XDG_CACHE_HOME\"/less/history";
+ LESSKEYIN = "\"$XDG_CONFIG_HOME\"/less/lesskey";
+ RUSTUP_HOME = "\"$XDG_DATA_HOME\"/rustup";
+ NPM_CONFIG_USERCONFIG = "\"$XDG_CONFIG_HOME\"/npm/npmrc";
+ NUGET_PACKAGES = "\"$XDG_CACHE_HOME\"/NuGetPackages";
+ PYTHONSTARTUP = "\"$XDG_CONFIG_HOME\"/python/pythonrc";
+ XAUTHORITY = "\"$XDG_RUNTIME_DIR\"/Xauthority";
+ COMPDUMPFILE = "\"$XDG_DATA_DIR\"/zsh/.zcompdump}";
+ IPYTHONDIR = "\"$XDG_CONFIG_HOME\"/ipython";
+ PARALLEL_HOME = "\"$XDG_CONFIG_HOME\"/parallel";
+ STACK_XDG = "1";
+ # }}}
+
+ # Export Wayland env Vars {{{
+ QT_QPA_PLATFORM = "wayland";
+ QT_QPA_PLATFORMTHEME = "qt5ct"; # needs qt5ct
+ CLUTTER_BACKEND = "wayland";
+ SDL_VIDEODRIVER = "wayland"; # might brake some things
+ MOZ_ENABLE_WAYLAND = "1";
+ # }}}
+ };
+ };
+}
diff --git a/system/packages.conf b/system/packages.conf
new file mode 100644
index 00000000..25f6ace8
--- /dev/null
+++ b/system/packages.conf
@@ -0,0 +1,211 @@
+# vim: ft=conf
+ # GUI
+ # Terminals
+ alacritty # terminal emulator
+
+ # Browsers
+ firefox # web browser
+ ungoogled-chromium-xdg-bin # web browser (only for web programming)
+
+ # Image manipulation
+ krita # new, and better (KDE)
+ gimp # conservative, and old (GNOME)
+
+ # Social
+ mumble # voice chat software (client)
+ nheko-git # Matrix Desktop client
+
+ # Misc
+ kalzium # Periodic Table of Elements
+ keepassxc # password manager
+ onlykey # OnlyKey Chrome Desktop App
+ steam # Valve's digital software delivery system
+
+ # TUI/CLI
+ # Networking
+ # One-off things
+ #bind # A complete, highly portable implementation of the DNS protocol
+ #firewalld # Firewall daemon with D-Bus interface
+ #ngrep # A grep-like utility that allows you to search for network packets on an interface.
+ #openbsd-netcat # TCP/IP swiss army knife. OpenBSD variant.
+ # Misc
+ lftp # FTP client
+ openssh # SSH client
+
+ # Eye candy
+ banner # Print large banners to ASCII terminals
+ cmatrix # A curses-based scrolling 'Matrix'-like screen
+ hyfetch # Neofetch with LGBTQ pride flags.
+
+ # Backups
+ rclone # Sync files to and from Google Drive, S3, Swift, Cloudfiles, Dropbox and Google Cloud Storage
+ snapper # A tool for managing BTRFS and LVM snapshots. It can create, diff and restore snapshots and provides timelined auto-snapping.
+ snap-sync # Use snapper snapshots to backup to external drive
+
+ # Misc
+ android-file-transfer # Android MTP client with minimalistic UI
+ docx2txt # Recovers text from DOCX files, with good formatting.
+ btop # Interactive process viewer (maybe better than htop)
+ ttf-sourcecodepro-nerd # Patched font Source Code Pro from nerd fonts library
+ xdg-ninja-git # A shell script which checks your $HOME for unwanted files and directories.
+ yokadi # Command line oriented, sqlite powered, todo list
+
+ # WM
+ river # A dynamic tiling wayland compositor
+
+ # CLI tools
+ lswt # List Wayland toplevels
+ wlopm # Wayland output power management.
+ wlr-randr # Utility to manage outputs
+ wl-clipboard # Command-line copy/paste utilities
+ gammastep # Adjust the color temperature of your screen according to your surroundings.
+
+ # Components
+ yambar # status panel
+ swaybg # Wallpaper
+ mako # notification daemon
+ bemenu-wayland # Run prompt
+
+ # Media
+ slurp # Select a region (used in the coordinates for grim/maim)
+ grim # Screenshot utility
+ #maim # Screenshot utility
+ wf-recorder # Screen recorder
+
+ # Idle
+ swayidle # Idle management daemon
+ swaylock # Screen locker
+
+
+ # LF
+ lf # A terminal file manager inspired by ranger
+
+ # Functions
+ broot # Fuzzy Search + tree + cd
+ dragon-drop # Simple drag-and-drop source/sink
+ trash-cli # Command line trashcan (recycle bin) interface
+
+ # Previewer
+ chafa # Image-to-text converter
+ highlight # source code highlighter
+ mediainfo # Supplies technical and tag information about a video or audio file
+ w3m # Text-based Web browser as well as pager
+ ffmpegthumbnailer # video thumbnailer that can be used by file managers
+
+ # Media
+ # Download
+ yt-dlp # A youtube-dl fork with additional features and fixes
+ #cclive # Commandline downloader for popular video websites.
+
+ # Manipulate
+ ffmpeg # Complete solution to record, convert and stream audio and video
+
+ # View
+ imv # Image viewer
+ mpv # media player
+
+ # Listen
+ moc # An ncurses console audio player designed to be powerful and easy to use
+ pavucontrol # PulseAudio Volume Control
+ pipewire-alsa # Low-latency audio/video router and processor - ALSA configuration
+ pipewire-jack # Low-latency audio/video router and processor - JACK support
+ pipewire-pulse # Low-latency audio/video router and processor - PulseAudio replacement
+
+ # Hardware
+ # Boot
+ efibootmgr # Linux user-space application to modify the EFI Boot Manager
+ grub # GNU GRand Unified Bootloader (2)
+
+ # Storage
+ compsize # Calculate compression ratio of a set of files on Btrfs
+ smartmontools # Control and monitor S.M.A.R.T. enabled ATA and SCSI Hard Drives
+
+ # Input
+ piper # GTK application to configure gaming mice
+
+ # Printer
+ gutenprint # Top quality printer drivers for POSIX systems
+ sane-airscan # SANE - SANE backend for AirScan (eSCL) and WSD document scanners
+
+ # CPU
+ cpupower # Linux kernel tool to examine and tune power saving related features of your processor
+
+ # Zsh
+ zsh # A very advanced and programmable command interpreter (shell) for UNIX
+ zsh-syntax-highlighting # Fish shell like syntax highlighting for Zsh
+ # next one only works if your alias is only a command, e.g. if you `alias='cat some_file.txt &2> /dev/null'`, running `cat some_file.txt` won't trigger it.
+ # TODO find something better for this use case
+ # zsh-you-should-use # ZSH plugin that reminds you to use existing aliases for commands you just typed
+
+ # Core Utils
+ file # File type identification utility
+ grep # A string search utility
+ sudo # Give certain users the ability to run some commands as root
+ wget # Network utility to retrieve files from the Web
+ which # A utility to show the full path of commands
+
+ # File listers
+ tree # A directory listing program displaying a depth indented list of files
+ findutils # GNU utilities to locate files
+ fd # Simple, fast and user-friendly alternative to find
+ ripgrep # A search tool that combines the usability of ag with the raw speed of grep
+
+ # {Un}Compressors
+ zip # Compressor/archiver for creating and modifying zipfiles
+ gzip # GNU compression utility
+ p7zip # Command-line file archiver with high compression ratio
+ unzip # For extracting and viewing files in .zip archives
+
+ # Editors
+ ed # A POSIX-compliant line-oriented text editor
+ sed # GNU stream editor
+ vi # The original ex/vi text editor
+ neovim # Fork of Vim aiming to improve user experience, plugins, and GUIs
+
+ # Programming
+ # General Tools
+ git # the fast distributed version control system
+ git-bug # Distributed, offline-first bug tracker embedded in git, with bridges
+ glow # Command-line markdown renderer
+ strace # A diagnostic, debugging and instructional userspace tracer
+ tokei # A blazingly fast CLOC (Count Lines Of Code) program
+
+ # Rust
+ rustup # The Rust toolchain installer
+ rust-analyzer # Rust compiler front-end for IDEs
+
+ # Yaml
+ yamllint # Linter for YAML files
+
+ # TeX
+ zathura # Minimalistic document viewer
+ zathura-pdf-poppler # Adds pdf support to zathura by using the poppler engine
+ ltex-ls-bin # LTeX Language Server
+ biber # A Unicode-capable BibTeX replacement for biblatex users
+ pandoc # Conversion between markup formats
+
+ # Web
+ vscode-langservers-extracted # Language servers extracted from VSCode.
+ dart-sass # Sass makes CSS fun again
+ prettier # An opinionated code formatter for JS, JSON, CSS, YAML and much more
+
+ # Shell
+ dash # POSIX compliant shell that aims to be as small as possible
+ shellcheck # Shell script analysis tool
+
+ # Lua
+ lua # Powerful lightweight programming language designed for extending applications
+ lua-format # LuaFormatter - Code formatter for Lua
+ lua-language-server # Lua Language Server coded by Lua
+
+ # R
+ r # Language and environment for statistical computing and graphics
+
+
+#expect # A tool for automating interactive applications
+#handlr # Powerful alternative to xdg-utils written in Rust
+#linux # The Linux kernel and modules
+#linux-firmware # Firmware files for Linux
+#packagekit-qt5 # Qt5 bindings for PackageKit
+#vulkan-radeon # Radeon's Vulkan mesa driver
+#xorg-bdftopcf # Convert X font from Bitmap Distribution Format to Portable Compiled Format
diff --git a/system/packages.nix b/system/packages.nix
new file mode 100644
index 00000000..1acba85e
--- /dev/null
+++ b/system/packages.nix
@@ -0,0 +1,86 @@
+{
+ config,
+ pkgs,
+ ...
+}: {
+ environment.systemPackages = with pkgs; [
+ (builtins.readFile ./packages.conf) # TODO could work
+ ];
+}
+# QEMU
+# TEX
+# {{{
+#adobe-source-han-sans-kr-fonts # Adobe Source Han Sans Subset OTF - Korean OpenType/CFF fonts
+#alsa-utils # Advanced Linux Sound Architecture - Utilities
+#element-desktop # Glossy Matrix collaboration client — desktop version.
+#gawk # GNU version of awk
+#gimp # GNU Image Manipulation Program
+#git-lfs # Git extension for versioning large files
+#gnome-epub-thumbnailer # Thumbnailer for EPub and MOBI books
+#gnumeric # A GNOME Spreadsheet Program
+#gpick # Advanced color picker written in C++ using GTK+ toolkit
+#gradle # Powerful build system for the JVM
+#groff # GNU troff text-formatting system
+#jre11-openjdk-headless # OpenJDK Java 11 headless runtime environment
+#klavaro # Free touch typing tutor program
+#lifeograph # Private journal, diary and note taking application
+#lynx # A text browser for the World Wide Web
+#man-db # A utility for reading man pages
+#networkmanager # Network connection manager and user applications
+#nss-mdns # glibc plugin providing host name resolution via mDNS
+#python-spotdl # Download your Spotify playlists and songs along with album art and metadata (from YouTube if a match is found).
+#python-xlsx2csv # xlsx to csv converter
+#ruff # An extremely fast Python linter, written in Rust
+#signal-desktop # Signal Private Messenger for Linux
+#slides # Terminal based presentation tool
+#torbrowser-launcher # Securely and easily download, verify, install, and launch Tor Browser in Linux
+#web-ext # A command line tool to help build, run, and test web extensions
+#wkhtmltopdf # Command line tools to render HTML into PDF and various image formats
+#xcursor-bluecurve # Redhat's Bluecurve X mouse cursor theme
+# XORG
+#xorg-docs # X.org documentations
+#xorg-font-util # X.Org font utilities
+#xorg-fonts-100dpi # X.org 100dpi fonts
+#xorg-fonts-75dpi # X.org 75dpi fonts
+#xorg-fonts-encodings # X.org font encoding files
+#xorg-iceauth # ICE authority file utility
+#xorg-mkfontscale # Create an index of scalable font files for X
+#xorg-server # Xorg X server
+#xorg-server-common # Xorg server common files
+#xorg-server-devel # Development files for the X.Org X server
+#xorg-server-xephyr # A nested X server that runs as an X application
+#xorg-server-xnest # A nested X server that runs as an X application
+#xorg-server-xvfb # Virtual framebuffer X server
+#xorg-sessreg # Register X sessions in system utmp/utmpx databases
+#xorg-setxkbmap # Set the keyboard using the X Keyboard Extension
+#xorg-smproxy # Allows X applications that do not support X11R6 session management to participate in an X11R6 session
+#xorg-x11perf # Simple X server performance benchmarker
+#xorg-xauth # X.Org authorization settings program
+#xorg-xbacklight # RandR-based backlight control application
+#xorg-xcmsdb # Device Color Characterization utility for X Color Management System
+#xorg-xcursorgen # Create an X cursor file from PNG images
+#xorg-xdpyinfo # Display information utility for X
+#xorg-xdriinfo # Query configuration information of DRI drivers
+#xorg-xev # Print contents of X events
+#xorg-xgamma # Alter a monitor's gamma correction
+#xorg-xhost # Server access control program for X
+#xorg-xinit # X.Org initialisation program
+#xorg-xinput # Small commandline tool to configure devices
+#xorg-xkbcomp # X Keyboard description compiler
+#xorg-xkbevd # XKB event daemon
+#xorg-xkbutils # XKB utility demos
+#xorg-xkill # Kill a client by its X resource
+#xorg-xlsatoms # List interned atoms defined on server
+#xorg-xlsclients # List client applications running on a display
+#xorg-xmodmap # Utility for modifying keymaps and button mappings
+#xorg-xpr # Print an X window dump from xwd
+#xorg-xrandr # Primitive command line interface to RandR extension
+#xorg-xrdb # X server resource database utility
+#xorg-xrefresh # Refresh all or part of an X screen
+#xorg-xsetroot # Classic X utility to set your root window background to a given pattern or color
+#xorg-xvinfo # Prints out the capabilities of any video adaptors associated with the display that are accessible through the X-Video extension
+#xorg-xwayland # run X clients under wayland
+#xorg-xwininfo # Command-line utility to print information about windows on an X server
+#xorg-xwud # X Window System image undumping utility
+# }}}
+
diff --git a/system/users.nix b/system/users.nix
new file mode 100644
index 00000000..ca2fc352
--- /dev/null
+++ b/system/users.nix
@@ -0,0 +1,17 @@
+{
+ config,
+ pkgs,
+ ...
+}: {
+ users = {
+ mutableUsers = false;
+ users.soispha = {
+ isNormalUser = true;
+ home = "/home/soispha";
+ shell = pkgs.zsh;
+ initialHashedPassword = "$y$jFT$ONrCqZIJKB7engmfA4orD/$0GO58/wV5wrYWj0cyONhyujZPjFmbT0XKtx2AvXLG0B";
+ extraGroups = ["wheel"];
+ uid = 1000;
+ };
+ };
+}