commit ecb8bc951f14c4f27a0d477827fefb2dbeb7b675 Author: minco Date: Thu Jul 17 19:28:12 2025 +0900 initial diff --git a/configuration.nix b/configuration.nix new file mode 100644 index 0000000..312ef88 --- /dev/null +++ b/configuration.nix @@ -0,0 +1,111 @@ +# Edit this configuration file to define what should be installed on your system. Help is available in the configuration.nix(5) man page, on +# https://search.nixos.org/options and in the NixOS manual (`nixos-help`). + +{ config, lib, pkgs, inputs, ... }: + +{ + imports = [ + ./hardware-configuration.nix + ./services/virtual.nix + ./services/x.nix + ./services/sound.nix + ]; + + nixpkgs.config.allowUnfree = true; + + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + boot.loader.grub.device = "/dev/nvme1n1p1"; + + networking.hostName = "haskell"; # Define your hostname. + + programs.steam.enable = true; + + programs.fish.enable = true; + programs.nix-ld = { + enable = true; + libraries = import ./modules/ld.nix; + }; + + time.timeZone = "Asia/Seoul"; + + i18n.defaultLocale = "en_US.UTF-8"; + i18n.inputMethod = { + type = "fcitx5"; + enable = true; + fcitx5.addons = with pkgs; [ fcitx5-gtk fcitx5-hangul ]; + }; + # console = { + # font = "Lat2-Terminus16"; + # keyMap = "us"; + # useXkbConfig = true; # use xkb.options in tty. + # }; + + services.udev.packages = [ pkgs.libwacom ]; + + services.usbmuxd = { + enable = false; + package = pkgs.usbmuxd2; + }; + + fonts.packages = with pkgs; [ nerd-fonts.monaspace ]; + + # Enable touchpad support (enabled default in most desktopManager). + # services.libinput.enable = true; + + # Define a user account. Don't forget to set a password with ‘passwd’. + users.users.allen = { + isNormalUser = true; + extraGroups = [ "wheel" ]; # Enable ‘sudo’ for the user. + shell = pkgs.fish; + home = "/home/allen"; + packages = with pkgs; [ tree ]; + }; + + users.groups.libvirtd.members = [ "allen" ]; + + programs.firefox.enable = true; + + # List packages installed in system profile. + # You can use https://search.nixos.org/ to find more packages (and options). + environment.systemPackages = with pkgs; [ + vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. + pkg-config + wget + openssl + gnome-tweaks + xf86_input_wacom + glfw + wacomtablet + libimobiledevice + ifuse + git + bash + libopus + xmousepasteblock + libglvnd + libGL + openal + inputs.helix.packages."${pkgs.system}".helix + ]; + + nix.settings.experimental-features = [ "nix-command" "flakes" ]; + + environment.sessionVariables = { + LD_LIBRARY_PATH = lib.makeLibraryPath [ + pkgs.libglvnd + pkgs.libGL + pkgs.glfw + pkgs.pulseaudio + ]; + }; + + environment.variables.EDITOR = "vim"; + + services.openssh.enable = true; + + networking.firewall.enable = false; + + system.stateVersion = "25.05"; # Did you read the comment? + +} diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..a6178cd --- /dev/null +++ b/flake.lock @@ -0,0 +1,107 @@ +{ + "nodes": { + "helix": { + "inputs": { + "nixpkgs": "nixpkgs", + "rust-overlay": "rust-overlay" + }, + "locked": { + "lastModified": 1748906842, + "narHash": "sha256-KWpXXXciUDJp2DitQWT8MNzhECBuHA2SRPz51t0bZG0=", + "owner": "helix-editor", + "repo": "helix", + "rev": "1ea9050a5e12a1bc3eeb4b81022f427688c5ffa9", + "type": "github" + }, + "original": { + "owner": "helix-editor", + "ref": "master", + "repo": "helix", + "type": "github" + } + }, + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1748665073, + "narHash": "sha256-RMhjnPKWtCoIIHiuR9QKD7xfsKb3agxzMfJY8V9MOew=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "282e1e029cb6ab4811114fc85110613d72771dea", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "release-25.05", + "repo": "home-manager", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1740560979, + "narHash": "sha256-Vr3Qi346M+8CjedtbyUevIGDZW8LcA1fTG0ugPY/Hic=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "5135c59491985879812717f4c9fea69604e7f26f", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1748889542, + "narHash": "sha256-Hb4iMhIbjX45GcrgOp3b8xnyli+ysRPqAgZ/LZgyT5k=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "10d7f8d34e5eb9c0f9a0485186c1ca691d2c5922", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-25.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "helix": "helix", + "home-manager": "home-manager", + "nixpkgs": "nixpkgs_2" + } + }, + "rust-overlay": { + "inputs": { + "nixpkgs": [ + "helix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1740623427, + "narHash": "sha256-3SdPQrZoa4odlScFDUHd4CUPQ/R1gtH4Mq9u8CBiK8M=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "d342e8b5fd88421ff982f383c853f0fc78a847ab", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..efb45cf --- /dev/null +++ b/flake.nix @@ -0,0 +1,29 @@ +{ + description = "A simple NixOS flake"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.05"; + helix.url = "github:helix-editor/helix/master"; + home-manager = { + url = "github:nix-community/home-manager/release-25.05"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = { self, nixpkgs, home-manager, ... }@inputs: { + nixosConfigurations.haskell = nixpkgs.lib.nixosSystem { + system = "x86_64-linux"; + specialArgs = { inherit inputs; }; + modules = [ + ./configuration.nix + home-manager.nixosModules.home-manager + { + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + + home-manager.users.allen = import ./home.nix; + } + ]; + }; + }; +} diff --git a/hardware-configuration.nix b/hardware-configuration.nix new file mode 100644 index 0000000..b927104 --- /dev/null +++ b/hardware-configuration.nix @@ -0,0 +1,62 @@ +# 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 + "/installer/scan/not-detected.nix") + ]; + + boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usbhid" "usb_storage" "uas" "sd_mod" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelParams = [ "intel_iommu=on" ]; + boot.kernelModules = [ "kvm-intel" "vfio_pci" ]; + boot.extraModulePackages = [ ]; + boot.extraModprobeConfig = '' + options vfio-pci ids=10de:1c81,10de:0fb9 + ''; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/4e08142c-1b09-4265-a497-822e4a83d4c8"; + fsType = "btrfs"; + options = [ "subvol=root" ]; + }; + + fileSystems."/home" = + { device = "/dev/disk/by-uuid/4e08142c-1b09-4265-a497-822e4a83d4c8"; + fsType = "btrfs"; + options = [ "subvol=home" ]; + }; + + fileSystems."/nix" = + { device = "/dev/disk/by-uuid/4e08142c-1b09-4265-a497-822e4a83d4c8"; + fsType = "btrfs"; + options = [ "subvol=nix" ]; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/E808-5876"; + fsType = "vfat"; + options = [ "fmask=0022" "dmask=0022" ]; + }; + + fileSystems."/mnt/hdd1" = + { device = "/dev/disk/by-uuid/EC40940C4093DC20"; + fsType = "ntfs-3g"; + options = [ "rw" "uid=1000" "umask=0022" ]; + }; + + swapDevices = [ ]; + + # 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.enp5s0.useDHCP = lib.mkDefault true; + # networking.interfaces.eth0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/home.nix b/home.nix new file mode 100644 index 0000000..7d68038 --- /dev/null +++ b/home.nix @@ -0,0 +1,36 @@ +{ config, pkgs, ... }: + +{ + imports = [ + ./modules/home/git.nix + ./modules/home/neovim.nix + ./modules/home/obs.nix + ./modules/home/fish.nix + ./modules/home/starship.nix + ./modules/home/alacritty.nix + ./modules/home/bash.nix + ]; + + home.username = "allen"; + home.homeDirectory = "/home/allen"; + + xresources.properties = { + "Xcursor.size" = 16; + "Xft.dpi" = 172; + }; + + home.packages = let + fonts = import ./pkgs/fonts.nix; + minecraft = import ./pkgs/minecraft.nix; + misc = import ./pkgs/misc.nix; + network = import ./pkgs/network.nix; + programming = import ./pkgs/programming.nix; + tools = import ./pkgs/tools.nix; + util = import ./pkgs/util.nix; + in fonts ++ minecraft ++ misc ++ network ++ programming ++ tools ++ util; + + programs.direnv.enable = true; + programs.direnv.nix-direnv.enable = true; + + home.stateVersion = "25.05"; +} diff --git a/modules/home/alacritty.nix b/modules/home/alacritty.nix new file mode 100644 index 0000000..1fd7288 --- /dev/null +++ b/modules/home/alacritty.nix @@ -0,0 +1,17 @@ +{ ... }: { + programs.alacritty = { + enable = true; + # custom settings + settings = { + env.TERM = "alacritty"; + font = { size = 18; }; + window = { + opacity = 1.0; + padding.x = 50; + padding.y = 50; + }; + scrolling.multiplier = 5; + selection.save_to_clipboard = true; + }; + }; +} diff --git a/modules/home/bash.nix b/modules/home/bash.nix new file mode 100644 index 0000000..2617909 --- /dev/null +++ b/modules/home/bash.nix @@ -0,0 +1,6 @@ +{ ... }: { + programs.bash = { + enable = true; + enableCompletion = true; + }; +} diff --git a/modules/home/fish.nix b/modules/home/fish.nix new file mode 100644 index 0000000..2b7f256 --- /dev/null +++ b/modules/home/fish.nix @@ -0,0 +1,32 @@ +{ pkgs, ... }: { + programs.fish = { + enable = true; + shellInit = '' + set -gx PNPM_HOME $HOME/.local/share/pnpm + fish_add_path $PNPM_HOME + set -gx OPENSSL_DIR ${pkgs.openssl.dev}; + set -gx KUBECONFIG $HOME/.kube/config; + set -gx OPENSSL_LIB_DIR ${pkgs.openssl.out}/lib; + set -gx OPENSSL_INCLUDE_DIR ${pkgs.openssl.dev}/include; + set -gx PKG_CONFIG_PATH ${pkgs.openssl.dev}/lib/pkgconfig; + alias vi="nvim" + ''; + plugins = [ + # Enable a plugin (here grc for colorized command output) from nixpkgs + { + name = "grc"; + src = pkgs.fishPlugins.grc.src; + } + # Manually packaging and enable a plugin + { + name = "z"; + src = pkgs.fetchFromGitHub { + owner = "jethrokuan"; + repo = "z"; + rev = "e0e1b9dfdba362f8ab1ae8c1afc7ccf62b89f7eb"; + sha256 = "0dbnir6jbwjpjalz14snzd3cgdysgcs3raznsijd6savad3qhijc"; + }; + } + ]; + }; +} diff --git a/modules/home/git.nix b/modules/home/git.nix new file mode 100644 index 0000000..d73cc14 --- /dev/null +++ b/modules/home/git.nix @@ -0,0 +1,15 @@ +{ ... }: + +{ + programs.git = { + enable = true; + userName = "minco"; + userEmail = "mail@drchi.co.kr"; + extraConfig = { + credential.helper = "store"; + credential.credentialStore = "store"; + init.defaultBranch = "main"; + core.editor = "nvim"; + }; + }; +} diff --git a/modules/home/neovim.nix b/modules/home/neovim.nix new file mode 100644 index 0000000..1ea234e --- /dev/null +++ b/modules/home/neovim.nix @@ -0,0 +1,6 @@ +{ ... }: { + programs.neovim = { + enable = true; + extraConfig = ""; + }; +} diff --git a/modules/home/obs.nix b/modules/home/obs.nix new file mode 100644 index 0000000..e12ba34 --- /dev/null +++ b/modules/home/obs.nix @@ -0,0 +1,10 @@ +{ pkgs, ... }: { + programs.obs-studio = { + enable = true; + plugins = with pkgs.obs-studio-plugins; [ + wlrobs + obs-backgroundremoval + obs-pipewire-audio-capture + ]; + }; +} diff --git a/modules/home/starship.nix b/modules/home/starship.nix new file mode 100644 index 0000000..af6ca5a --- /dev/null +++ b/modules/home/starship.nix @@ -0,0 +1,12 @@ +{ ... }: { + programs.starship = { + enable = true; + # custom settings + settings = { + add_newline = false; + aws.disabled = true; + gcloud.disabled = true; + line_break.disabled = true; + }; + }; +} diff --git a/modules/ld.nix b/modules/ld.nix new file mode 100644 index 0000000..ad280fd --- /dev/null +++ b/modules/ld.nix @@ -0,0 +1,62 @@ +{ pkgs }: + +with pkgs; [ + alsa-lib + at-spi2-atk + at-spi2-core + libz + atk + cairo + cups + curl + dbus + expat + fontconfig + freetype + fuse3 + zlib.dev + gdk-pixbuf + glib + gtk3 + icu + wayland + libGL + libGLU + glfw + glew + libappindicator-gtk3 + libopus + libdrm + libglvnd + libnotify + libpulseaudio + libunwind + libusb1 + libuuid + libxkbcommon + libxml2 + mesa + nspr + nss + openssl + pango + pipewire + stdenv.cc.cc + systemd + vulkan-loader + xorg.libX11 + xorg.libXScrnSaver + xorg.libXcomposite + xorg.libXcursor + xorg.libXdamage + xorg.libXext + xorg.libXfixes + xorg.libXi + xorg.libXrandr + xorg.libXrender + xorg.libXtst + xorg.libxcb + xorg.libxkbfile + xorg.libxshmfence + zlib +] diff --git a/pkgs/fonts.nix b/pkgs/fonts.nix new file mode 100644 index 0000000..14e8e09 --- /dev/null +++ b/pkgs/fonts.nix @@ -0,0 +1,6 @@ +# font as an art + +{ pkgs, ... }: + +with pkgs; +[ nanum ] diff --git a/pkgs/minecraft.nix b/pkgs/minecraft.nix new file mode 100644 index 0000000..2a92873 --- /dev/null +++ b/pkgs/minecraft.nix @@ -0,0 +1,8 @@ +# execute as @e[type=minecraft:cow] at @s summon minecraft:cow run summon minecraft:cow + +{ pkgs, ... }: + +with pkgs; [ + prismlauncher + craftos-pc +] diff --git a/pkgs/misc.nix b/pkgs/misc.nix new file mode 100644 index 0000000..ee8a443 --- /dev/null +++ b/pkgs/misc.nix @@ -0,0 +1,17 @@ +# some misc packages + +{ pkgs, ... }: +with pkgs; [ + cowsay + file + which + htop + tree + gnused + gnutar + pango + libsoup_3 + gawk + zstd + gnupg +] diff --git a/pkgs/network.nix b/pkgs/network.nix new file mode 100644 index 0000000..8bc95dd --- /dev/null +++ b/pkgs/network.nix @@ -0,0 +1,22 @@ +# network tools. maybe with some basic hacking tools. + +{ pkgs, ... }: + +with pkgs; [ + mtr + iperf3 + dnsutils + ldns + aria2 + socat + nmap + ipcalc + wireshark + subfinder + termshark + tcpdump + whois + inetutils + asn + metasploit +] diff --git a/pkgs/programming.nix b/pkgs/programming.nix new file mode 100644 index 0000000..3be6303 --- /dev/null +++ b/pkgs/programming.nix @@ -0,0 +1,33 @@ +# abstraction is beautiful. + +{ pkgs, ... }: + +with pkgs; [ + radare2 + python311Full + uv + unityhub + nodejs + go + binwalk + dotnet-sdk_9 + csharp-ls + gcc + cmake + gnumake + ninja + graalvmPackages.graalvm-ce + pnpm + rustup + go-task + dive + podman-tui + k3s + kind + podman-compose + ghc + haskellPackages.stack + haskellPackages.hpack + haskellPackages.cabal-install + haskellPackages.haskell-language-server +] diff --git a/pkgs/tools.nix b/pkgs/tools.nix new file mode 100644 index 0000000..b3400bf --- /dev/null +++ b/pkgs/tools.nix @@ -0,0 +1,22 @@ +# out-of-the-box cli tools + +{ pkgs, ... }: + +with pkgs; [ + vesktop + youtube-music + thunderbird + yt-dlp + stellarium + blender + blockbench + jetbrains.idea-ultimate + krita + barrier + obsidian + audacity + bitwarden + texlive.combined.scheme-full + hugo + glow +] diff --git a/pkgs/util.nix b/pkgs/util.nix new file mode 100644 index 0000000..f315c7c --- /dev/null +++ b/pkgs/util.nix @@ -0,0 +1,50 @@ +# various linux cli util + +{ pkgs, ... }: + +with pkgs; [ + neofetch + nnn # terminal file manager + + # archives + zip + xz + zlib + unzip + p7zip + + # utils + xclip + openssl + ffmpeg + cloc + piper-tts + pavucontrol + ripgrep + jq + yq-go + git-credential-oauth + git-credential-manager + git-filter-repo + eza + sox + fzf + + nix-output-monitor + nix-index + + btop + iotop + iftop + + strace + ltrace + lsof + + sysstat + lm_sensors + ethtool + pciutils + usbutils + gpick +] diff --git a/services/sound.nix b/services/sound.nix new file mode 100644 index 0000000..0291a28 --- /dev/null +++ b/services/sound.nix @@ -0,0 +1,10 @@ +# sing + +{ ... }: { + services.pipewire = { + enable = true; + pulse.enable = true; + alsa.enable = true; + alsa.support32Bit = true; + }; +} diff --git a/services/virtual.nix b/services/virtual.nix new file mode 100644 index 0000000..ed32e92 --- /dev/null +++ b/services/virtual.nix @@ -0,0 +1,23 @@ +# container and vm config + +{ ... }: { + virtualisation = { + containers.enable = true; + podman = { + enable = true; + dockerCompat = true; + defaultNetwork.settings.dns_enabled = true; + }; + libvirtd.enable = true; + spiceUSBRedirection.enable = true; + }; + + programs.virt-manager.enable = true; + + services.k3s = { + enable = true; + clusterInit = true; + extraFlags = + "--cluster-cidr=10.42.0.0/16,2a10:3781:25ac:2::/64 --service-cidr=10.43.0.0/16,2a10:3781:25ac:3::/112 --flannel-iface enp5s0"; + }; +} diff --git a/services/x.nix b/services/x.nix new file mode 100644 index 0000000..99087b6 --- /dev/null +++ b/services/x.nix @@ -0,0 +1,13 @@ +# X display system config + +{ ... }: { + hardware.graphics.enable = true; + services.xserver.enable = true; + services.xserver.wacom.enable = true; + services.xserver.videoDrivers = [ "nvidia" ]; + hardware.nvidia.open = false; + + services.xserver.displayManager.gdm.enable = true; + services.xserver.desktopManager.gnome.enable = true; + services.xserver.xkb.layout = "us"; +}