commit 9a525dadfcd97411d4a72370f0f212dc263447d9 Author: System administrator Date: Wed Dec 25 10:59:37 2024 +0800 init repo diff --git a/configuration.nix b/configuration.nix new file mode 100644 index 0000000..e5ad879 --- /dev/null +++ b/configuration.nix @@ -0,0 +1,242 @@ +# Edit this configuration file to define what should be installed on +# your system. Help is available in the configuration.nix(5) man page +# and in the NixOS manual (accessible by running ‘nixos-help’). + +{ + pkgs, + config, + inputs, + ... +}: + +{ + imports = [ + # Include the results of the hardware scan. + ./hardware-configuration.nix + ]; + + # Bootloader. + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + + hardware.graphics = { + enable = true; + }; + + services.xserver.videoDrivers = [ + "nvidia" + ]; + services.asusd = { + enable = true; + }; + + hardware.nvidia = { + modesetting.enable = true; + + powerManagement.enable = false; + powerManagement.finegrained = false; + + open = false; + nvidiaSettings = true; + + package = config.boot.kernelPackages.nvidiaPackages.beta; + + prime = { + sync.enable = true; + intelBusId = "PCI:0:2:0"; + nvidiaBusId = "PCI:1:0:0"; + }; + }; + + networking.hostName = "Tytonidae"; # Define your hostname. + # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. + + # Configure network proxy if necessary + # networking.proxy.default = "http://user:password@proxy:port/"; + # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; + + # Enable networking + networking.networkmanager.enable = true; + + # Set your time zone. + time.timeZone = "Asia/Shanghai"; + + # Select internationalisation properties. + i18n.defaultLocale = "zh_CN.UTF-8"; + + i18n.extraLocaleSettings = { + LC_ADDRESS = "zh_CN.UTF-8"; + LC_IDENTIFICATION = "zh_CN.UTF-8"; + LC_MEASUREMENT = "zh_CN.UTF-8"; + LC_MONETARY = "zh_CN.UTF-8"; + LC_NAME = "zh_CN.UTF-8"; + LC_NUMERIC = "zh_CN.UTF-8"; + LC_PAPER = "zh_CN.UTF-8"; + LC_TELEPHONE = "zh_CN.UTF-8"; + LC_TIME = "zh_CN.UTF-8"; + }; + + i18n.inputMethod = { + enable = true; + type = "fcitx5"; + fcitx5 = { + addons = with pkgs; [ + libsForQt5.fcitx5-qt + fcitx5-gtk + fcitx5-configtool + fcitx5-chinese-addons + (fcitx5-rime.override { + rimeDataPkgs = [ + rime-data + nur.repos.xddxdd.rime-ice + nur.repos.xddxdd.rime-zhwiki + nur.repos.xddxdd.rime-moegirl + ]; + }) + ]; + waylandFrontend = true; + }; + }; + + # Enable the X11 windowing system. + # You can disable this if you're only using the Wayland session. + services.xserver.enable = true; + + # Enable the KDE Plasma Desktop Environment. + # services.displayManager.sddm.enable = true; + # services.desktopManager.plasma6.enable = true; + services.desktopManager.cosmic.enable = true; + services.displayManager.cosmic-greeter.enable = true; + + # Configure keymap in X11 + services.xserver.xkb = { + layout = "cn"; + variant = ""; + }; + + # Enable CUPS to print documents. + services.printing.enable = true; + + services.openssh = { + enable = true; + settings = { + PasswordAuthentication = false; + KbdInteractiveAuthentication = false; + X11Forwarding = true; + PermitRootLogin = "no"; + LogLevel = "VERBOSE"; + Macs = [ + "hmac-sha2-512-etm@openssh.com" + "hmac-sha2-256-etm@openssh.com" + "umac-128-etm@openssh.com" + "hmac-sha2-512" + "hmac-sha2-256" + "umac-128@openssh.com" + ]; + Ciphers = [ + "chacha20-poly1305@openssh.com" + "aes256-gcm@openssh.com" + "aes128-gcm@openssh.com" + "aes256-ctr" + "aes192-ctr" + "aes128-ctr" + ]; + KexAlgorithms = [ + "curve25519-sha256@libssh.org" + "ecdh-sha2-nistp521" + "ecdh-sha2-nistp384" + "ecdh-sha2-nistp256" + "diffie-hellman-group-exchange-sha256" + ]; + }; + ports = [ 3022 ]; + }; + + programs.localsend.enable = true; + + # Enable sound with pipewire. + hardware.pulseaudio.enable = false; + security.rtkit.enable = true; + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + # If you want to use JACK applications, uncomment this + #jack.enable = true; + + # use the example session manager (no others are packaged yet so this is enabled by default, + # no need to redefine it in your config for now) + #media-session.enable = true; + }; + + # Enable touchpad support (enabled default in most desktopManager). + # services.xserver.libinput.enable = true; + + # Define a user account. Don't forget to set a password with ‘passwd’. + users.users.david = { + isNormalUser = true; + description = "david"; + extraGroups = [ + "networkmanager" + "wheel" + ]; + # packages = with pkgs; [ + # kdePackages.kate + # # thunderbird + # ]; + }; + + # Install firefox. + programs.firefox.enable = true; + + # Allow unfree packages + nixpkgs.config.allowUnfree = true; + + # List packages installed in system profile. To search, run: + # $ nix search wget + environment.systemPackages = with pkgs; [ + wget + git + vim + inputs.helix.packages."${pkgs.system}".default + nixd + nixfmt-rfc-style + noto-fonts-cjk-sans + noto-fonts-cjk-serif + ]; + + environment.variables.EDITOR = "hx"; + # Some programs need SUID wrappers, can be configured further or are + # started in user sessions. + # programs.mtr.enable = true; + # programs.gnupg.agent = { + # enable = true; + # enableSSHSupport = true; + # }; + + # List services that you want to enable: + + # Enable the OpenSSH daemon. + # services.openssh.enable = true; + + # Open ports in the firewall. + # networking.firewall.allowedTCPPorts = [ ... ]; + # networking.firewall.allowedUDPPorts = [ ... ]; + # Or disable the firewall altogether. + # networking.firewall.enable = false; + + # This value determines the NixOS release from which the default + # settings for stateful data, like file locations and database versions + # on your system were taken. It‘s perfectly fine and recommended to leave + # this value at the release version of the first install of this system. + # Before changing this value read the documentation for this option + # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). + + nix.settings.experimental-features = [ + "nix-command" + "flakes" + ]; + + system.stateVersion = "24.11"; # Did you read the comment? +} diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..f901446 --- /dev/null +++ b/flake.lock @@ -0,0 +1,864 @@ +{ + "nodes": { + "crane": { + "locked": { + "lastModified": 1727974419, + "narHash": "sha256-WD0//20h+2/yPGkO88d2nYbb23WMWYvnRyDQ9Dx4UHg=", + "owner": "ipetkov", + "repo": "crane", + "rev": "37e4f9f0976cb9281cd3f0c70081e5e0ecaee93f", + "type": "github" + }, + "original": { + "owner": "ipetkov", + "repo": "crane", + "type": "github" + } + }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1717312683, + "narHash": "sha256-FrlieJH50AuvagamEvWMIE6D2OAnERuDboFDYAED/dE=", + "owner": "nix-community", + "repo": "flake-compat", + "rev": "38fd3954cf65ce6faf3d0d45cd26059e059f07ea", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_2": { + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "revCount": 57, + "type": "tarball", + "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.0.1/018afb31-abd1-7bff-a5e4-cff7e18efb7a/source.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz" + } + }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": [ + "nur", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1733312601, + "narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_2": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1727826117, + "narHash": "sha256-K5ZLCyfO/Zj9mPFldf3iwS6oZStJcU4tSpiXTMYaaL0=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "3d04084d54bedc3d6b8b736c70ef449225c361b1", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1726560853, + "narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_2": { + "inputs": { + "systems": "systems_3" + }, + "locked": { + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_3": { + "inputs": { + "systems": "systems_4" + }, + "locked": { + "lastModified": 1726560853, + "narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "freetype2": { + "flake": false, + "locked": { + "lastModified": 1687587065, + "narHash": "sha256-+Fh+/k+NWL5Ow9sDLtp8Cv/8rLNA1oByQQCIQS/bysY=", + "owner": "wez", + "repo": "freetype2", + "rev": "e4586d960f339cf75e2e0b34aee30a0ed8353c0d", + "type": "github" + }, + "original": { + "owner": "wez", + "repo": "freetype2", + "rev": "e4586d960f339cf75e2e0b34aee30a0ed8353c0d", + "type": "github" + } + }, + "harfbuzz": { + "flake": false, + "locked": { + "lastModified": 1711722720, + "narHash": "sha256-GdxcAPx5QyniSHPAN1ih28AD9JLUPR0ItqW9JEsl3pU=", + "owner": "harfbuzz", + "repo": "harfbuzz", + "rev": "63973005bc07aba599b47fdd4cf788647b601ccd", + "type": "github" + }, + "original": { + "owner": "harfbuzz", + "ref": "8.4.0", + "repo": "harfbuzz", + "type": "github" + } + }, + "helix": { + "inputs": { + "crane": "crane", + "flake-utils": "flake-utils", + "nixpkgs": [ + "nixpkgs" + ], + "rust-overlay": "rust-overlay" + }, + "locked": { + "lastModified": 1735007176, + "narHash": "sha256-mSOyNzD0ie1q6KdktAwXD0mBGmcb41BEF0UqLmuvFEE=", + "owner": "helix-editor", + "repo": "helix", + "rev": "9e77c44b38e6e30431fc80e2b011f45f288f2be5", + "type": "github" + }, + "original": { + "owner": "helix-editor", + "ref": "master", + "repo": "helix", + "type": "github" + } + }, + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1734992499, + "narHash": "sha256-f9UyHMTb+BwF6RDZ8eO9HOkSlKeeSPBlcYhMmV1UNIk=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "f1b1786ea77739dcd181b920d430e30fb1608b8a", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "home-manager_2": { + "inputs": { + "nixpkgs": [ + "oskars-dotfiles", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1731880681, + "narHash": "sha256-FmYTkIyPBUxSWgA7DPIVTsCCMvSSbs56yOtHpLNSnKg=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "aecd341dfead1c3ef7a3c15468ecd71e8343b7c6", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "release-24.11", + "repo": "home-manager", + "type": "github" + } + }, + "libpng": { + "flake": false, + "locked": { + "lastModified": 1549245649, + "narHash": "sha256-1+cRp0Ungme/OGfc9kGJbklYIWAFxk8Il1M+NV4KSgw=", + "owner": "glennrp", + "repo": "libpng", + "rev": "8439534daa1d3a5705ba92e653eda9251246dd61", + "type": "github" + }, + "original": { + "owner": "glennrp", + "repo": "libpng", + "rev": "8439534daa1d3a5705ba92e653eda9251246dd61", + "type": "github" + } + }, + "musnix": { + "inputs": { + "nixpkgs": "nixpkgs" + }, + "locked": { + "lastModified": 1734848678, + "narHash": "sha256-HtGPXGyzOsHJLq6nwvBV763y6l7fC9FuWIM0hNh1Y6E=", + "owner": "musnix", + "repo": "musnix", + "rev": "e76b3cdd23d49a11210a551f8ea4d49d7022e639", + "type": "github" + }, + "original": { + "owner": "musnix", + "repo": "musnix", + "type": "github" + } + }, + "nix-citizen": { + "inputs": { + "nix-gaming": [ + "oskars-dotfiles", + "nix-gaming" + ], + "nix-github-actions": "nix-github-actions", + "nixpkgs": [ + "oskars-dotfiles", + "nixpkgs-unstable" + ], + "nixpkgs-wine": "nixpkgs-wine", + "systems": "systems_2", + "treefmt-nix": "treefmt-nix_2" + }, + "locked": { + "lastModified": 1731422383, + "narHash": "sha256-xSFuMAgozwnM4sllEab9HmKuYesZ5JZrlxwUP6+UNn8=", + "owner": "LovingMelody", + "repo": "nix-citizen", + "rev": "08463670bd3651795593d76581f54eec5f78c831", + "type": "github" + }, + "original": { + "owner": "LovingMelody", + "repo": "nix-citizen", + "type": "github" + } + }, + "nix-gaming": { + "inputs": { + "flake-parts": "flake-parts_2", + "nixpkgs": [ + "oskars-dotfiles", + "nixpkgs-unstable" + ], + "umu": "umu" + }, + "locked": { + "lastModified": 1730186798, + "narHash": "sha256-rGrhFuH3d869rG1cmfuuuPksKyCJUfkBTenQbtnlsr8=", + "owner": "fufexan", + "repo": "nix-gaming", + "rev": "8756862665662edad5bbb098d0cba727cde57fec", + "type": "github" + }, + "original": { + "owner": "fufexan", + "repo": "nix-gaming", + "rev": "8756862665662edad5bbb098d0cba727cde57fec", + "type": "github" + } + }, + "nix-github-actions": { + "inputs": { + "nixpkgs": [ + "oskars-dotfiles", + "nix-citizen", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1729742964, + "narHash": "sha256-B4mzTcQ0FZHdpeWcpDYPERtyjJd/NIuaQ9+BV1h+MpA=", + "owner": "nix-community", + "repo": "nix-github-actions", + "rev": "e04df33f62cdcf93d73e9a04142464753a16db67", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nix-github-actions", + "type": "github" + } + }, + "nixos-cosmic": { + "inputs": { + "flake-compat": "flake-compat", + "nixpkgs": "nixpkgs_2", + "nixpkgs-stable": "nixpkgs-stable", + "rust-overlay": "rust-overlay_2" + }, + "locked": { + "lastModified": 1735004289, + "narHash": "sha256-cJmBhr59xQXwkvF+EZPhKTebgHyqXoei8u2Qq2QJYzE=", + "owner": "lilyinstarlight", + "repo": "nixos-cosmic", + "rev": "b9bfb93c7632a0e007a3a05fe77c0475d05e045a", + "type": "github" + }, + "original": { + "owner": "lilyinstarlight", + "repo": "nixos-cosmic", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1734424634, + "narHash": "sha256-cHar1vqHOOyC7f1+tVycPoWTfKIaqkoe1Q6TnKzuti4=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "d3c42f187194c26d9f0309a8ecc469d6c878ce33", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib": { + "locked": { + "lastModified": 1727825735, + "narHash": "sha256-0xHYkMkeLVQAMa7gvkddbPqpxph+hDzdu1XdGPJR+Os=", + "type": "tarball", + "url": "https://github.com/NixOS/nixpkgs/archive/fb192fec7cc7a4c26d51779e9bab07ce6fa5597a.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://github.com/NixOS/nixpkgs/archive/fb192fec7cc7a4c26d51779e9bab07ce6fa5597a.tar.gz" + } + }, + "nixpkgs-stable": { + "locked": { + "lastModified": 1734875076, + "narHash": "sha256-Pzyb+YNG5u3zP79zoi8HXYMs15Q5dfjDgwCdUI5B0nY=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "1807c2b91223227ad5599d7067a61665c52d1295", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-24.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-unstable": { + "locked": { + "lastModified": 1731676054, + "narHash": "sha256-OZiZ3m8SCMfh3B6bfGC/Bm4x3qc1m2SVEAlkV6iY7Yg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "5e4fbfb6b3de1aa2872b76d49fafc942626e2add", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-wine": { + "locked": { + "lastModified": 1729519156, + "narHash": "sha256-/T/nMj4oOfiyhiBol4Bzh2EYdJunNo8zXzBoR8vVChY=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "03ddbd42cbdfbca5ce5583a8c1b526f36c0d46f3", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "03ddbd42cbdfbca5ce5583a8c1b526f36c0d46f3", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1734649271, + "narHash": "sha256-4EVBRhOjMDuGtMaofAIqzJbg4Ql7Ai0PSeuVZTHjyKQ=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "d70bd19e0a38ad4790d3913bf08fcbfc9eeca507", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1734649271, + "narHash": "sha256-4EVBRhOjMDuGtMaofAIqzJbg4Ql7Ai0PSeuVZTHjyKQ=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "d70bd19e0a38ad4790d3913bf08fcbfc9eeca507", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nur": { + "inputs": { + "flake-parts": "flake-parts", + "nixpkgs": [ + "nixpkgs" + ], + "treefmt-nix": "treefmt-nix" + }, + "locked": { + "lastModified": 1735016833, + "narHash": "sha256-TCRPRQwSOH6MpzT5ammZ6WPlTZI7X/utb4zbfpKRmZc=", + "owner": "nix-community", + "repo": "NUR", + "rev": "de911159a966fefa1ae88a9ab6da365e134103c8", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "NUR", + "type": "github" + } + }, + "nur_2": { + "locked": { + "lastModified": 1731941414, + "narHash": "sha256-2Xf90oIkzvOjzZBIgLxga6DqidvB6CSODE5+DODfLeI=", + "owner": "nix-community", + "repo": "NUR", + "rev": "23a30a846dc89a997f42f2d7e64d6f38564014ae", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "NUR", + "type": "github" + } + }, + "oskars-dotfiles": { + "inputs": { + "home-manager": "home-manager_2", + "nix-citizen": "nix-citizen", + "nix-gaming": "nix-gaming", + "nixpkgs": [ + "nixpkgs" + ], + "nixpkgs-unstable": "nixpkgs-unstable", + "nur": "nur_2", + "rust-overlay": "rust-overlay_3", + "winapps": "winapps", + "zen-browser": "zen-browser" + }, + "locked": { + "lastModified": 1733907511, + "narHash": "sha256-9ERM2ihW8Z3Jb9ZsPqSxI7GCTeJcW5jDl/Q39FZcGIo=", + "owner": "oskardotglobal", + "repo": ".dotfiles", + "rev": "77a46fb1a4b42ef9b7d35c6fa6b5be5d6545c066", + "type": "github" + }, + "original": { + "owner": "oskardotglobal", + "ref": "nix", + "repo": ".dotfiles", + "type": "github" + } + }, + "root": { + "inputs": { + "helix": "helix", + "home-manager": "home-manager", + "musnix": "musnix", + "nixos-cosmic": "nixos-cosmic", + "nixpkgs": "nixpkgs_3", + "nur": "nur", + "oskars-dotfiles": "oskars-dotfiles", + "wezterm": "wezterm" + } + }, + "rust-overlay": { + "inputs": { + "nixpkgs": [ + "helix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1728268235, + "narHash": "sha256-lJMFnMO4maJuNO6PQ5fZesrTmglze3UFTTBuKGwR1Nw=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "25685cc2c7054efc31351c172ae77b21814f2d42", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "rust-overlay_2": { + "inputs": { + "nixpkgs": [ + "nixos-cosmic", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1734834660, + "narHash": "sha256-bm8V+Cu8rWJA+vKQnc94mXTpSDgvedyoDKxTVi/uJfw=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "b070e6030118680977bc2388868c4b3963872134", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "rust-overlay_3": { + "inputs": { + "nixpkgs": [ + "oskars-dotfiles", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1731897198, + "narHash": "sha256-Ou7vLETSKwmE/HRQz4cImXXJBr/k9gp4J4z/PF8LzTE=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "0be641045af6d8666c11c2c40e45ffc9667839b5", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "rust-overlay_4": { + "inputs": { + "nixpkgs": [ + "wezterm", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1729477859, + "narHash": "sha256-r0VyeJxy4O4CgTB/PNtfQft9fPfN1VuGvnZiCxDArvg=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "ada8266712449c4c0e6ee6fcbc442b3c217c79e1", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_2": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_3": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_4": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "nur", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1733222881, + "narHash": "sha256-JIPcz1PrpXUCbaccEnrcUS8jjEb/1vJbZz5KkobyFdM=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "49717b5af6f80172275d47a418c9719a31a78b53", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt-nix_2": { + "inputs": { + "nixpkgs": [ + "oskars-dotfiles", + "nix-citizen", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1730321837, + "narHash": "sha256-vK+a09qq19QNu2MlLcvN4qcRctJbqWkX7ahgPZ/+maI=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "746901bb8dba96d154b66492a29f5db0693dbfcc", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "umu": { + "inputs": { + "nixpkgs": [ + "oskars-dotfiles", + "nix-gaming", + "nixpkgs" + ] + }, + "locked": { + "dir": "packaging/nix", + "lastModified": 1729978972, + "narHash": "sha256-Zox0iAi4CRPn4rxrhOetFFZ2jcSipe8tGD8nMTgcjhE=", + "ref": "refs/heads/main", + "rev": "72499f349ca81cb2838eced9d7c465b2cf71c4a2", + "revCount": 825, + "submodules": true, + "type": "git", + "url": "https://github.com/Open-Wine-Components/umu-launcher/?dir=packaging/nix" + }, + "original": { + "dir": "packaging/nix", + "submodules": true, + "type": "git", + "url": "https://github.com/Open-Wine-Components/umu-launcher/?dir=packaging/nix" + } + }, + "wezterm": { + "inputs": { + "flake-utils": "flake-utils_3", + "freetype2": "freetype2", + "harfbuzz": "harfbuzz", + "libpng": "libpng", + "nixpkgs": [ + "nixpkgs" + ], + "rust-overlay": "rust-overlay_4", + "zlib": "zlib" + }, + "locked": { + "dir": "nix", + "lastModified": 1733412933, + "narHash": "sha256-2OPDEgUEh0B6OIcSWtBbkw/zFi8r2VfluLj7FebTaVA=", + "owner": "wez", + "repo": "wezterm", + "rev": "6f375e29a2c4d70b8b51956edd494693196c6692", + "type": "github" + }, + "original": { + "dir": "nix", + "owner": "wez", + "ref": "main", + "repo": "wezterm", + "type": "github" + } + }, + "winapps": { + "inputs": { + "flake-compat": "flake-compat_2", + "flake-utils": "flake-utils_2", + "nixpkgs": [ + "oskars-dotfiles", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1731240784, + "narHash": "sha256-KWgQFapYdja8b67NBoEnJEEXmmVg7z9kRAcUfaMGM7Y=", + "owner": "winapps-org", + "repo": "winapps", + "rev": "9073afa69d7b4eeffdbbe05ccfc3dca4fdf8f43e", + "type": "github" + }, + "original": { + "owner": "winapps-org", + "repo": "winapps", + "type": "github" + } + }, + "zen-browser": { + "inputs": { + "nixpkgs": [ + "oskars-dotfiles", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1731689537, + "narHash": "sha256-0wN39XFD5bVcNANh9uLoQYyKbp9r6xX+oON1qI+L9iI=", + "owner": "ch4og", + "repo": "zen-browser-flake", + "rev": "064be844324965da1d596a541fdd831efe4a3a32", + "type": "github" + }, + "original": { + "owner": "ch4og", + "repo": "zen-browser-flake", + "type": "github" + } + }, + "zlib": { + "flake": false, + "locked": { + "lastModified": 1484501380, + "narHash": "sha256-j5b6aki1ztrzfCqu8y729sPar8GpyQWIrajdzpJC+ww=", + "owner": "madler", + "repo": "zlib", + "rev": "cacf7f1d4e3d44d871b605da3b647f07d718623f", + "type": "github" + }, + "original": { + "owner": "madler", + "ref": "v1.2.11", + "repo": "zlib", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..6cd892c --- /dev/null +++ b/flake.nix @@ -0,0 +1,65 @@ +{ + description = "A simple NixOS flakes"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + helix = { + url = "github:helix-editor/helix/master"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + wezterm = { + url = "github:wez/wezterm/main?dir=nix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + oskars-dotfiles = { + url = "github:oskardotglobal/.dotfiles/nix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + nur = { + url = "github:nix-community/NUR"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + nixos-cosmic.url = "github:lilyinstarlight/nixos-cosmic"; + musnix.url = "github:musnix/musnix"; + }; + outputs = + { + nixpkgs, + home-manager, + nur, + ... + }@inputs: + { + nixosConfigurations."Tytonidae" = nixpkgs.lib.nixosSystem rec { + system = "x86_64-linux"; + specialArgs = { + inherit inputs; + }; + modules = [ + { + nix.settings = { + substituters = [ "https://cosmic.cachix.org/" ]; + trusted-public-keys = [ "cosmic.cachix.org-1:Dya9IyXD4xdBehWjrkPv6rtxpmMdRel02smYzA85dPE=" ]; + }; + } + inputs.musnix.nixosModules.musnix + ( + { ... }: + { + musnix.enable = true; + } + ) + inputs.nixos-cosmic.nixosModules.default + nur.modules.nixos.default + nur.legacyPackages."${system}".repos.iopq.modules.xraya + ./configuration.nix + home-manager.nixosModules.home-manager + ./users + ]; + }; + }; +} diff --git a/hardware-configuration.nix b/hardware-configuration.nix new file mode 100644 index 0000000..7319856 --- /dev/null +++ b/hardware-configuration.nix @@ -0,0 +1,42 @@ +# 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" "thunderbolt" "nvme" "usbhid" "usb_storage" "uas" "sd_mod" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-intel" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/a9270d79-f6f2-49fb-a238-703c7d024189"; + fsType = "ext4"; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/74CC-54B3"; + fsType = "vfat"; + options = [ "fmask=0077" "dmask=0077" ]; + }; + + swapDevices = + [ { device = "/dev/disk/by-uuid/1d8a740c-787e-450b-a934-243b93865d91"; } + ]; + + # 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.eno2.useDHCP = lib.mkDefault true; + # networking.interfaces.enp0s13f0u1u1.useDHCP = lib.mkDefault true; + # networking.interfaces.wlo1.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/users/default.nix b/users/default.nix new file mode 100644 index 0000000..2646284 --- /dev/null +++ b/users/default.nix @@ -0,0 +1,35 @@ +{ + pkgs, + inputs, + ... +}: +{ + imports = [ + { + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + home-manager.users.david = import ./home-manager; + home-manager.extraSpecialArgs = inputs; + home-manager.backupFileExtension = "backup"; + } + ./steam.nix + ./spotify.nix + ]; + programs.fish.enable = true; + # programs.coolercontrol = { + # enable = true; + # nvidiaSupport = true; + # }; + users.users.david.shell = pkgs.fish; + users.users.david.openssh.authorizedKeys.keyFiles = [ + ./tytonidae.pub + ]; + environment.systemPackages = with pkgs; [ + element-desktop + discord-ptb + asusctl + vlc + btop + handbrake + ]; +} diff --git a/users/home-manager/default.nix b/users/home-manager/default.nix new file mode 100644 index 0000000..d65831b --- /dev/null +++ b/users/home-manager/default.nix @@ -0,0 +1,81 @@ +{ + pkgs, + config, + ... +}: +{ + imports = [ + ./starship + ./helix + ./wezterm + ./fish + ./rime-ice.nix + ./firefox.nix + ./foot + ]; + xdg.userDirs = { + enable = true; + download = "${config.home.homeDirectory}/dls"; + documents = "${config.home.homeDirectory}/doc"; + music = "${config.home.homeDirectory}/mus"; + pictures = "${config.home.homeDirectory}/pic"; + videos = "${config.home.homeDirectory}/vid"; + templates = "${config.home.homeDirectory}/tpl"; + publicShare = "${config.home.homeDirectory}/pub"; + desktop = "${config.home.homeDirectory}/dsk"; + createDirectories = true; + }; + home.username = "david"; + home.homeDirectory = "/home/david"; + home.stateVersion = "24.11"; + programs.home-manager.enable = true; + programs.git = { + enable = true; + userName = "Ulic-youthlic"; + userEmail = "ulic.youthlic@gmail.com"; + }; + programs.obs-studio = { + enable = true; + plugins = with pkgs.obs-studio-plugins; [ + obs-source-record + ]; + }; + home.packages = with pkgs; [ + ripgrep + fzf + file + which + gnused + gnutar + gawk + zstd + gnupg + tree + nerd-fonts.victor-mono + ouch + dust + qq + telegram-desktop + taplo + ]; + programs.ssh = { + enable = true; + hashKnownHosts = true; + extraOptionOverrides = { + HostKeyAlgorithms = "ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,ssh-rsa,ecdsa-sha2-nistp521-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp521,ecdsa-sha2-nistp384,ecdsa-sha2-nistp256"; + KexAlgorithms = "curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256"; + MACs = "hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,umac-128@openssh.com"; + Ciphers = "chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr"; + }; + matchBlocks = { + "github.com" = { + hostname = "ssh.github.com"; + port = 443; + user = "git"; + extraOptions = { + AddKeysToAgent = "yes"; + }; + }; + }; + }; +} diff --git a/users/home-manager/emacs/default.nix b/users/home-manager/emacs/default.nix new file mode 100644 index 0000000..81b016c --- /dev/null +++ b/users/home-manager/emacs/default.nix @@ -0,0 +1,16 @@ +{ ... }: +{ + programs.emacs = { + enable = true; + }; + services.emacs = { + enable = true; + client = { + enable = true; + }; + }; + programs.doom-emacs = { + enable = true; + doomDir = ./doom; + }; +} diff --git a/users/home-manager/emacs/doom/config.el b/users/home-manager/emacs/doom/config.el new file mode 100644 index 0000000..c84b72f --- /dev/null +++ b/users/home-manager/emacs/doom/config.el @@ -0,0 +1,77 @@ +;;; $DOOMDIR/config.el -*- lexical-binding: t; -*- + +;; Place your private configuration here! Remember, you do not need to run 'doom +;; sync' after modifying this file! + + +;; Some functionality uses this to identify you, e.g. GPG configuration, email +;; clients, file templates and snippets. It is optional. +;; (setq user-full-name "John Doe" +;; user-mail-address "john@doe.com") + +;; Doom exposes five (optional) variables for controlling fonts in Doom: +;; +;; - `doom-font' -- the primary font to use +;; - `doom-variable-pitch-font' -- a non-monospace font (where applicable) +;; - `doom-big-font' -- used for `doom-big-font-mode'; use this for +;; presentations or streaming. +;; - `doom-symbol-font' -- for symbols +;; - `doom-serif-font' -- for the `fixed-pitch-serif' face +;; +;; See 'C-h v doom-font' for documentation and more examples of what they +;; accept. For example: +;; +;;(setq doom-font (font-spec :family "Fira Code" :size 12 :weight 'semi-light) +;; doom-variable-pitch-font (font-spec :family "Fira Sans" :size 13)) +;; +;; If you or Emacs can't find your font, use 'M-x describe-font' to look them +;; up, `M-x eval-region' to execute elisp code, and 'M-x doom/reload-font' to +;; refresh your font settings. If Emacs still can't find your font, it likely +;; wasn't installed correctly. Font issues are rarely Doom issues! + +;; There are two ways to load a theme. Both assume the theme is installed and +;; available. You can either set `doom-theme' or manually load a theme with the +;; `load-theme' function. This is the default: +(setq doom-theme 'doom-ayu-mirage) + +;; This determines the style of line numbers in effect. If set to `nil', line +;; numbers are disabled. For relative line numbers, set this to `relative'. +(setq display-line-numbers-type 'relative) + +;; If you use `org' and don't want your org files in the default location below, +;; change `org-directory'. It must be set before org loads! +(setq org-directory "~/org/") + + +;; Whenever you reconfigure a package, make sure to wrap your config in an +;; `after!' block, otherwise Doom's defaults may override your settings. E.g. +;; +;; (after! PACKAGE +;; (setq x y)) +;; +;; The exceptions to this rule: +;; +;; - Setting file/directory variables (like `org-directory') +;; - Setting variables which explicitly tell you to set them before their +;; package is loaded (see 'C-h v VARIABLE' to look up their documentation). +;; - Setting doom variables (which start with 'doom-' or '+'). +;; +;; Here are some additional functions/macros that will help you configure Doom. +;; +;; - `load!' for loading external *.el files relative to this one +;; - `use-package!' for configuring packages +;; - `after!' for running code after a package has loaded +;; - `add-load-path!' for adding directories to the `load-path', relative to +;; this file. Emacs searches the `load-path' when you load packages with +;; `require' or `use-package'. +;; - `map!' for binding new keys +;; +;; To get information about any of these functions/macros, move the cursor over +;; the highlighted symbol at press 'K' (non-evil users must press 'C-c c k'). +;; This will open documentation for it, including demos of how they are used. +;; Alternatively, use `C-h o' to look up a symbol (functions, variables, faces, +;; etc). +;; +;; You can also try 'gd' (or 'C-c c d') to jump to their definition and see how +;; they are implemented. +(setq doom-font "FiraCode Nerd Font:size=18") diff --git a/users/home-manager/emacs/doom/init.el b/users/home-manager/emacs/doom/init.el new file mode 100644 index 0000000..8b050fa --- /dev/null +++ b/users/home-manager/emacs/doom/init.el @@ -0,0 +1,193 @@ +;;; init.el -*- lexical-binding: t; -*- + +;; This file controls what Doom modules are enabled and what order they load +;; in. Remember to run 'doom sync' after modifying it! + +;; NOTE Press 'SPC h d h' (or 'C-h d h' for non-vim users) to access Doom's +;; documentation. There you'll find a link to Doom's Module Index where all +;; of our modules are listed, including what flags they support. + +;; NOTE Move your cursor over a module's name (or its flags) and press 'K' (or +;; 'C-c c k' for non-vim users) to view its documentation. This works on +;; flags as well (those symbols that start with a plus). +;; +;; Alternatively, press 'gd' (or 'C-c c d') on a module to browse its +;; directory (for easy access to its source code). + +(doom! :input + ;;bidi ; (tfel ot) thgir etirw uoy gnipleh + ;;chinese + ;;japanese + ;;layout ; auie,ctsrnm is the superior home row + + :completion + company ; the ultimate code completion backend + (corfu +orderless) ; complete with cap(f), cape and a flying feather! + ;;helm ; the *other* search engine for love and life + ;;ido ; the other *other* search engine... + ;;ivy ; a search engine for love and life + vertico ; the search engine of the future + + :ui + ;;deft ; notational velocity for Emacs + doom ; what makes DOOM look the way it does + doom-dashboard ; a nifty splash screen for Emacs + ;;doom-quit ; DOOM quit-message prompts when you quit Emacs + ;;(emoji +unicode) ; 🙂 + hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW + indent-guides ; highlighted indent columns + ligatures ; ligatures and symbols to make your code pretty again + ;;minimap ; show a map of the code on the side + modeline ; snazzy, Atom-inspired modeline, plus API + ;;nav-flash ; blink cursor line after big motions + ;;neotree ; a project drawer, like NERDTree for vim + ophints ; highlight the region an operation acts on + (popup +defaults) ; tame sudden yet inevitable temporary windows + ;;tabs ; a tab bar for Emacs + treemacs ; a project drawer, like neotree but cooler + unicode ; extended unicode support for various languages + (vc-gutter +pretty) ; vcs diff in the fringe + vi-tilde-fringe ; fringe tildes to mark beyond EOB + ;;window-select ; visually switch windows + workspaces ; tab emulation, persistence & separate workspaces + zen ; distraction-free coding or writing + + :editor + (evil +everywhere); come to the dark side, we have cookies + file-templates ; auto-snippets for empty files + fold ; (nigh) universal code folding + (format +onsave) ; automated prettiness + ;;god ; run Emacs commands without modifier keys + ;;lispy ; vim for lisp, for people who don't like vim + ;;multiple-cursors ; editing in many places at once + ;;objed ; text object editing for the innocent + ;;parinfer ; turn lisp into python, sort of + ;;rotate-text ; cycle region at point between text candidates + snippets ; my elves. They type so I don't have to + word-wrap ; soft wrapping with language-aware indent + + :emacs + dired ; making dired pretty [functional] + electric ; smarter, keyword-based electric-indent + ;;eww ; the internet is gross + ;;ibuffer ; interactive buffer management + undo ; persistent, smarter undo for your inevitable mistakes + vc ; version-control and Emacs, sitting in a tree + + :term + ;;eshell ; the elisp shell that works everywhere + ;;shell ; simple shell REPL for Emacs + ;;term ; basic terminal emulator for Emacs + vterm ; the best terminal emulation in Emacs + + :checkers + syntax ; tasing you for every semicolon you forget + ;;(spell +flyspell) ; tasing you for misspelling mispelling + ;;grammar ; tasing grammar mistake every you make + + :tools + ;;ansible + ;;biblio ; Writes a PhD for you (citation needed) + ;;collab ; buffers with friends + ;;debugger ; FIXME stepping through code, to help you add bugs + ;;direnv + ;;docker + ;;editorconfig ; let someone else argue about tabs vs spaces + ;;ein ; tame Jupyter notebooks with emacs + (eval +overlay) ; run code, run (also, repls) + lookup ; navigate your code and its documentation + ;;lsp ; M-x vscode + magit ; a git porcelain for Emacs + ;;make ; run make tasks from Emacs + ;;pass ; password manager for nerds + ;;pdf ; pdf enhancements + ;;prodigy ; FIXME managing external services & code builders + ;;terraform ; infrastructure as code + ;;tmux ; an API for interacting with tmux + ;;tree-sitter ; syntax and parsing, sitting in a tree... + ;;upload ; map local to remote projects via ssh/ftp + + :os + (:if (featurep :system 'macos) macos) ; improve compatibility with macOS + ;;tty ; improve the terminal Emacs experience + + :lang + ;;agda ; types of types of types of types... + ;;beancount ; mind the GAAP + ;;(cc +lsp) ; C > C++ == 1 + ;;clojure ; java with a lisp + ;;common-lisp ; if you've seen one lisp, you've seen them all + ;;coq ; proofs-as-programs + ;;crystal ; ruby at the speed of c + ;;csharp ; unity, .NET, and mono shenanigans + ;;data ; config/data formats + ;;(dart +flutter) ; paint ui and not much else + ;;dhall + ;;elixir ; erlang done right + ;;elm ; care for a cup of TEA? + emacs-lisp ; drown in parentheses + ;;erlang ; an elegant language for a more civilized age + ;;ess ; emacs speaks statistics + ;;factor + ;;faust ; dsp, but you get to keep your soul + ;;fortran ; in FORTRAN, GOD is REAL (unless declared INTEGER) + ;;fsharp ; ML stands for Microsoft's Language + ;;fstar ; (dependent) types and (monadic) effects and Z3 + ;;gdscript ; the language you waited for + ;;(go +lsp) ; the hipster dialect + ;;(graphql +lsp) ; Give queries a REST + ;;(haskell +lsp) ; a language that's lazier than I am + ;;hy ; readability of scheme w/ speed of python + ;;idris ; a language you can depend on + ;;json ; At least it ain't XML + ;;(java +lsp) ; the poster child for carpal tunnel syndrome + ;;javascript ; all(hope(abandon(ye(who(enter(here)))))) + ;;julia ; a better, faster MATLAB + ;;kotlin ; a better, slicker Java(Script) + ;;latex ; writing papers in Emacs has never been so fun + ;;lean ; for folks with too much to prove + ;;ledger ; be audit you can be + ;;lua ; one-based indices? one-based indices + markdown ; writing docs for people to ignore + ;;nim ; python + lisp at the speed of c + ;;nix ; I hereby declare "nix geht mehr!" + ;;ocaml ; an objective camel + org ; organize your plain life in plain text + ;;php ; perl's insecure younger brother + ;;plantuml ; diagrams for confusing people more + ;;graphviz ; diagrams for confusing yourself even more + ;;purescript ; javascript, but functional + ;;python ; beautiful is better than ugly + ;;qt ; the 'cutest' gui framework ever + ;;racket ; a DSL for DSLs + ;;raku ; the artist formerly known as perl6 + ;;rest ; Emacs as a REST client + ;;rst ; ReST in peace + ;;(ruby +rails) ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"} + (rust +lsp) ; Fe2O3.unwrap().unwrap().unwrap().unwrap() + ;;scala ; java, but good + ;;(scheme +guile) ; a fully conniving family of lisps + sh ; she sells {ba,z,fi}sh shells on the C xor + ;;sml + ;;solidity ; do you need a blockchain? No. + ;;swift ; who asked for emoji variables? + ;;terra ; Earth and Moon in alignment for performance. + ;;web ; the tubes + ;;yaml ; JSON, but readable + ;;zig ; C, but simpler + + :email + ;;(mu4e +org +gmail) + ;;notmuch + ;;(wanderlust +gmail) + + :app + ;;calendar + ;;emms + ;;everywhere ; *leave* Emacs!? You must be joking + ;;irc ; how neckbeards socialize + ;;(rss +org) ; emacs as an RSS reader + + :config + ;;literate + (default +bindings +smartparens)) diff --git a/users/home-manager/emacs/doom/packages.el b/users/home-manager/emacs/doom/packages.el new file mode 100644 index 0000000..b3322c7 --- /dev/null +++ b/users/home-manager/emacs/doom/packages.el @@ -0,0 +1,49 @@ +;; -*- no-byte-compile: t; -*- +;;; $DOOMDIR/packages.el + +;; To install a package with Doom you must declare them here and run 'doom sync' +;; on the command line, then restart Emacs for the changes to take effect -- or + + +;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror: +;; (package! some-package) + +;; To install a package directly from a remote git repo, you must specify a +;; `:recipe'. You'll find documentation on what `:recipe' accepts here: +;; https://github.com/radian-software/straight.el#the-recipe-format +;; (package! another-package +;; :recipe (:host github :repo "username/repo")) + +;; If the package you are trying to install does not contain a PACKAGENAME.el +;; file, or is located in a subdirectory of the repo, you'll need to specify +;; `:files' in the `:recipe': +;; (package! this-package +;; :recipe (:host github :repo "username/repo" +;; :files ("some-file.el" "src/lisp/*.el"))) + +;; If you'd like to disable a package included with Doom, you can do so here +;; with the `:disable' property: +;; (package! builtin-package :disable t) + +;; You can override the recipe of a built in package without having to specify +;; all the properties for `:recipe'. These will inherit the rest of its recipe +;; from Doom or MELPA/ELPA/Emacsmirror: +;; (package! builtin-package :recipe (:nonrecursive t)) +;; (package! builtin-package-2 :recipe (:repo "myfork/package")) + +;; Specify a `:branch' to install a package from a particular branch or tag. +;; This is required for some packages whose default branch isn't 'master' (which +;; our package manager can't deal with; see radian-software/straight.el#279) +;; (package! builtin-package :recipe (:branch "develop")) + +;; Use `:pin' to specify a particular commit to install. +;; (package! builtin-package :pin "1a2b3c4d5e") + + +;; Doom's packages are pinned to a specific commit and updated from release to +;; release. The `unpin!' macro allows you to unpin single packages... +;; (unpin! pinned-package) +;; ...or multiple packages +;; (unpin! pinned-package another-pinned-package) +;; ...Or *all* packages (NOT RECOMMENDED; will likely break things) +;; (unpin! t) diff --git a/users/home-manager/firefox.nix b/users/home-manager/firefox.nix new file mode 100644 index 0000000..2dca25c --- /dev/null +++ b/users/home-manager/firefox.nix @@ -0,0 +1,120 @@ +{ pkgs, ... }: +{ + programs.firefox = { + enable = true; + languagePacks = [ + "zh-CN" + "en-US" + ]; + profiles.default = { + name = "default"; + isDefault = true; + extensions = with pkgs.nur.repos; [ + rycee.firefox-addons.immersive-translate + ]; + search = { + force = true; + default = "DuckDuckGo"; + engines = { + "Nix Packages" = { + urls = [ + { + template = "https://search.nixos.org/packages"; + params = [ + { + name = "type"; + value = "packages"; + } + { + name = "query"; + value = "{searchTerms}"; + } + ]; + } + ]; + icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; + definedAliases = [ "@np" ]; + }; + "Nix Options" = { + urls = [ + { + template = "https://search.nixos.org/options"; + params = [ + { + name = "channel"; + value = "unstable"; + } + { + name = "query"; + value = "{searchTerms}"; + } + ]; + } + ]; + definedAliases = [ "@no" ]; + }; + "Home Manager Options" = { + urls = [ + { + template = "https://home-manager-options.extranix.com"; + params = [ + { + name = "query"; + value = "{searchTerms}"; + } + { + name = "release"; + value = "master"; + } + ]; + } + ]; + definedAliases = [ "hm" ]; + }; + "NUR Packages" = { + urls = [ + { + template = "https://nur.nix-community.org/"; + } + ]; + definedAliases = [ "nu" ]; + }; + "Nix Flakes" = { + urls = [ + { + template = "https://search.nixos.org/flakes"; + params = [ + { + name = "channel"; + value = "unstable"; + } + { + name = "query"; + value = "{searchTerms}"; + } + ]; + } + ]; + definedAliases = [ "nf" ]; + }; + "NixOS Wiki" = { + urls = [ + { + template = "https://nixos.wiki/index.php"; + params = [ + { + name = "search"; + value = "{searchTerms}"; + } + ]; + } + ]; + definedAliases = [ "nw" ]; + }; + "Bing".metaData.hidden = true; + "Google".metaData.alias = "@g"; # builtin engines only support specifying one additional alias + }; + }; + }; + }; +} diff --git a/users/home-manager/fish/default.nix b/users/home-manager/fish/default.nix new file mode 100644 index 0000000..8b51ca5 --- /dev/null +++ b/users/home-manager/fish/default.nix @@ -0,0 +1,51 @@ +{ ... }: +{ + programs = { + bash = { + enable = true; + }; + fish = { + enable = true; + functions = { + __fish_command_not_found_handler = { + body = "__fish_default_command_not_found_handler $argv[1]"; + onEvent = "fish_command_not_found"; + }; + fish_greeting = { + body = '' + fastfetch + ''; + }; + }; + }; + fastfetch.enable = true; + starship = { + enableFishIntegration = true; + enable = true; + }; + zoxide = { + enableFishIntegration = true; + enable = true; + }; + yazi = { + enableFishIntegration = true; + enable = true; + }; + fzf = { + enableFishIntegration = true; + enable = true; + }; + eza = { + enableFishIntegration = true; + enable = true; + }; + zellij = { + enable = true; + enableFishIntegration = true; + }; + direnv = { + enable = true; + nix-direnv.enable = true; + }; + }; +} diff --git a/users/home-manager/foot/default.nix b/users/home-manager/foot/default.nix new file mode 100644 index 0000000..2fbaba2 --- /dev/null +++ b/users/home-manager/foot/default.nix @@ -0,0 +1,8 @@ +{ config, ... }: +{ + programs.foot = { + enable = true; + server.enable = true; + }; + xdg.configFile."foot/foot.ini".source = (config.lib.file.mkOutOfStoreSymlink ./foot.ini); +} diff --git a/users/home-manager/foot/foot.ini b/users/home-manager/foot/foot.ini new file mode 100644 index 0000000..f09e4e6 --- /dev/null +++ b/users/home-manager/foot/foot.ini @@ -0,0 +1,256 @@ +# -*- conf -*- + +# shell=$SHELL (if set, otherwise user's default shell from /etc/passwd) +term=foot +# login-shell=no + +# app-id=foot # globally set wayland app-id. Default values are "foot" and "footclient" for desktop and server mode +# title=foot +# locked-title=no + +font=FiraCode Nerd Font:size=15:lang=en-US +# font-bold= +# font-italic= +# font-bold-italic= +# font-size-adjustment=0.5 +# line-height= +# letter-spacing=0 +horizontal-letter-offset=0 +vertical-letter-offset=0 +# underline-offset= +# underline-thickness= +# strikeout-thickness= +# box-drawings-uses-font-glyphs=no +dpi-aware=yes + +# initial-window-size-pixels=700x500 # Or, +# initial-window-size-chars= +# initial-window-mode=windowed +# pad=0x0 +# resize-by-cells=yes +# resize-keep-grid=yes +# resize-delay-ms=100 + +# bold-text-in-bright=no +# word-delimiters=,│`|:"'()[]{}<> +selection-target=clipboard +# workers= +# utmp-helper=/usr/lib/utempter/utempter # When utmp backend is ‘libutempter’ (Linux) +# utmp-helper=/usr/libexec/ulog-helper # When utmp backend is ‘ulog’ (FreeBSD) + +[environment] +# name=value + +[bell] +# urgent=no +# notify=no +# visual=no +# command= +# command-focused=no + +[desktop-notifications] +# command=notify-send --wait --app-name ${app-id} --icon ${app-id} --category ${category} --urgency ${urgency} --expire-time ${expire-time} --hint STRING:image-path:${icon} --hint BOOLEAN:suppress-sound:${muted} --hint STRING:sound-name:${sound-name} --replace-id ${replace-id} ${action-argument} --print-id -- ${title} ${body} +# command-action-argument=--action ${action-name}=${action-label} +# close="" +# inhibit-when-focused=yes + + +[scrollback] +# lines=1000 +# multiplier=3.0 +# indicator-position=relative +# indicator-format="" + +[url] +# launch=xdg-open ${url} +# label-letters=sadfjklewcmpgh +# osc8-underline=url-mode +# protocols=http, https, ftp, ftps, file, gemini, gopher +# uri-characters=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.,~:;/?#@!$&%*+="'()[] + +[cursor] +style=beam # block +# color= +# blink=no +# blink-rate=500 +# beam-thickness=1.5 +# underline-thickness= + +[mouse] +hide-when-typing=yes +# alternate-scroll-mode=yes + +[touch] +# long-press-delay=400 + +[colors] +# alpha=1.0 +# background=242424 +# foreground=ffffff +# flash=7f7f00 +# flash-alpha=0.5 + +## Normal/regular colors (color palette 0-7) +# regular0=242424 # black +# regular1=f62b5a # red +# regular2=47b413 # green +# regular3=e3c401 # yellow +# regular4=24acd4 # blue +# regular5=f2affd # magenta +# regular6=13c299 # cyan +# regular7=e6e6e6 # white + +## Bright colors (color palette 8-15) +# bright0=616161 # bright black +# bright1=ff4d51 # bright red +# bright2=35d450 # bright green +# bright3=e9e836 # bright yellow +# bright4=5dc5f8 # bright blue +# bright5=feabf2 # bright magenta +# bright6=24dfc4 # bright cyan +# bright7=ffffff # bright white + +## dimmed colors (see foot.ini(5) man page) +# dim0= +# ... +# dim7= + +## The remaining 256-color palette +# 16 = <256-color palette #16> +# ... +# 255 = <256-color palette #255> + +## Sixel colors +# sixel0 = 000000 +# sixel1 = 3333cc +# sixel2 = cc2121 +# sixel3 = 33cc33 +# sixel4 = cc33cc +# sixel5 = 33cccc +# sixel6 = cccc33 +# sixel7 = 878787 +# sixel8 = 424242 +# sixel9 = 545499 +# sixel10 = 994242 +# sixel11 = 549954 +# sixel12 = 995499 +# sixel13 = 549999 +# sixel14 = 999954 +# sixel15 = cccccc + +## Misc colors +# selection-foreground= +# selection-background= +# jump-labels= # black-on-yellow +# scrollback-indicator= # black-on-bright-blue +# search-box-no-match= # black-on-red +# search-box-match= # black-on-yellow +# urls= + +[csd] +# preferred=server +# size=26 +# font= +# color= +# hide-when-maximized=no +# double-click-to-maximize=yes +# border-width=0 +# border-color= +# button-width=26 +# button-color= +# button-minimize-color= +# button-maximize-color= +# button-close-color= + +[key-bindings] +# scrollback-up-page=Shift+Page_Up +# scrollback-up-half-page=none +# scrollback-up-line=none +# scrollback-down-page=Shift+Page_Down +# scrollback-down-half-page=none +# scrollback-down-line=none +# scrollback-home=none +# scrollback-end=none +# clipboard-copy=Control+Shift+c XF86Copy +# clipboard-paste=Control+Shift+v XF86Paste +# primary-paste=Shift+Insert +# search-start=Control+Shift+r +# font-increase=Control+plus Control+equal Control+KP_Add +# font-decrease=Control+minus Control+KP_Subtract +# font-reset=Control+0 Control+KP_0 +# spawn-terminal=Control+Shift+n +# minimize=none +# maximize=none +# fullscreen=none +# pipe-visible=[sh -c "xurls | fuzzel | xargs -r firefox"] none +# pipe-scrollback=[sh -c "xurls | fuzzel | xargs -r firefox"] none +# pipe-selected=[xargs -r firefox] none +# pipe-command-output=[wl-copy] none # Copy last command's output to the clipboard +# show-urls-launch=Control+Shift+o +# show-urls-copy=none +# show-urls-persistent=none +# prompt-prev=Control+Shift+z +# prompt-next=Control+Shift+x +# unicode-input=Control+Shift+u +# noop=none +# quit=none + +[search-bindings] +# cancel=Control+g Control+c Escape +# commit=Return +# find-prev=Control+r +# find-next=Control+s +# cursor-left=Left Control+b +# cursor-left-word=Control+Left Mod1+b +# cursor-right=Right Control+f +# cursor-right-word=Control+Right Mod1+f +# cursor-home=Home Control+a +# cursor-end=End Control+e +# delete-prev=BackSpace +# delete-prev-word=Mod1+BackSpace Control+BackSpace +# delete-next=Delete +# delete-next-word=Mod1+d Control+Delete +# extend-char=Shift+Right +# extend-to-word-boundary=Control+w Control+Shift+Right +# extend-to-next-whitespace=Control+Shift+w +# extend-line-down=Shift+Down +# extend-backward-char=Shift+Left +# extend-backward-to-word-boundary=Control+Shift+Left +# extend-backward-to-next-whitespace=none +# extend-line-up=Shift+Up +# clipboard-paste=Control+v Control+Shift+v Control+y XF86Paste +# primary-paste=Shift+Insert +# unicode-input=none +# scrollback-up-page=Shift+Page_Up +# scrollback-up-half-page=none +# scrollback-up-line=none +# scrollback-down-page=Shift+Page_Down +# scrollback-down-half-page=none +# scrollback-down-line=none +# scrollback-home=none +# scrollback-end=none + +[url-bindings] +# cancel=Control+g Control+c Control+d Escape +# toggle-url-visible=t + +[text-bindings] +# \x03=Mod4+c # Map Super+c -> Ctrl+c + +[mouse-bindings] +# scrollback-up-mouse=BTN_WHEEL_BACK +# scrollback-down-mouse=BTN_WHEEL_FORWARD +# font-increase=Control+BTN_WHEEL_BACK +# font-decrease=Control+BTN_WHEEL_FORWARD +# selection-override-modifiers=Shift +# primary-paste=BTN_MIDDLE +# select-begin=BTN_LEFT +# select-begin-block=Control+BTN_LEFT +# select-extend=BTN_RIGHT +# select-extend-character-wise=Control+BTN_RIGHT +# select-word=BTN_LEFT-2 +# select-word-whitespace=Control+BTN_LEFT-2 +# select-quote = BTN_LEFT-3 +# select-row=BTN_LEFT-4 + +# vim: ft=dosini diff --git a/users/home-manager/helix/config.toml b/users/home-manager/helix/config.toml new file mode 100644 index 0000000..dedc232 --- /dev/null +++ b/users/home-manager/helix/config.toml @@ -0,0 +1,84 @@ +theme = "ayu_evolve" + +[editor] +line-number = "relative" +cursorline = true +cursorcolumn = false +true-color = true +undercurl = true +bufferline = "multiple" +color-modes = true +default-line-ending = "lf" +popup-border = "all" + +[editor.statusline] +left = [ + "mode", + "spacer", + "version-control", + "file-type", + "separator", + "read-only-indicator", + "file-name", + "file-modification-indicator", + "spacer", + "spinner", +] +center = ["diagnostics"] +right = [ + "register", + "file-line-ending", + "file-encoding", + "separator", + "total-line-numbers", + "position", + "position-percentage", +] +separator = "|" +mode.normal = "NORMAL" +mode.insert = "INSERT" +mode.select = "SELECT" + +[editor.lsp] +display-messages = true +display-inlay-hints = true + +[editor.cursor-shape] +insert = "bar" +normal = "block" +select = "underline" + +[editor.file-picker] +hidden = false + +[editor.auto-save] +focus-lost = true +after-delay.enable = true + +[editor.whitespace.render] +space = "all" +tab = "all" +newline = "none" + +[editor.whitespace.characters] +space = "·" +nbsp = "⍽" +tab = "→" +newline = "⏎" +tabpad = "·" + +[editor.indent-guides] +render = true + +[editor.gutters] +layout = ["diagnostics", "spacer", "line-numbers", "spacer", "diff"] +line-numbers.min-width = 1 + +[editor.soft-wrap] +enable = true +wrap-at-text-width = true + +[editor.inline-diagnostics] +cursor-line = "hint" +other-lines = "error" +prefix-len = 2 diff --git a/users/home-manager/helix/default.nix b/users/home-manager/helix/default.nix new file mode 100644 index 0000000..80b766e --- /dev/null +++ b/users/home-manager/helix/default.nix @@ -0,0 +1,14 @@ +{ pkgs, helix, ... }: +{ + programs.helix = { + enable = true; + package = helix.packages."${pkgs.system}".default; + defaultEditor = true; + settings = + let + config-file = builtins.readFile ./config.toml; + config = builtins.fromTOML config-file; + in + config; + }; +} diff --git a/users/home-manager/rime-ice.nix b/users/home-manager/rime-ice.nix new file mode 100644 index 0000000..c1d7e08 --- /dev/null +++ b/users/home-manager/rime-ice.nix @@ -0,0 +1,40 @@ +{ ... }: +{ + xdg.dataFile = { + "fcitx5/rime/default.custom.yaml".text = '' + patch: + __include: rime_ice_suggestion:/ + schema_list: + - schema: double_pinyin_flypy + ''; + + "fcitx5/rime/rime_ice.custom.yaml".text = '' + patch: + "translator/dictionary": custom_dict + ''; + + "fcitx5/rime/custom_dict.dict.yaml".text = '' + # Rime dictionary + # encoding: utf-8 + + --- + name: custom_dict + version: "1.0" + sort: by_weight + use_preset_vocabulary: false + import_tables: + # https://github.com/iDvel/rime-ice/blob/main/rime_ice.dict.yaml + - cn_dicts/8105 # 字表 + - cn_dicts/41448 # 大字表(按需启用)(启用时和 8105 同时启用并放在 8105 下面) + - cn_dicts/base # 基础词库 + - cn_dicts/ext # 扩展词库 + - cn_dicts/tencent # 腾讯词向量(大词库,部署时间较长) + - cn_dicts/others # 一些杂项 + + - zhwiki + - moegirl + ... + ''; + }; + +} diff --git a/users/home-manager/starship/config.toml b/users/home-manager/starship/config.toml new file mode 100644 index 0000000..09f1906 --- /dev/null +++ b/users/home-manager/starship/config.toml @@ -0,0 +1,213 @@ +"$schema" = 'https://starship.rs/config-schema.json' + +[character] +success_symbol = '[λ](bold blue)' +error_symbol = '[λ](bold red)' +vimcmd_symbol = '[Λ](bold blue)' +vimcmd_replace_one_symbol = '[Λ](bold purple)' +vimcmd_replace_symbol = '[Λ](bold purple)' +vimcmd_visual_symbol = '[Λ](bold yellow)' + +[[battery.display]] +threshold = 10 +style = 'bold red' + +[[battery.display]] +threshold = 30 +style = 'bold yellow' +discharging_symbol = '💦' + +[[battery.display]] +threshold = 100 +style = 'green' + +[git_branch] +format = 'on [$symbol$branch(:$remote_branch)]($style) ' +symbol = " " + +[git_status] +diverged = '⇕⇡${ahead_count}⇣${behind_count}' +conflicted = "[⚔️${count}](red)" +ahead = '[⇡${count}](bold green)' +behind = '[⇣${count}](bold yellow)' +untracked = '[!${count}](red)' +stashed = "[📦${count}](purple)" +modified = '[M${count}](bold yellow)' +staged = "[+${count}](green)" +renamed = "[»${count}](bold yellow)" +deleted = '[-${count}](blue)' +up_to_date = '[✓](green)' +format = '([(\[$all_status\])(\[$ahead_behind\])]($style) ) ' + +[git_commit] +format = '([\($hash$tag\)]($style) )' +only_detached = false + +[directory] +fish_style_pwd_dir_length = 2 +truncation_length = 2 +truncate_to_repo = false +repo_root_style = "bold green" +use_os_path_sep = false +read_only = " 󰌾" + + +[aws] +symbol = " " + +[buf] +symbol = " " + +[c] +symbol = " " + +[conda] +symbol = " " + +[crystal] +symbol = " " + +[dart] +symbol = " " + +[docker_context] +symbol = " " + +[elixir] +symbol = " " + +[elm] +symbol = " " + +[fennel] +symbol = " " + +[fossil_branch] +symbol = " " + +[golang] +symbol = " " + +[guix_shell] +symbol = " " + +[haskell] +symbol = " " + +[haxe] +symbol = " " + +[hg_branch] +symbol = " " + +[hostname] +ssh_symbol = " " + +[java] +symbol = " " + +[julia] +symbol = " " + +[kotlin] +symbol = " " + +[lua] +symbol = " " + +[memory_usage] +symbol = "󰍛 " + +[meson] +symbol = "󰔷 " + +[nim] +symbol = "󰆥 " + +[nix_shell] +symbol = " " + +[nodejs] +symbol = " " + +[ocaml] +symbol = " " + +[os.symbols] +Alpaquita = " " +Alpine = " " +AlmaLinux = " " +Amazon = " " +Android = " " +Arch = " " +Artix = " " +CentOS = " " +Debian = " " +DragonFly = " " +Emscripten = " " +EndeavourOS = " " +Fedora = " " +FreeBSD = " " +Garuda = "󰛓 " +Gentoo = " " +HardenedBSD = "󰞌 " +Illumos = "󰈸 " +Kali = " " +Linux = " " +Mabox = " " +Macos = " " +Manjaro = " " +Mariner = " " +MidnightBSD = " " +Mint = " " +NetBSD = " " +NixOS = " " +OpenBSD = "󰈺 " +openSUSE = " " +OracleLinux = "󰌷 " +Pop = " " +Raspbian = " " +Redhat = " " +RedHatEnterprise = " " +RockyLinux = " " +Redox = "󰀘 " +Solus = "󰠳 " +SUSE = " " +Ubuntu = " " +Unknown = " " +Void = " " +Windows = "󰍲 " + +[package] +symbol = "󰏗 " + +[perl] +symbol = " " + +[php] +symbol = " " + +[pijul_channel] +symbol = " " + +[python] +symbol = " " + +[rlang] +symbol = "󰟔 " + +[ruby] +symbol = " " + +[rust] +symbol = "󱘗 " + +[scala] +symbol = " " + +[swift] +symbol = " " + +[zig] +symbol = " " + diff --git a/users/home-manager/starship/default.nix b/users/home-manager/starship/default.nix new file mode 100644 index 0000000..4318c73 --- /dev/null +++ b/users/home-manager/starship/default.nix @@ -0,0 +1,13 @@ +{ config, ... }: +{ + programs.starship = { + enable = true; + # settings = + # let + # config-file = builtins.readFile ./config.toml; + # in + # builtins.fromTOML config-file; + }; + + xdg.configFile."starship.toml".source = config.lib.file.mkOutOfStoreSymlink ./config.toml; +} diff --git a/users/home-manager/wezterm/default.nix b/users/home-manager/wezterm/default.nix new file mode 100644 index 0000000..5cdd52b --- /dev/null +++ b/users/home-manager/wezterm/default.nix @@ -0,0 +1,18 @@ +{ + pkgs, + wezterm, + ... +}: +{ + programs.wezterm = { + enable = true; + package = wezterm.packages."${pkgs.system}".default; + }; + home.file.".config/wezterm" = { + source = ./lua; + recursive = true; + }; + home.packages = with pkgs; [ + nerd-fonts.fira-code + ]; +} diff --git a/users/home-manager/wezterm/lua/background/background.png b/users/home-manager/wezterm/lua/background/background.png new file mode 100644 index 0000000..9c1f5d6 Binary files /dev/null and b/users/home-manager/wezterm/lua/background/background.png differ diff --git a/users/home-manager/wezterm/lua/config.lua b/users/home-manager/wezterm/lua/config.lua new file mode 100644 index 0000000..dd964db --- /dev/null +++ b/users/home-manager/wezterm/lua/config.lua @@ -0,0 +1,33 @@ +local wezterm = require("wezterm") + +---@class Config +---@filed options table +local Config = {} + +---Init Config +---@return Config +function Config:init() + local o = {} + self = setmetatable(o, { __index = Config }) + self.options = {} + return o +end + +---Append to `Config.options` +---@param new_options table new options to append +---@return Config +function Config:append(new_options) + for key, val in pairs(new_options) do + if self.options[key] ~= nil then + wezterm.log_warn("Duplicate config option detected: ", { + old = self.options[key], + new = new_options[key], + }) + else + self.options[key] = val + end + end + return self +end + +return Config diff --git a/users/home-manager/wezterm/lua/fn.lua b/users/home-manager/wezterm/lua/fn.lua new file mode 100644 index 0000000..0a01a96 --- /dev/null +++ b/users/home-manager/wezterm/lua/fn.lua @@ -0,0 +1,7 @@ +return { + ---Check whether the current os is windows + ---@return boolean whether the current os is windows + is_windows = function() + return require("wezterm").target_triple:find("windows") ~= nil + end, +} diff --git a/users/home-manager/wezterm/lua/fonts/firacode_nerd_font.lua b/users/home-manager/wezterm/lua/fonts/firacode_nerd_font.lua new file mode 100644 index 0000000..f58ede5 --- /dev/null +++ b/users/home-manager/wezterm/lua/fonts/firacode_nerd_font.lua @@ -0,0 +1,22 @@ +return { + family = [[FiraCode Nerd Font]], + assume_emoji_presentation = false, + style = [[Normal]], + harfbuzz_features = { + "calt=1", + "clig=1", + "liga=1", + "cv01", + "cv02", + "cv06", + "zero", + "onum", + "cv17", + "ss05", + "ss03", + "cv16", + "cv31", + "cv29", + "cv30", + }, +} diff --git a/users/home-manager/wezterm/lua/fonts/noto_color_emoji.lua b/users/home-manager/wezterm/lua/fonts/noto_color_emoji.lua new file mode 100644 index 0000000..61202ae --- /dev/null +++ b/users/home-manager/wezterm/lua/fonts/noto_color_emoji.lua @@ -0,0 +1,4 @@ +return { + family = [[Noto Color Emiji]], + assume_emoji_presentation = true, +} diff --git a/users/home-manager/wezterm/lua/fonts/noto_sans_cjk_sc.lua b/users/home-manager/wezterm/lua/fonts/noto_sans_cjk_sc.lua new file mode 100644 index 0000000..73a082d --- /dev/null +++ b/users/home-manager/wezterm/lua/fonts/noto_sans_cjk_sc.lua @@ -0,0 +1,4 @@ +return { + family = [[Noto Sans CJK SC]], + assume_emoji_presentation = false, +} diff --git a/users/home-manager/wezterm/lua/fonts/segoe_ui_emoji.lua b/users/home-manager/wezterm/lua/fonts/segoe_ui_emoji.lua new file mode 100644 index 0000000..927eb43 --- /dev/null +++ b/users/home-manager/wezterm/lua/fonts/segoe_ui_emoji.lua @@ -0,0 +1,4 @@ +return { + family = [[Segoe UI Emoji]], + assume_emoji_presentation = true, +} diff --git a/users/home-manager/wezterm/lua/fonts/victor_mono_nerd_font.lua b/users/home-manager/wezterm/lua/fonts/victor_mono_nerd_font.lua new file mode 100644 index 0000000..7bb4428 --- /dev/null +++ b/users/home-manager/wezterm/lua/fonts/victor_mono_nerd_font.lua @@ -0,0 +1,5 @@ +return { + family = [[VictorMono Nerd Font]], + assume_emoji_presentation = false, + style = "Italic", +} diff --git a/users/home-manager/wezterm/lua/options/backend.lua b/users/home-manager/wezterm/lua/options/backend.lua new file mode 100644 index 0000000..f16df18 --- /dev/null +++ b/users/home-manager/wezterm/lua/options/backend.lua @@ -0,0 +1,17 @@ +local wezterm = require("wezterm") + +local M = { + -- front_end = 'WebGpu', + webgpu_power_preference = "HighPerformance", +} + +for _, gpu in ipairs(wezterm.gui.enumerate_gpus()) do + if gpu.backend == "Vulkan" and gpu.device_type == "DiscreteGpu" then + M.webgpu_preferred_adapter = gpu + break + elseif gpu.backend == "Vulkan" and M.webgpu_preferred_adapter == nil then + M.webgpu_preferred_adapter = gpu + end +end + +return M diff --git a/users/home-manager/wezterm/lua/options/base.lua b/users/home-manager/wezterm/lua/options/base.lua new file mode 100644 index 0000000..8d1780a --- /dev/null +++ b/users/home-manager/wezterm/lua/options/base.lua @@ -0,0 +1,28 @@ +local wezterm = require("wezterm") + +return { + automatically_reload_config = true, + cell_width = 1.0, + audible_bell = "Disabled", + tab_bar_at_bottom = true, + use_fancy_tab_bar = false, + hide_tab_bar_if_only_one_tab = true, + window_decorations = "RESIZE|TITLE", + underline_thickness = 3.0, + enable_scroll_bar = true, + color_scheme = "MaterialOcean", + window_background_image = wezterm.config_dir .. [[/background/background.png]], + window_background_image_hsb = { + brightness = 0.02, + hue = 1.0, + saturation = 1.0, + }, + window_padding = { + left = "0.5cell", + right = 0, + top = "0cell", + bottom = "0cell", + }, + window_background_opacity = 0.9, + text_background_opacity = 0.6, +} diff --git a/users/home-manager/wezterm/lua/options/os/init.lua b/users/home-manager/wezterm/lua/options/os/init.lua new file mode 100644 index 0000000..d108fd5 --- /dev/null +++ b/users/home-manager/wezterm/lua/options/os/init.lua @@ -0,0 +1,5 @@ +if require("fn").is_windows() then + return require("options.os.windows") +else + return require("options.os.other_os") +end diff --git a/users/home-manager/wezterm/lua/options/os/other_os.lua b/users/home-manager/wezterm/lua/options/os/other_os.lua new file mode 100644 index 0000000..f47bffe --- /dev/null +++ b/users/home-manager/wezterm/lua/options/os/other_os.lua @@ -0,0 +1,30 @@ +local wezterm = require("wezterm") + +local fonts = { + require("fonts.firacode_nerd_font"), + require("fonts.noto_sans_cjk_sc"), + require("fonts.noto_color_emoji"), +} + +return { + term = "wezterm", + font_size = 14.0, + animation_fps = 1, + max_fps = 1, + font = wezterm.font_with_fallback(fonts), + font_rules = { + { + italic = true, + font = wezterm.font_with_fallback({ + require("fonts.victor_mono_nerd_font"), + }), + }, + { + italic = false, + font = wezterm.font_with_fallback({ + require("fonts.firacode_nerd_font"), + require("fonts.noto_sans_cjk_sc"), + }), + }, + }, +} diff --git a/users/home-manager/wezterm/lua/options/os/windows.lua b/users/home-manager/wezterm/lua/options/os/windows.lua new file mode 100644 index 0000000..ba1efa0 --- /dev/null +++ b/users/home-manager/wezterm/lua/options/os/windows.lua @@ -0,0 +1,31 @@ +local wezterm = require("wezterm") + +local fonts = { + require("fonts.firacode_nerd_font"), + require("fonts.segoe_ui_emoji"), +} + +return { + font_size = 16.0, + animation_fps = 144, + max_fps = 144, + default_prog = { + [[pwsh]], + }, + font = wezterm.font_with_fallback(fonts), + font_rules = { + { + italic = true, + font = wezterm.font_with_fallback({ + require("fonts.victor_mono_nerd_font"), + }), + }, + { + italic = false, + font = wezterm.font_with_fallback({ + require("fonts.firacode_nerd_font"), + require("fonts.noto_sans_cjk_sc"), + }), + }, + }, +} diff --git a/users/home-manager/wezterm/lua/stylua.toml b/users/home-manager/wezterm/lua/stylua.toml new file mode 100644 index 0000000..91e0fef --- /dev/null +++ b/users/home-manager/wezterm/lua/stylua.toml @@ -0,0 +1,6 @@ +indent_type = "Spaces" +indent_width = 2 +column_width = 120 + +[sort_requires] +enabled = true diff --git a/users/home-manager/wezterm/lua/wezterm.lua b/users/home-manager/wezterm/lua/wezterm.lua new file mode 100644 index 0000000..60d6d0c --- /dev/null +++ b/users/home-manager/wezterm/lua/wezterm.lua @@ -0,0 +1,5 @@ +return require("config") + :init() + :append(require("options.base")) + :append(require("options.backend")) + :append(require("options.os")).options diff --git a/users/spotify.nix b/users/spotify.nix new file mode 100644 index 0000000..ffc896b --- /dev/null +++ b/users/spotify.nix @@ -0,0 +1,9 @@ +{ pkgs, inputs, ... }: +{ + nixpkgs.overlays = [ + inputs.oskars-dotfiles.overlays.spotx + ]; + environment.systemPackages = with pkgs; [ + spotify + ]; +} diff --git a/users/steam.nix b/users/steam.nix new file mode 100644 index 0000000..0901a55 --- /dev/null +++ b/users/steam.nix @@ -0,0 +1,9 @@ +{ ... }: +{ + programs.steam = { + enable = true; + remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play + dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server + localNetworkGameTransfers.openFirewall = true; # Open ports in the firewall for Steam Local Network Game Transfers + }; +} diff --git a/users/tytonidae b/users/tytonidae new file mode 100644 index 0000000..0299edb --- /dev/null +++ b/users/tytonidae @@ -0,0 +1,8 @@ +-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABC2sRS60d +BXX14enHHCynC9AAAAGAAAAAEAAAAzAAAAC3NzaC1lZDI1NTE5AAAAIETMs9b4xfFRsgPZ +UzrVce3J27p0LBKLfZwhNMen0Da9AAAAkC3NVadOCQU0sd6qujTsqGPSbuO6iNaEBOj6hl +GVPf/VwoGxadvzyQh7sdcOzr/nybcaNgOya7sjAWN0uClekHp/8ZUewU28xlmv2yXxpOXM +UrDFaUcpWIRegALW8CpJf2ndykI1Y8eY2uwGJSWgWreBoCD81P1V68DSw8i4XVtW2Pad9y +yYvR8TpNxCvyta2w== +-----END OPENSSH PRIVATE KEY----- diff --git a/users/tytonidae.pub b/users/tytonidae.pub new file mode 100644 index 0000000..8ada3ea --- /dev/null +++ b/users/tytonidae.pub @@ -0,0 +1 @@ +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIETMs9b4xfFRsgPZUzrVce3J27p0LBKLfZwhNMen0Da9 david@nixos