Flake for my NixOS devices

Light at end of tunnel

bwc9876.dev b5ee5fd2 de908872

verified
+467 -215
+3 -3
flake.lock
··· 11 11 "uv2nix": "uv2nix" 12 12 }, 13 13 "locked": { 14 - "lastModified": 1752124358, 15 - "narHash": "sha256-9qKwgU/3L7k82Npus6J9Q07k+knu/UMPt4/a584cQa0=", 14 + "lastModified": 1761868163, 15 + "narHash": "sha256-YJtofqcj+T21aQ7odpjGfVnWrNkxQBLLadT3RpXRGS8=", 16 16 "owner": "Bwc9876", 17 17 "repo": "bingus-bot", 18 - "rev": "7052483d43084bc6c63d647149eaa6a127199905", 18 + "rev": "7d478090e875dc7425359891f40874ed55c11946", 19 19 "type": "github" 20 20 }, 21 21 "original": {
+21 -20
flake.nix
··· 37 37 }; 38 38 }; 39 39 40 - outputs = inputs @ { 41 - self, 42 - nixpkgs, 43 - flakelight, 44 - nix-index-db, 45 - hm, 46 - nixos-hardware, 47 - lanzaboote, 48 - wayland-mpris-idle-inhibit, 49 - fenix, 50 - catppuccin, 51 - nixvim, 52 - imperm, 53 - nu_plugin_dbus, 54 - bingus, 55 - spoon, 56 - gh-grader-preview, 57 - }: 40 + outputs = 41 + inputs@{ 42 + self, 43 + nixpkgs, 44 + flakelight, 45 + nix-index-db, 46 + hm, 47 + nixos-hardware, 48 + lanzaboote, 49 + wayland-mpris-idle-inhibit, 50 + fenix, 51 + catppuccin, 52 + nixvim, 53 + imperm, 54 + nu_plugin_dbus, 55 + bingus, 56 + spoon, 57 + gh-grader-preview, 58 + }: 58 59 flakelight ./. { 59 60 # imports = [ 60 61 # spoon.flakelightModules.repl ··· 66 67 "*.sh" = "shfmt -w ."; 67 68 }; 68 69 69 - packages = nixpkgs.lib.genAttrs ["wayland-mpris-idle-inhibit" "nu_plugin_dbus"] ( 70 - i: {pkgs}: inputs.${i}.packages.${pkgs.system}.default 70 + packages = nixpkgs.lib.genAttrs [ "wayland-mpris-idle-inhibit" "nu_plugin_dbus" ] ( 71 + i: { pkgs }: inputs.${i}.packages.${pkgs.system}.default 71 72 ); 72 73 nixDir = ./.; 73 74 legacyPackages = pkgs: pkgs;
+6 -6
homeModules/dev.nix
··· 5 5 ... 6 6 }: { 7 7 options.cow.dev = let 8 - mkLangOpt = d: ((lib.mkEnableOption d) // {default = true;}); 8 + mkLangOpt = d: ((lib.mkEnableOption d) // {default = config.cow.dev.enable;}); 9 9 in { 10 10 enable = lib.mkEnableOption "Dev stuff (all on by default)"; 11 - c = mkLangOpt "C/C++ dev stuf"; 11 + c = mkLangOpt "C/C++ dev stuff"; 12 12 rust = mkLangOpt "Rust dev stuff"; 13 13 haskell = mkLangOpt "Haskell dev stuff"; 14 - js = mkLangOpt "JavaScript dev stuff"; 14 + web = mkLangOpt "Web dev stuff"; 15 15 nix = mkLangOpt "Nix dev stuff"; 16 16 python = mkLangOpt "Python dev stuff"; 17 17 dotnet = mkLangOpt ".NET dev stuff"; ··· 24 24 nixpkgs.overlays = lib.optional conf.rust inputs.fenix.overlays.default; 25 25 26 26 xdg.configFile = { 27 - "astro/config.json" = lib.mkIf conf.js { 27 + "astro/config.json" = lib.mkIf conf.web { 28 28 text = builtins.toJSON { 29 29 telemetry = { 30 30 enabled = false; ··· 46 46 ".config/gh" 47 47 ] 48 48 ++ (lib.optional conf.rust ".cargo") 49 - ++ (lib.optionals conf.js [ 49 + ++ (lib.optionals conf.web [ 50 50 ".npm" 51 51 ".pnpm" 52 52 ]); ··· 80 80 mprocs 81 81 evcxr 82 82 ]) 83 - ++ (lib.optionals conf.js [ 83 + ++ (lib.optionals conf.web [ 84 84 nodejs_latest 85 85 nodePackages.pnpm 86 86 yarn
+56 -90
homeModules/nushell.nix
··· 1 - {...}: { 1 + { ... }: 2 + { 2 3 config, 3 4 pkgs, 4 5 lib, 5 6 ... 6 - }: { 7 + }: 8 + { 7 9 options.cow.nushell = { 8 10 enable = lib.mkEnableOption "Nushell + Customizations"; 9 11 commandNotFound = lib.mkEnableOption "Custom Nix Command Not Found for Nushell"; 10 12 completers = { 11 - carapace = 12 - (lib.mkEnableOption "Carapace Completer In Nushell") 13 - // { 14 - default = true; 15 - }; 16 - fish = 17 - (lib.mkEnableOption "Fish Completions In Nushell") 18 - // { 19 - default = true; 20 - }; 13 + carapace = (lib.mkEnableOption "Carapace Completer In Nushell") // { 14 + default = true; 15 + }; 21 16 }; 22 17 }; 23 18 24 - config = let 25 - conf = config.cow.nushell; 26 - in 19 + config = 20 + let 21 + conf = config.cow.nushell; 22 + in 27 23 lib.mkIf conf.enable { 28 - cow.imperm.keep = [".local/share/zoxide"]; 29 - cow.imperm.keepFiles = [".config/nushell/history.txt"]; 24 + cow.imperm.keep = [ ".local/share/zoxide" ]; 25 + cow.imperm.keepFiles = [ ".config/nushell/history.txt" ]; 30 26 31 27 programs = { 32 28 zoxide.enable = true; 33 29 command-not-found.enable = !conf.commandNotFound; 34 - nushell = let 35 - fishComplete = builtins.replaceStrings ["__fish__"] ["${pkgs.fish}/bin/fish"] ( 36 - lib.fileContents ../res/nushellCompletions/fish.nu 37 - ); 38 - carapaceComplete = builtins.replaceStrings ["__carapace__"] ["${pkgs.carapace}/bin/carapace"] ( 39 - lib.fileContents ../res/nushellCompletions/carapace.nu 40 - ); 41 - completions = '' 42 - {|spans| 43 - # if the current command is an alias, get it's expansion 44 - let expanded_alias = (scope aliases | where name == $spans.0 | get -o 0 | get -o expansion) 45 - 46 - # overwrite 47 - 48 - let spans = (if $expanded_alias != null { 49 - # put the first word of the expanded alias first in the span 50 - $spans | skip 1 | prepend ($expanded_alias | split row " ") 51 - } else { $spans }) 52 - 53 - match $spans.0 { 54 - ${lib.optionalString conf.completers.fish '' 55 - nu => ${fishComplete} 56 - git => ${fishComplete} 57 - ''} 58 - _ => ${ 59 - if conf.completers.carapace 60 - then carapaceComplete 61 - else if conf.completers.fish 62 - then fishComplete 63 - else "{|spans| []}" 64 - } 65 - } | do $in $spans 66 - } 67 - ''; 68 - cnf = lib.fileContents ../res/command_not_found.nu; 69 - nu_config = let 70 - doCompletions = builtins.any (x: x) (builtins.attrValues conf.completers); 71 - in '' 72 - { 73 - show_banner: false, 74 - completions: { 75 - external: { 76 - enable: ${builtins.toJSON doCompletions} 77 - completer: ${ 78 - if doCompletions 79 - then completions 80 - else "{|spans| []}" 81 - } 82 - }, 83 - }, 84 - hooks: { 85 - ${lib.optionalString conf.commandNotFound '' 86 - command_not_found: ${cnf} 87 - ''} 88 - } 89 - } 90 - ''; 91 - init-starship = pkgs.runCommand "starship-init" {} '' 92 - ${pkgs.starship}/bin/starship init nu > $out 93 - ''; 94 - in { 95 - enable = true; 96 - configFile.text = '' 97 - $env.config = ${nu_config} 30 + nushell = 31 + let 32 + carapaceComplete = builtins.replaceStrings [ "__carapace__" ] [ "${pkgs.carapace}/bin/carapace" ] ( 33 + lib.fileContents ../res/nushellCompletions/carapace.nu 34 + ); 35 + cnf = lib.fileContents ../res/command_not_found.nu; 36 + nu_config = 37 + let 38 + doCompletions = builtins.any (x: x) (builtins.attrValues conf.completers); 39 + in 40 + '' 41 + { 42 + show_banner: false, 43 + completions: { 44 + external: { 45 + enable: ${builtins.toJSON doCompletions} 46 + completer: ${if doCompletions then carapaceComplete else ''{|spans| []}''} 47 + }, 48 + }, 49 + hooks: { 50 + ${lib.optionalString conf.commandNotFound '' 51 + command_not_found: ${cnf} 52 + ''} 53 + } 54 + } 55 + ''; 56 + init-starship = pkgs.runCommand "starship-init" { } '' 57 + ${pkgs.starship}/bin/starship init nu > $out 58 + ''; 59 + in 60 + { 61 + enable = true; 62 + configFile.text = '' 63 + $env.config = ${nu_config} 98 64 99 - ${lib.optionalString config.cow.starship.enable '' 100 - source ${init-starship} 101 - ''} 102 - ''; 103 - shellAliases = { 104 - "cd" = "z"; 105 - "py" = "python"; 106 - "🥺" = "sudo"; 65 + ${lib.optionalString config.cow.starship.enable '' 66 + source ${init-starship} 67 + ''} 68 + ''; 69 + shellAliases = { 70 + "cd" = "z"; 71 + "py" = "python"; 72 + "🥺" = "sudo"; 73 + }; 107 74 }; 108 - }; 109 75 }; 110 76 }; 111 77 }
+42 -30
homeModules/nvim.nix
··· 110 110 open_neotree = {}; 111 111 }; 112 112 113 - filetype.extension.mdx = "mdx"; 113 + filetype.extension = { 114 + mdx = "mdx"; 115 + }; 114 116 115 117 opts = { 116 118 number = true; ··· 349 351 ] 350 352 ); 351 353 352 - extraPlugins = with pkgs.vimPlugins; [ 353 - {plugin = pkgs.nvim-mdx;} 354 - {plugin = satellite-nvim;} 355 - {plugin = flatten-nvim;} 356 - {plugin = tiny-devicons-auto-colors-nvim;} 357 - ]; 354 + extraPlugins = with pkgs.vimPlugins; 355 + (lib.optional config.cow.dev.web {plugin = pkgs.nvim-mdx;}) 356 + ++ [ 357 + {plugin = satellite-nvim;} 358 + {plugin = flatten-nvim;} 359 + {plugin = tiny-devicons-auto-colors-nvim;} 360 + ]; 358 361 359 362 plugins = { 360 363 telescope = { ··· 559 562 560 563 treesitter = { 561 564 enable = true; 562 - luaConfig.post = '' 565 + luaConfig.post = lib.mkIf config.cow.dev.web '' 563 566 require('mdx').setup() 564 567 ''; 565 568 settings = { ··· 877 880 lsp = { 878 881 inlayHints.enable = true; 879 882 880 - servers = { 881 - clangd.enable = true; 882 - astro.enable = true; 883 - hls = { 883 + servers = let 884 + inherit 885 + (config.cow.dev) 886 + dotnet 887 + python 888 + haskell 889 + rust 890 + web 891 + c 892 + ; 893 + in { 894 + clangd.enable = c; 895 + astro.enable = web; 896 + hls = lib.mkIf haskell { 884 897 enable = true; 885 898 # ghcPackage = pkgs.haskell.compiler.ghc912; 886 899 package = pkgs.haskell.packages.ghc912.haskell-language-server; 887 900 }; 888 - sqls.enable = true; 889 - mdx_analyzer = { 901 + sqls.enable = web; 902 + mdx_analyzer = lib.mkIf web { 890 903 enable = true; 891 904 package = pkgs.mdx-language-server; 892 905 }; 893 906 # denols.enable = true; 894 - ts_ls.enable = true; 895 - html.enable = true; 896 - marksman.enable = true; 897 - cssls.enable = true; 898 - tailwindcss.enable = true; # Disabled until it doesn't build nodejs from source, bad tailwind 899 - jsonls.enable = true; 900 - yamlls.enable = true; 901 - ruff.enable = true; 902 - csharp_ls.enable = true; 903 - svelte.enable = true; 907 + ts_ls.enable = web; 908 + html.enable = web; 909 + marksman.enable = web; 910 + cssls.enable = web; 911 + tailwindcss.enable = web; 912 + jsonls.enable = web; 913 + yamlls.enable = web; 914 + ruff.enable = python; 915 + csharp_ls.enable = dotnet; 916 + svelte.enable = web; 904 917 nil_ls.enable = true; 905 918 bashls.enable = true; 906 - nushell.enable = true; 907 - taplo.enable = true; 919 + nushell.enable = config.cow.nushell.enable; 920 + taplo.enable = rust; 908 921 typos_lsp.enable = true; 909 - rust_analyzer = { 922 + rust_analyzer = lib.mkIf rust { 910 923 enable = true; 911 924 package = pkgs.rust-analyzer-nightly; 912 925 packageFallback = true; 913 926 }; 914 - lemminx.enable = true; 915 - eslint.enable = true; 916 - tinymist.enable = true; 927 + lemminx.enable = web; 928 + eslint.enable = web; 917 929 just.enable = true; 918 930 }; 919 931 };
+5 -1
homeModules/user-bean.nix
··· 8 8 pubkey = lib.mkOption { 9 9 type = lib.types.nullOr lib.types.str; 10 10 description = "Public key to accept for bean"; 11 - default = null; 11 + default = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKsVzdJra+x5aEuwTjL1FBOiMh9bftvs8QwsM1xyEbdd"; 12 12 }; 13 13 }; 14 14 ··· 35 35 signingKey = lib.mkIf (config.cow.bean.pubkey != null) config.cow.bean.pubkey; 36 36 }; 37 37 }; 38 + }; 39 + 40 + home.sessionVariables = { 41 + "EDITOR" = "nvim"; 38 42 }; 39 43 40 44 cow = {
+9
homeModules/utils.nix
··· 26 26 libqalculate 27 27 p7zip 28 28 poop 29 + file 30 + screen 31 + util-linux 32 + inetutils 33 + just 34 + man-pages 35 + htop 36 + dig 37 + doggo 29 38 30 39 hyfetch 31 40 fastfetch
+42 -42
nixosConfigurations/aperture.nix
··· 1 1 { 2 2 lib, 3 - config, 4 3 inputs, 5 4 outputs, 6 5 ... 7 - }: { 6 + }: 7 + { 8 8 system = "x86_64-linux"; 9 9 10 - modules = 11 - (builtins.attrValues outputs.nixosModules) 12 - ++ [ 13 - inputs.nixos-hardware.nixosModules.framework-13th-gen-intel 14 - { 15 - home-manager.users.bean.home.stateVersion = "25.05"; 16 - system.stateVersion = "25.05"; 17 - networking.hostName = "aperture"; 10 + modules = (builtins.attrValues outputs.nixosModules) ++ [ 11 + inputs.nixos-hardware.nixosModules.framework-13th-gen-intel 12 + { 13 + home-manager.users.bean.home.stateVersion = "25.05"; 14 + system.stateVersion = "25.05"; 15 + networking.hostName = "aperture"; 18 16 19 - users.users = let 17 + users.users = 18 + let 20 19 secureRoot = "/nix/persist/secure"; 21 - in { 20 + in 21 + { 22 22 bean.password = "qaswedfr"; 23 23 # bean.hashedPasswordFile = "${secureRoot}/hashed-passwd"; 24 24 root.hashedPasswordFile = "${secureRoot}/hashed-passwd"; 25 25 }; 26 26 27 - cow = { 28 - lanzaboote.enable = true; 29 - role-laptop = { 30 - enable = true; 31 - fingerPrintSensor = true; 32 - }; 33 - gaming.enable = true; 34 - imperm.enable = true; 35 - disks = { 36 - enable = true; 37 - luks = true; 38 - swap = true; 39 - }; 27 + cow = { 28 + lanzaboote.enable = true; 29 + role-laptop = { 30 + enable = true; 31 + fingerPrintSensor = true; 40 32 }; 33 + gaming.enable = true; 34 + imperm.enable = true; 35 + disks = { 36 + enable = true; 37 + swap = true; 38 + luks = true; 39 + }; 40 + }; 41 41 42 - boot.initrd.availableKernelModules = [ 43 - "xhci_pci" 44 - "thunderbolt" 45 - "nvme" 46 - "usb_storage" 47 - "sd_mod" 48 - ]; 49 - boot.initrd.kernelModules = []; 50 - boot.kernelModules = ["kvm-intel"]; 51 - boot.extraModulePackages = []; 52 - boot.binfmt.emulatedSystems = ["aarch64-linux"]; 42 + boot.initrd.availableKernelModules = [ 43 + "xhci_pci" 44 + "thunderbolt" 45 + "nvme" 46 + "usb_storage" 47 + "sd_mod" 48 + ]; 49 + boot.initrd.kernelModules = [ ]; 50 + boot.kernelModules = [ "kvm-intel" ]; 51 + boot.extraModulePackages = [ ]; 52 + boot.binfmt.emulatedSystems = [ "aarch64-linux" ]; 53 53 54 - hardware.framework.enableKmod = false; 54 + hardware.framework.enableKmod = false; 55 55 56 - powerManagement.cpuFreqGovernor = lib.mkDefault "powersave"; 57 - hardware.enableRedistributableFirmware = lib.mkDefault true; 58 - hardware.cpu.intel.updateMicrocode = true; 59 - } 60 - ]; 56 + powerManagement.cpuFreqGovernor = lib.mkDefault "powersave"; 57 + hardware.enableRedistributableFirmware = lib.mkDefault true; 58 + hardware.cpu.intel.updateMicrocode = true; 59 + } 60 + ]; 61 61 }
+88
nixosConfigurations/black-mesa.nix
··· 1 + { 2 + inputs, 3 + outputs, 4 + ... 5 + }: 6 + { 7 + system = "x86_64-linux"; 8 + 9 + modules = (builtins.attrValues outputs.nixosModules) ++ [ 10 + inputs.nixos-hardware.nixosModules.common-gpu-amd 11 + inputs.nixos-hardware.nixosModules.common-cpu-amd 12 + { 13 + home-manager.users.bean.home.stateVersion = "25.05"; 14 + system.stateVersion = "25.05"; 15 + networking.hostName = "black-mesa"; 16 + 17 + powerManagement.cpuFreqGovernor = "performance"; 18 + 19 + boot.initrd.availableKernelModules = [ 20 + "nvme" 21 + "xhci_pci" 22 + "ahci" 23 + "usbhid" 24 + "usb_storage" 25 + "sd_mod" 26 + ]; 27 + boot.kernelModules = [ "kvm-amd" ]; 28 + boot.extraModulePackages = [ ]; 29 + 30 + # Other disks handled by cow.disks 31 + fileSystems."/mnt/storage" = { 32 + device = "/dev/sda1"; 33 + fsType = "btrfs"; 34 + }; 35 + 36 + users.users = 37 + let 38 + secureRoot = "/nix/persist/secure"; 39 + in 40 + { 41 + bean.hashedPasswordFile = "${secureRoot}/hashed-passwd"; 42 + root.hashedPasswordFile = "${secureRoot}/hashed-passwd"; 43 + }; 44 + 45 + cow = { 46 + lanzaboote.enable = true; 47 + ssh-server.enable = true; 48 + role-desktop.enable = true; 49 + gaming.enable = true; 50 + imperm.enable = true; 51 + disks = { 52 + enable = true; 53 + swap = true; 54 + luks = true; 55 + }; 56 + }; 57 + } 58 + { 59 + # Bingus! 60 + imports = [ inputs.bingus.nixosModules.default ]; 61 + nixpkgs.overlays = [ inputs.bingus.overlays.default ]; 62 + 63 + services.bingus-bot = { 64 + enable = true; 65 + replyChannels = [ 66 + 1295447496948191262 67 + 1295245646542143489 68 + ]; 69 + }; 70 + } 71 + { 72 + # for WOL 73 + systemd.network.links."79-eth-wol" = { 74 + matchConfig = { 75 + Type = "ether"; 76 + Driver = "!veth"; 77 + Virtualization = "false"; 78 + }; 79 + linkConfig = { 80 + WakeOnLan = "magic"; 81 + NamePolicy = "keep kernel database onboard slot path"; 82 + AlternativeNamesPolicy = "database onboard slot path mac"; 83 + MACAddressPolicy = "persistent"; 84 + }; 85 + }; 86 + } 87 + ]; 88 + }
+99
nixosConfigurations/installer.nix
··· 1 + { 2 + lib, 3 + outputs, 4 + ... 5 + }: 6 + { 7 + system = "x86_64-linux"; 8 + 9 + modules = (builtins.attrValues outputs.nixosModules) ++ [ 10 + ( 11 + { 12 + modulesPath, 13 + pkgs, 14 + ... 15 + }: 16 + { 17 + imports = [ 18 + "${modulesPath}/installer/cd-dvd/installation-cd-minimal.nix" 19 + ]; 20 + 21 + services.kmscon = { 22 + enable = true; 23 + autologinUser = "root"; 24 + fonts = [ 25 + { 26 + name = "FiraMono Nerd Font Mono"; 27 + package = pkgs.nerd-fonts.fira-mono; 28 + } 29 + ]; 30 + }; 31 + 32 + boot = 33 + let 34 + supportedFilesystems = { 35 + btrfs = true; 36 + reiserfs = lib.mkForce false; 37 + vfat = true; 38 + f2fs = true; 39 + xfs = true; 40 + ntfs = true; 41 + cifs = true; 42 + zfs = lib.mkForce false; 43 + }; 44 + in 45 + { 46 + initrd.systemd.enable = false; 47 + inherit supportedFilesystems; 48 + initrd = { 49 + inherit supportedFilesystems; 50 + }; 51 + }; 52 + 53 + system.extraDependencies = [ 54 + outputs.nixosConfigurations.aperture.config.system.build.toplevel 55 + outputs.nixosConfigurations.black-mesa.config.system.build.toplevel 56 + ]; 57 + 58 + environment.systemPackages = with pkgs; [ 59 + disko 60 + sbctl 61 + ]; 62 + } 63 + ) 64 + ( 65 + { pkgs, ... }: 66 + { 67 + system.stateVersion = "25.05"; 68 + networking.hostName = "cow-installer"; 69 + 70 + networking.networkmanager.enable = lib.mkForce false; 71 + 72 + users.users.root = { 73 + shell = pkgs.nushell; 74 + }; 75 + 76 + home-manager.users.root.home.stateVersion = "25.05"; 77 + home-manager.users.root.cow = { 78 + nushell = { 79 + enable = true; 80 + commandNotFound = true; 81 + }; 82 + neovim.enable = true; 83 + htop.enable = true; 84 + starship.enable = true; 85 + yazi.enable = true; 86 + dev.enable = false; 87 + comma.enable = true; 88 + cat.enable = true; 89 + }; 90 + 91 + cow = { 92 + network.wireless = true; 93 + hm.enable = true; 94 + cat.enable = true; 95 + }; 96 + } 97 + ) 98 + ]; 99 + }
+4
nixosModules/base.nix
··· 21 21 ]; 22 22 environment.etc."flake-src".source = inputs.self; 23 23 24 + programs.ssh.startAgent = true; 25 + documentation.man.generateCaches = false; 26 + services.upower.enable = true; 27 + 24 28 boot.tmp.cleanOnBoot = lib.mkDefault true; 25 29 services.logind.settings.Login.RuntimeDirectorySize = lib.mkDefault "100M"; 26 30
+4 -1
nixosModules/gaming.nix
··· 15 15 extest.enable = true; 16 16 }; 17 17 18 - programs.gamescope.enable = true; 18 + programs.gamescope = { 19 + enable = true; 20 + capSysNice = true; 21 + }; 19 22 20 23 environment.systemPackages = with pkgs; [ 21 24 prismlauncher
+2
nixosModules/imperm.nix
··· 21 21 keep = lib.mkOption { 22 22 type = lib.types.listOf lib.types.str; 23 23 description = "Paths to keep that should be backed up"; 24 + default = []; 24 25 }; 25 26 keepCache = lib.mkOption { 26 27 type = lib.types.listOf lib.types.str; 27 28 description = "Paths to keep that shouldn't be backed up"; 29 + default = []; 28 30 }; 29 31 }; 30 32
+39
nixosModules/role-desktop.nix
··· 1 + {...}: { 2 + config, 3 + lib, 4 + ... 5 + }: { 6 + options.cow.role-desktop = { 7 + enable = lib.mkEnableOption "configuring a desktop computer with GUI"; 8 + }; 9 + 10 + config = lib.mkIf config.cow.role-desktop.enable { 11 + security.sudo.wheelNeedsPassword = false; 12 + 13 + home-manager.users.bean.cow = { 14 + music.enable = true; 15 + news.enable = true; 16 + qmplay2.enable = true; 17 + sync.enable = true; 18 + kde-connect.enable = true; 19 + dev.enable = true; 20 + }; 21 + 22 + cow = { 23 + bean.enable = true; 24 + firewall.openForUsers = true; 25 + hm.enable = true; 26 + network = { 27 + bluetooth = lib.mkDefault true; 28 + wireless = lib.mkDefault true; 29 + }; 30 + cat.enable = true; 31 + gdi = { 32 + enable = true; 33 + doIdle = lib.mkDefault false; 34 + showGreet = true; 35 + }; 36 + audio.enable = true; 37 + }; 38 + }; 39 + }
+1
nixosModules/role-laptop.nix
··· 30 30 cat.enable = true; 31 31 gdi = { 32 32 enable = true; 33 + doIdle = true; 33 34 showGreet = true; 34 35 }; 35 36 audio.enable = true;
+34
nixosModules/ssh-server.nix
··· 1 + {...}: { 2 + lib, 3 + config, 4 + ... 5 + }: { 6 + options.cow.ssh-server.enable = lib.mkEnableOption "OpenSSH daemon for accepting connections + customizations. Uses port 8069"; 7 + 8 + config = lib.mkIf config.cow.ssh-server.enable { 9 + # For nicer term rendering 10 + environment.enableAllTerminfo = true; 11 + 12 + services.openssh = { 13 + enable = true; 14 + openFirewall = true; 15 + banner = '' 16 + -=≡ ${lib.toUpper config.networking.hostName} ≡=- 17 + 18 + ''; 19 + listenAddresses = [ 20 + { 21 + addr = "0.0.0.0"; 22 + } 23 + ]; 24 + # TODO: Maybe just use 22 like a normal person 25 + ports = [8069]; 26 + settings.GSSAPIAuthentication = false; 27 + settings.PasswordAuthentication = false; 28 + settings.UseDns = false; 29 + # settings.LogLevel = "DEBUG1"; 30 + settings.PermitRootLogin = "no"; 31 + settings.KbdInteractiveAuthentication = false; 32 + }; 33 + }; 34 + }
+12 -9
nixosModules/user-bean.nix
··· 1 - {...}: { 1 + { ... }: 2 + { 2 3 config, 3 4 lib, 4 5 pkgs, 5 6 ... 6 - }: let 7 + }: 8 + let 7 9 pubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKsVzdJra+x5aEuwTjL1FBOiMh9bftvs8QwsM1xyEbdd"; 8 - in { 10 + in 11 + { 9 12 options.cow.bean = { 10 13 enable = lib.mkEnableOption "Bean user"; 11 14 sudoer = lib.mkEnableOption "Bean being a sudoer"; 12 15 }; 13 16 14 - config = { 15 - users.users.bean = lib.mkIf config.cow.bean.enable { 17 + config = lib.mkIf config.cow.bean.enable { 18 + users.users.bean = { 16 19 isNormalUser = true; 17 20 description = "Ben C"; 18 21 extraGroups = lib.optional config.cow.bean.sudoer "wheel"; 19 22 shell = pkgs.nushell; 20 - openssh.authorizedKeys.keys = pubkey; 23 + openssh.authorizedKeys.keys = [ pubkey ]; 21 24 }; 22 25 23 26 home-manager.users.bean = { 24 27 cow.bean = { 25 - enable = config.cow.bean.enable; 28 + inherit (config.cow.bean) enable; 26 29 inherit pubkey; 27 30 }; 28 - cow.games.enable = config.cow.bean.enable && config.cow.gaming.enable; 29 - cow.gdi = lib.mkIf config.cow.bean.enable { 31 + cow.games.enable = config.cow.gaming.enable; 32 + cow.gdi = { 30 33 inherit (config.cow.gdi) enable doIdle; 31 34 useUWSM = true; 32 35 };
-13
res/nushellCompletions/fish.nu
··· 1 - {|spans| 2 - __fish__ --command $"complete '--do-complete=($spans | str replace --all "'" "\\'" | str join ' ')'" 3 - | from tsv --flexible --noheaders --no-infer 4 - | rename value description 5 - | update value {|row| 6 - let value = $row.value 7 - let need_quote = ['\' ',' '[' ']' '(' ')' ' ' '\t' "'" '"' "`"] | any {$in in $value} 8 - if ($need_quote and ($value | path exists)) { 9 - let expanded_path = if ($value starts-with ~) {$value | path expand --no-symlink} else {$value} 10 - $'"($expanded_path | str replace --all "\"" "\\\"")"' 11 - } else {$value} 12 - } 13 - }