{ config, pkgs, lib, stylix, ... }: { imports = [ ./hosts/laptop.nix ]; boot.loader.systemd-boot.enable = true; boot.loader.efi.canTouchEfiVariables = true; services.xserver.displayManager.lightdm.enable = false; networking.hostName = "nixos"; networking.networkmanager.enable = true; networking.networkmanager.unmanaged = [ "interface-name:ve-*" ]; networking.networkmanager.dns = "none"; networking.useHostResolvConf = true; services.udisks2.enable = true; security.pam.services.swaylock = { }; virtualisation.vmVariant = { virtualisation = { memorySize = 8192; cores = 4; }; virtualisation.qemu.options = [ "-device virtio-vga-gl" "-display gtk,gl=on" ]; }; stylix.image = ./wallpaper.png; stylix.polarity = "dark"; stylix.base16Scheme = "${pkgs.base16-schemes}/share/themes/monokai.yaml"; stylix.fonts = { serif = { package = pkgs.noto-fonts-cjk-sans; name = "Noto Sans CJK JP"; }; sansSerif = { package = pkgs.noto-fonts-cjk-sans; name = "Noto Sans CJK JP"; }; monospace = { package = pkgs.maple-mono-NF; name = "MapleMono-NF"; }; emoji = { package = pkgs.noto-fonts-emoji; name = "Noto Color Emoji"; }; sizes = { applications = 11; desktop = 11; popups = 11; terminal = 11; }; }; environment.sessionVariables = { EDITOR = "nvim"; VISUAL = "nvim"; GIT_DISCOVERY_ACROSS_FILESYSTEM = "1"; FZF_DEFAULT_COMMAND = "rg --files --no-ignore --hidden --follow --glob \"!.git/*\""; FZF_DEFAULT_OPTS = "--height 40% --reverse --border --color=16"; NODE_OPTIONS = "--max_old_space_size=16384"; }; services.vnstat.enable = true; services.tumbler.enable = true; security.rtkit.enable = true; services.pipewire = { enable = true; alsa.enable = true; alsa.support32Bit = true; pulse.enable = true; jack.enable = true; }; programs.fish.enable = true; users.defaultUserShell = pkgs.fish; environment.shells = with pkgs; [ fish ]; programs.fish.shellAliases = { ls = "exa --group-directories-first -I 'lost+found'"; tree = "exa --group-directories-first --all --long --tree -I 'node_modules|.git|public|lost+found'"; mv = "mv -i"; rg = "rg --max-columns=2000"; }; programs.fish.shellAbbrs = { g = "git"; ga = "git add"; gaa = "git add --all"; gap = "git add --patch"; gb = "git branch"; # List all branches gc = "git commit -m"; gca = "git commit --amend"; gcl = "git clone"; gco = "git checkout"; gd = "git diff"; # Show all file changes not staged yet gdi = "git difftool --no-symlinks --dir-diff"; gds = "git diff --staged"; # Show changes staged but not committed gdsi = "git difftool --no-symlinks --dir-diff --staged"; gi = "git init"; gl = "git log --oneline --decorate --all --graph -n 10"; gm = "git merge"; gp = "git push"; # Push your commits to a remote server gr = "git reset HEAD~"; # Undo the last commit but keep changed files gra = "git remote add"; gre = "git remote --verbose"; # List all remotes grh = "git reset HEAD"; grr = "git reset --hard HEAD~"; # Remove the last commit and all changes with it gs = "git status"; gst = "git stash"; gstp = "git stash pop"; gt = "git tag"; gts = "git tag -s"; d = "sudo docker"; dc = "sudo docker-compose"; dcu = "sudo docker-compose up"; dcd = "sudo docker-compose down"; dcp = "sudo docker-compose pull"; dcl = "sudo docker-compose logs"; y = "yarn"; ya = "yarn add"; yar = "yarn remove"; yi = "yarn init"; yin = "yarn install"; yu = "yarn upgrade-interactive"; v = "vagrant"; vu = "vagrant up"; vh = "vagrant halt"; vs = "vagrant ssh"; vp = "vagrant provision"; dl = "yt-dlp"; vol = "wpctl set-volume '@DEFAULT_AUDIO_SINK@'"; # Change the volume, e.g. vol 10%+, vol 10%-, vol 100% cf = "tput reset"; # Clear the terminal completely nf = "tput reset; and neofetch --size 56%"; df = "df --human-readable --type=ext4 --total"; du = "du --human-readable --summarize"; jis = "recode shift_jis..utf8"; # Easily convert shift_jis-encoded files to utf8 utf16 = "recode utf16..utf8"; # Rarely, some files from Japan are utf16 instead jp = "LANG=ja_JP.UTF-8 LC_ALL=ja_JP.UTF-8"; a = "ansible-playbook"; b = "swaybg -m fill -i"; # Change the background c = "clear"; # Because 5 letters is too much e = "exit"; k = "kitty @ set-colors -c -a ~/.cache/wal/kitty"; l = "ls -l"; r = "ranger"; w = "wal -o ~/.config/wal/done.sh"; T = "tree"; }; time.timeZone = "America/New_York"; i18n.defaultLocale = "en_US.UTF-8"; i18n.supportedLocales = [ "en_US.UTF-8/UTF-8" "ja_JP.UTF-8/UTF-8" "fr_FR.UTF-8/UTF-8" ]; services.xserver.enable = true; programs.thunar.enable = true; programs.starship = { enable = true; settings = { add_newline = false; directory = { style = "purple"; read_only = " ro"; }; git_branch = { style = "yellow"; symbol = ""; }; character = { success_symbol = "[>](red)[>](green)[>](blue)"; error_symbol = "[>](cyan)[>](purple)[>](yellow)"; vicmd_symbol = "[<](bold green)"; }; line_break = { disabled = true; }; nodejs = { format = "with [$symbol($version )]($style)"; symbol = "node "; version_format = "\${major}"; disabled = true; }; git_commit.tag_symbol = " tag "; git_status = { ahead = ">"; behind = "<"; diverged = "<>"; renamed = "r"; deleted = "x"; }; aws.symbol = "aws "; cobol.symbol = "cobol "; conda.symbol = "conda "; crystal.symbol = "cr "; cmake.symbol = "cmake "; dart.symbol = "dart "; deno.symbol = "deno "; dotnet.symbol = ".NET "; docker_context.symbol = "docker "; elixir.symbol = "exs "; elm.symbol = "elm "; golang.symbol = "go "; hg_branch.symbol = "hg "; java.symbol = "java "; julia.symbol = "jl "; kotlin.symbol = "kt "; memory_usage.symbol = "memory "; nim.symbol = "nim "; nix_shell.symbol = "nix "; ocaml.symbol = "ml "; package.symbol = "pkg "; perl.symbol = "pl "; php.symbol = "php "; purescript.symbol = "purs "; python.symbol = "python "; ruby.symbol = "ruby "; rust.symbol = "rust "; scala.symbol = "scala "; swift.symbol = "swift "; }; }; programs.neovim.enable = true; programs.htop = { enable = true; package = pkgs."htop-vim"; settings = { tree_view = 1; }; }; programs.firejail.enable = true; nix.package = pkgs.nixFlakes; nix.settings.experimental-features = [ "nix-command" "flakes" ]; environment.systemPackages = with pkgs; [ fluent-icon-theme fluent-gtk-theme maple-mono-NF tmux fish wget grim slurp librewolf kitty mullvad-vpn mullvad-browser papirus-icon-theme mediainfo pywal mpv neofetch anki logseq wl-clipboard sox spek ripgrep rsync jq keepassxc feh stow lf exa fd fzf unar gdu ranger nixfmt whois wofi rofi-wayland tig diff-so-fancy trashy swaybg udiskie brightnessctl killall ]; fonts.enableDefaultFonts = true; fonts.fonts = with pkgs; [ noto-fonts noto-fonts-cjk-sans noto-fonts-cjk-serif noto-fonts-emoji hack-font maple-mono-NF ]; fonts.fontconfig = { defaultFonts = { serif = [ "Noto Serif CJK JP" "Noto Serif" ]; sansSerif = [ "Noto Sans CJK JP" "Noto Sans" ]; monospace = [ "Noto Mono CJK JP" "Noto Mono" ]; }; }; fonts.fontconfig.hinting.style = "hintfull"; fonts.fontconfig.allowBitmaps = false; i18n.inputMethod.enabled = "fcitx5"; i18n.inputMethod.fcitx5.addons = [ pkgs.fcitx5-mozc ]; services.mullvad-vpn.enable = true; services.mullvad-vpn.enableExcludeWrapper = false; networking.networkmanager.wifi.macAddress = "random"; networking.networkmanager.ethernet.macAddress = "random"; services.resolved.llmnr = "false"; environment.defaultPackages = [ ]; services.xserver.excludePackages = [ pkgs.xterm ]; # Force containers to use mullvad networking.nat.enable = true; networking.nat.internalInterfaces = [ "ve-+" ]; networking.nat.externalInterface = "wg-mullvad"; services.interception-tools = { enable = true; plugins = [ pkgs.interception-tools-plugins.dual-function-keys ]; udevmonConfig = '' - JOB: "${pkgs.interception-tools}/bin/intercept -g $DEVNODE | ${pkgs.interception-tools-plugins.dual-function-keys}/bin/dual-function-keys -c /etc/dual-function-keys.yaml | ${pkgs.interception-tools}/bin/uinput -d $DEVNODE" DEVICE: EVENTS: EV_KEY: [KEY_CAPSLOCK, KEY_ESC] ''; }; environment.etc."dual-function-keys.yaml".text = '' TIMING: - TAP_MILLISEC: 1000 - DOUBLE_TAP_MILLISEC: 0 MAPPINGS: - KEY: KEY_CAPSLOCK TAP: KEY_ESC HOLD: KEY_LEFTCTRL - KEY: KEY_SYSRQ TAP: KEY_SYSRQ HOLD: KEY_RIGHTMETA ''; containers.test = let hostCfg = config; in { autoStart = false; privateNetwork = true; hostAddress = "192.168.100.10"; localAddress = "192.168.100.11"; bindMounts = { waylandDisplay = rec { hostPath = "/run/user/1000"; mountPoint = hostPath; }; }; config = { config, pkgs, ... }: { programs.fish.enable = true; users.defaultUserShell = pkgs.fish; environment.shells = with pkgs; [ fish ]; programs.npm.enable = true; nix.package = pkgs.nixFlakes; nix.settings.experimental-features = [ "nix-command" "flakes" ]; programs.neovim.enable = true; environment.systemPackages = with pkgs; [ p7zip kitty git unzip ripgrep gcc trashy mullvad-browser alacritty logseq feh wget exa fd fzf gdu ranger wofi lf ]; environment.variables = { TERM = "xterm-kitty"; }; environment.sessionVariables = { WAYLAND_DISPLAY = "wayland-1"; QT_QPA_PLATFORM = "wayland"; QT_WAYLAND_DISABLE_WINDOWDECORATION = "1"; SDL_VIDEODRIVER = "wayland"; CLUTTER_BACKEND = "wayland"; MOZ_ENABLE_WAYLAND = "1"; XDG_RUNTIME_DIR = "/run/user/1000"; DISPLAY = ":1"; }; services.xserver.enable = true; hardware.opengl = { enable = true; extraPackages = hostCfg.hardware.opengl.extraPackages; }; users.mutableUsers = false; users.allowNoPasswordLogin = true; users.users.user = { isNormalUser = true; home = "/home/user"; }; environment.defaultPackages = [ ]; system.stateVersion = "22.11"; }; }; system.stateVersion = "22.11"; }