{ self, pkgs, lib, hostname, user, ... }: with lib; { # NixOS version. system.stateVersion = "25.05"; # Set $NIX_PATH to flake input. nix.nixPath = ["nixpkgs=${self.inputs.nixpkgs}"]; # Enable flakes. nix.settings.experimental-features = [ "nix-command" "flakes" ]; # Enable redistributable firmware. hardware.enableRedistributableFirmware = true; # Set time zone. time.timeZone = "Australia/Perth"; # Select internationalisation properties. i18n.defaultLocale = "en_AU.UTF-8"; i18n.extraLocaleSettings = { LC_ADDRESS = "en_AU.UTF-8"; LC_IDENTIFICATION = "en_AU.UTF-8"; LC_MEASUREMENT = "en_AU.UTF-8"; LC_MONETARY = "en_AU.UTF-8"; LC_NAME = "en_AU.UTF-8"; LC_NUMERIC = "en_AU.UTF-8"; LC_PAPER = "en_AU.UTF-8"; LC_TELEPHONE = "en_AU.UTF-8"; LC_TIME = "en_AU.UTF-8"; }; # Configure keymap in X11. services.xserver.xkb = { layout = "us"; variant = ""; }; # Enable networking. networking.networkmanager.enable = true; # Set hostname networking.hostName = hostname; # Define a user account. users.users.${user} = { isNormalUser = true; description = mkIf (user == "fern") "Fern Garden"; extraGroups = [ "wheel" "networkmanager" ]; }; # Use fish shell programs.fish = { enable = true; interactiveShellInit = '' function n --wraps nnn --description 'support nnn quit and change directory' if test -n "$NNNLVL" -a "$NNNLVL" -ge 1 echo "nnn is already running" return end if test -n "$XDG_CONFIG_HOME" set -x NNN_TMPFILE "$XDG_CONFIG_HOME/nnn/.lastd" else set -x NNN_TMPFILE "$HOME/.config/nnn/.lastd" end command ${pkgs.nnn}/bin/nnn $argv if test -e $NNN_TMPFILE source $NNN_TMPFILE rm -- $NNN_TMPFILE end end ''; }; programs.bash = { interactiveShellInit = '' if [[ $(${pkgs.procps}/bin/ps --no-header --pid=$PPID --format=comm) != "fish" && -z ''${BASH_EXECUTION_STRING} ]] then shopt -q login_shell && LOGIN_OPTION='--login' || LOGIN_OPTION="" exec ${pkgs.fish}/bin/fish $LOGIN_OPTION fi ''; }; # https://nixos.wiki/wiki/Fish#Setting_fish_as_your_shell # Install some packages. programs.git.enable = true; programs.lazygit.enable = true; programs.nixvim = { enable = true; globals.mapleader = " "; keymaps = [ { key = "t"; action = " ToggleTerm direction=float "; mode = "n"; options = { silent = true; desc = "Open floating terminal."; }; } { key = "e"; action = " Neotree toggle "; mode = "n"; options.desc = "Show/hide file browser."; } { key = "ff"; action = " Telescope fd "; mode = "n"; options.desc = "Find files."; } ]; colorschemes.kanagawa = { enable = true; settings = { background.dark = "dragon"; colors.theme.all.ui.bg_gutter = "none"; overrides = '' function(colors) local theme = colors.theme return { NormalFloat = { bg = "none" }, FloatBorder = { bg = "none" }, FloatTitle = { bg = "none" }, TelescopeTitle = { fg = theme.ui.special, bold = true }, TelescopePromptNormal = { bg = theme.ui.bg_p1 }, TelescopePromptBorder = { fg = theme.ui.bg_p1, bg = theme.ui.bg_p1 }, TelescopeResultsNormal = { fg = theme.ui.fg_dim, bg = theme.ui.bg_m1 }, TelescopeResultsBorder = { fg = theme.ui.bg_m1, bg = theme.ui.bg_m1 }, TelescopePreviewNormal = { bg = theme.ui.bg_dim }, TelescopePreviewBorder = { bg = theme.ui.bg_dim, fg = theme.ui.bg_dim }, Pmenu = { fg = theme.ui.shade0, bg = theme.ui.bg_p1 }, -- add `blend = vim.o.pumblend` to enable transparency PmenuSel = { fg = "NONE", bg = theme.ui.bg_p2 }, PmenuSbar = { bg = theme.ui.bg_m1 }, PmenuThumb = { bg = theme.ui.bg_p2 }, } end, ''; }; }; opts = rec { shiftwidth = 2; tabstop = shiftwidth; softtabstop = shiftwidth; expandtab = true; number = true; cursorline = true; undofile = true; clipboard = "unnamedplus"; }; clipboard.providers.wl-copy.enable = true; plugins = { blink-cmp = { enable = true; settings = { keymap.preset = "enter"; menu.auto_show = true; completion.documentation.auto_show = true; }; }; bufferline.enable = true; colorizer.enable = true; gitsigns.enable = true; lsp-format.enable = true; neo-tree.enable = true; notify.enable = true; nvim-autopairs.enable = true; telescope.enable = true; trouble.enable = true; toggleterm.enable = true; web-devicons.enable = true; which-key.enable = true; lualine = { enable = true; settings.options.theme = "auto"; }; lsp = { enable = true; inlayHints = true; servers = { nixd = { enable = true; settings.formatting.command = ["alejandra"]; settings.options.nixos.expr = "(builtins.getFlake (builtins.toString /home/fern/Repositories/flock)).nixosConfigurations.muskduck.options"; }; }; }; treesitter = { enable = true; settings = { highlight.enable = true; incremental_selection.enable = true; indent.enable = true; }; }; }; }; environment.systemPackages = with pkgs; [ aria2 btop lynx ncdu nnn rsync tmux trash-cli ]; # Enable avahi hostname resolution. services.avahi = { enable = true; nssmdns4 = true; }; }