diff --git a/flake.nix b/flake.nix index e6cf000..0b3eafa 100644 --- a/flake.nix +++ b/flake.nix @@ -67,6 +67,7 @@ impermanence.nixosModules.impermanence agenix.nixosModules.default nixos-mailserver.nixosModule + noshell.nixosModules.default phoenix.nixosModules.default nix-zulip'.nixosModules.zulip { @@ -76,18 +77,8 @@ nix-zulip'.overlays.default ]; } - ( - if machine.hostname != "109-199-104-83" - then - {config, ...}: { - imports = [ - ./machines/${machine.hostname}/configuration.nix - ]; - networking.domain = config.networking.hostName; # temporary fix - } - else {imports = machine.modules;} - ) - ]; + ] + ++ machine.modules; }; configurationWithHomeManager = machine: (configuration machine [ @@ -113,7 +104,6 @@ ) ); } - noshell.nixosModules.default ]); in { nixosConfigurations = diff --git a/machines.nix b/machines.nix index d79d693..be8023e 100644 --- a/machines.nix +++ b/machines.nix @@ -2,11 +2,33 @@ lenovo = { hostname = "lenovo"; system = "x86_64-linux"; - users = [ - "andromeda" - "mtgmonkey" - ]; + users = ["andromeda"]; modules = [ + # impermanence + ./modules/nixos/impermanence.nix + + # hardware configuration + # includes `system.stateVersion` + ./machines/lenovo.nix + + # boot process + # systemd-boot + ./modules/nixos/boot/lenovo.nix + + # networking + ./modules/nixos/laptop.nix + + # boilerplate settings + ./modules/nixos/common.nix + + # ly display manager + ./modules/nixos/ly.nix + + # sway window manager + ./modules/nixos/sway.nix + + # apps + ./modules/nixos/steam.nix ]; }; "109-199-104-83" = { @@ -14,6 +36,9 @@ system = "x86_64-linux"; users = []; modules = [ + # impermanence + ./modules/nixos/impermanence.nix + # hardware configuration # verbatim as `nixos-generate-config` AND `system.stateVersion` ./machines/109-199-104-83.nix diff --git a/machines/lenovo/configuration.nix b/machines/lenovo.nix similarity index 55% rename from machines/lenovo/configuration.nix rename to machines/lenovo.nix index 152d136..15f0ab3 100644 --- a/machines/lenovo/configuration.nix +++ b/machines/lenovo.nix @@ -1,66 +1,17 @@ { config, lib, + pkgs, modulesPath, - machine, ... }: { - imports = [ - ./impermanence.nix - (modulesPath + "/installer/scan/not-detected.nix") - ]; - boot.loader = { - efi.canTouchEfiVariables = true; - systemd-boot.enable = true; - }; - hardware.bluetooth = { - enable = true; - powerOnBoot = true; - }; - i18n.defaultLocale = "de_DE.UTF-8"; - networking = { - dhcpcd.enable = true; - firewall.enable = true; - hostName = machine.hostname; - networkmanager.enable = true; - }; - nix.settings.experimental-features = [ - "nix-command" - "flakes" - ]; - nixpkgs.config.allowUnfreePredicate = pkg: - builtins.elem (lib.getName pkg) [ - "steam" - "steam-original" - "steam-unwrapped" - "steam-run" - ]; - programs = { - noshell.enable = true; - steam.enable = true; - sway.enable = true; - }; - services = { - blueman.enable = true; - displayManager = { - enable = true; - ly.enable = true; - }; - libinput.enable = true; - openssh.enable = true; - printing.enable = true; - }; - system.stateVersion = "26.05"; - time.timeZone = "Europe/Berlin"; + imports = [(modulesPath + "/installer/scan/not-detected.nix")]; boot.initrd.availableKernelModules = ["xhci_pci" "nvme" "sdhci_pci"]; boot.initrd.kernelModules = []; boot.kernelModules = ["kvm-intel"]; boot.extraModulePackages = []; fileSystems."/" = { - #device = "none"; - #fsType = "tmpfs"; - #options = ["defaults" "size=60%" "mode=755"]; device = "/dev/disk/by-uuid/5455cfb4-0efd-4f55-b496-d2cab3f419b7"; fsType = "btrfs"; options = ["subvol=root"]; @@ -88,12 +39,12 @@ done btrfs subvolume create /btrfs_tmp/root - mkdir /btrfs_tmp/root/nix + mkdir /btrfs_tmp/root/persist mkdir /btrfs_tmp/root/etc - mount ${config.fileSystems."/nix".device} /btrfs_tmp/root/nix - cp /btrfs_tmp/root/nix/persist/etc/ssh /btrfs_tmp/root/etc/ssh -r - umount /btrfs_tmp/root/nix - rm -r /btrfs_tmp/root/nix + mount ${config.fileSystems."/persist".device} /btrfs_tmp/root/persist + cp /btrfs_tmp/root/persist/etc/ssh /btrfs_tmp/root/etc/ssh -r + umount /btrfs_tmp/root/persist + rm -r /btrfs_tmp/root/persist umount /btrfs_tmp ''; @@ -102,6 +53,12 @@ fsType = "btrfs"; }; + fileSystems."/persist" = { + device = "/dev/disk/by-uuid/5455cfb4-0efd-4f55-b496-d2cab3f419b7"; + fsType = "btrfs"; + options = ["subvol=persist"]; + }; + fileSystems."/boot" = { device = "/dev/disk/by-uuid/F425-55BA"; fsType = "vfat"; @@ -112,4 +69,5 @@ nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + system.stateVersion = "26.05"; } diff --git a/modules/nixos/boot/lenovo.nix b/modules/nixos/boot/lenovo.nix new file mode 100644 index 0000000..fdd5e14 --- /dev/null +++ b/modules/nixos/boot/lenovo.nix @@ -0,0 +1,6 @@ +{ + boot.loader = { + efi.canTouchEfiVariables = true; + systemd-boot.enable = true; + }; +} diff --git a/machines/lenovo/impermanence.nix b/modules/nixos/impermanence.nix similarity index 50% rename from machines/lenovo/impermanence.nix rename to modules/nixos/impermanence.nix index 2867ed5..7f0062b 100644 --- a/machines/lenovo/impermanence.nix +++ b/modules/nixos/impermanence.nix @@ -1,19 +1,15 @@ { - environment.persistence."/nix/persist" = { + fileSystems."/persist".neededForBoot = true; + environment.persistence."/persist" = { enable = true; hideMounts = true; directories = [ "/var/log" - "/var/lib/bluetooth" "/var/lib/nixos" "/var/lib/systemd/coredump" - "/etc/NetworkManager/system-connections" - "/etc/ssh" - "/etc/ly/custom-sessions" ]; files = [ "/etc/machine-id" - "/etc/ly/save.txt" ]; }; } diff --git a/modules/nixos/laptop.nix b/modules/nixos/laptop.nix new file mode 100644 index 0000000..9002c49 --- /dev/null +++ b/modules/nixos/laptop.nix @@ -0,0 +1,39 @@ +{ + # bluetooth + hardware.bluetooth = { + enable = true; + powerOnBoot = true; + }; + services.blueman.enable = true; + + # locale + i18n.defaultLocale = "de_DE.UTF-8"; + time.timeZone = "Europe/Berlin"; + + # networking + networking = { + firewall.enable = true; + networkmanager.enable = true; + }; + + # misc + services = { + printing.enable = true; + + # trackpad + libinput.enable = true; + + # ssh + openssh.enable = true; + }; + + # impermanence + environment.persistence."/persist".directories = [ + # bluetooth + "/var/lib/bluetooth" + # wifi connections + "/etc/NetworkManager/system-connections" + # machine ssh keys + "/etc/ssh" + ]; +} diff --git a/modules/nixos/ly.nix b/modules/nixos/ly.nix new file mode 100644 index 0000000..34cbb49 --- /dev/null +++ b/modules/nixos/ly.nix @@ -0,0 +1,8 @@ +{ + services.displayManager = { + enable = true; + ly.enable = true; + }; + # TODO needs to be manually updated when new users added + environment.persistence."/persist".files = ["/etc/ly/save.txt"]; +} diff --git a/modules/nixos/steam.nix b/modules/nixos/steam.nix new file mode 100644 index 0000000..5056ea9 --- /dev/null +++ b/modules/nixos/steam.nix @@ -0,0 +1,10 @@ +{lib, ...}: { + nixpkgs.config.allowUnfreePredicate = pkg: + builtins.elem (lib.getName pkg) [ + "steam" + "steam-original" + "steam-unwrapped" + "steam-run" + ]; + programs.steam.enable = true; +} diff --git a/modules/nixos/sway.nix b/modules/nixos/sway.nix new file mode 100644 index 0000000..30be2e9 --- /dev/null +++ b/modules/nixos/sway.nix @@ -0,0 +1,3 @@ +{ + programs.sway.enable = true; +} diff --git a/users.nix b/users.nix index 1d78a87..8654bc1 100644 --- a/users.nix +++ b/users.nix @@ -36,7 +36,7 @@ in { ]; }; }; - environment.persistence."/nix/persist".users = lib.mkIf config.environment.persistence."/nix/persist".enable ( + environment.persistence."/persist".users = lib.mkIf config.environment.persistence."/persist".enable ( builtins.mapAttrs (name: value: lib.mkIf (builtins.elem name machine.users) value) { @@ -56,16 +56,6 @@ in { ".brush_history" ]; }; - "mtgmonkey" = { - directories = [ - ".local/share/zoxide" - ".ssh" - ]; - files = [ - ".bash_history" - ".brush_history" - ]; - }; } ); } diff --git a/users/andromeda/home.nix b/users/andromeda/home.nix index ce2c0f5..3fd9b05 100644 --- a/users/andromeda/home.nix +++ b/users/andromeda/home.nix @@ -16,82 +16,6 @@ "${config.home.homeDirectory}/${background-path}" ]; }; - sway_config' = builtins.toFile "sway_config" '' - set $mod Mod4 - set $left h - set $down j - set $up k - set $right l - set $term alacritty - set $menu wmenu-run - set $screenshot grim -g "$(slurp)" - floating_modifier $mod normal - - workspace_layout stacking - output * bg ${config.home.homeDirectory}/${background-path} fill - - # launch programs - bindsym $mod+Shift+Return exec $term - bindsym $mod+Shift+d exec $menu - bindsym $mod+Shift+a exec anki - bindsym $mod+Shift+q exec librewolf - bindsym $mod+Shift+s exec $screenshot - - bindsym $mod+Shift+c kill - - bindsym $mod+Shift+r reload - - bindsym $mod+Shift+Alt+q exit - - bindsym $mod+$left focus left - bindsym $mod+$down focus down - bindsym $mod+$up focus up - bindsym $mod+$right focus right - - bindsym $mod+Shift+$left move left - bindsym $mod+Shift+$down move down - bindsym $mod+Shift+$up move up - bindsym $mod+Shift+$right move right - - bindsym $mod+1 workspace number 1 - bindsym $mod+2 workspace number 2 - bindsym $mod+3 workspace number 3 - bindsym $mod+4 workspace number 4 - bindsym $mod+5 workspace number 5 - bindsym $mod+6 workspace number 6 - bindsym $mod+7 workspace number 7 - bindsym $mod+8 workspace number 8 - bindsym $mod+9 workspace number 9 - bindsym $mod+0 workspace number 0 - - bindsym $mod+Shift+1 move container to workspace number 1 - bindsym $mod+Shift+2 move container to workspace number 2 - bindsym $mod+Shift+3 move container to workspace number 3 - bindsym $mod+Shift+4 move container to workspace number 4 - bindsym $mod+Shift+5 move container to workspace number 5 - bindsym $mod+Shift+6 move container to workspace number 6 - bindsym $mod+Shift+7 move container to workspace number 7 - bindsym $mod+Shift+8 move container to workspace number 8 - bindsym $mod+Shift+9 move container to workspace number 9 - bindsym $mod+Shift+0 move container to workspace number 0 - - bindsym $mod+f fullscreen - bindsym $mod+Shift+space floating toggle - bindsym $mod+Shift+minus move scratchpad - bindsym $mod+minus scratchpad show - - bindsym --locked XF86AudioMute exec pactl set-sink-mute \@DEFAULT_SINK@ toggle - bindsym --locked XF86AudioLowerVolume exec pactl set-sink-volume \@DEFAULT_SINK@ -5% - bindsym --locked XF86AudioRaiseVolume exec pactl set-sink-volume \@DEFAULT_SINK@ +5% - bindsym --locked XF86AudioMicMute exec pact set-source-mute \@DEFAULT_SOURCE@ toggle - bindsym --locked XF86MonBrightnessDown exec brightnessctl set 5%- - bindsym --locked XF86MonbrightnessUp exec brightnessctl set 5%+ - - default_border none - font pango:monospace 0.001 - titlebar_border_thickness 0 - titlebar_padding 0 - ''; in { imports = [./stylix.nix]; xdg.configFile."shell".source = lib.getExe pkgs.brush; @@ -103,6 +27,7 @@ in { stateVersion = "26.05"; packages = [ pkgs.acpi + pkgs.anki pkgs.agenix pkgs.alacritty pkgs.anki diff --git a/users/mtgmonkey/home.nix b/users/mtgmonkey/home.nix deleted file mode 100644 index 173a547..0000000 --- a/users/mtgmonkey/home.nix +++ /dev/null @@ -1,172 +0,0 @@ -{ - config, - lib, - machine, - pkgs, - ... -}: { - imports = [./stylix.nix]; - xdg.configFile."shell".source = lib.getExe pkgs.brush; - home = { - username = "mtgmonkey"; - homeDirectory = "/home/${config.home.username}"; - stateVersion = "26.05"; - packages = [ - pkgs.acpi - pkgs.brightnessctl - pkgs.brush - pkgs.dust - pkgs.fzf - pkgs.glow - pkgs.jmtpfs - pkgs.nix-output-monitor - pkgs.ranger - pkgs.rip2 - pkgs.ripgrep - pkgs.tree - pkgs.zoxide - ]; - }; - programs = { - bash = { - enable = true; - shellAliases = { - neofetch = "fastfetch"; - ls = lib.mkForce "lsd"; - ll = lib.mkForce "lsd -l"; - l = "lsd -la"; - cd = "z"; - gg = "git log --oneline --abbrev-commit --all --graph --decorate --color"; - md = "glow"; - }; - bashrcExtra = '' - PS1="\u@\h:\w$" - eval "$(zoxide init bash)" - ''; - }; - btop = { - enable = true; - settings = { - theme_background = false; - vim_keys = true; - rounded_corners = false; - graph_symbol = "braille"; - update_ms = 150; - proc_sorting = "cpu lazy"; - proc_gradient = false; - proc_left = true; - cpu_single_graph = true; - cpu_bottom = true; - clock_format = "/user@/host:/uptime@%H:%M"; - background_update = true; - mem_graphs = false; - mem_below_net = true; - show_swap = false; - only_physical = true; - show_io_stat = true; - io_mode = false; - io_graph_combined = false; - }; - }; - fastfetch.enable = true; - git = { - enable = true; - settings = { - user = { - name = config.home.username; - email = "${config.home.username}@${machine.hostname}"; - }; - init.defaultBranch = "master"; - }; - }; - gh.enable = true; - home-manager.enable = true; - lsd.enable = true; - nvf = { - enable = true; - settings.vim = { - autocomplete.nvim-cmp.enable = false; - formatter.conform-nvim = { - enable = true; - setupOpts.format_on_save = { - lsp_format = "fallback"; - timeout_ms = 5000; - }; - }; - lsp.otter-nvim.enable = true; - git.enable = true; - keymaps = [ - { - key = ""; - mode = ["i" "n" "v" "c"]; - action = ""; - } - { - key = ""; - mode = ["i" "n" "v" "c"]; - action = ""; - } - { - key = ""; - mode = ["i" "n" "v" "c"]; - action = ""; - } - { - key = ""; - mode = ["i" "n" "v" "c"]; - action = ""; - } - { - key = "jj"; - mode = ["i"]; - action = ""; - } - { - key = "kk"; - mode = ["i"]; - action = ""; - } - { - key = "jk"; - mode = ["i"]; - action = ""; - } - { - key = "kj"; - mode = ["i"]; - action = ""; - } - { - key = ""; - mode = ["i"]; - action = ""; - } - ]; - languages = { - nix = { - enable = true; - format.enable = true; - lsp.enable = true; - }; - haskell = { - enable = true; - lsp.enable = true; - }; - }; - lineNumberMode = "relative"; - options = { - tabstop = 2; - shiftwidth = 2; - expandtab = true; - smarttab = true; - foldmethod = "indent"; - number = true; - colorcolumn = "80"; - }; - statusline.lualine.enable = true; - syntaxHighlighting = true; - }; - }; - ssh.enable = true; - }; -} diff --git a/users/mtgmonkey/stylix.nix b/users/mtgmonkey/stylix.nix deleted file mode 100644 index f2538b0..0000000 --- a/users/mtgmonkey/stylix.nix +++ /dev/null @@ -1,29 +0,0 @@ -{ - pkgs, - config, - ... -}: { - stylix = { - enable = true; - # rebecca has lavener bkg - # tube has dark gray bkg - # silk-light is light theme - base16Scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-material-dark-hard.yaml"; - polarity = "dark"; - fonts = { - monospace = { - package = pkgs.miracode; - name = "Miracode"; - }; - serif = config.stylix.fonts.sansSerif; - emoji = { - package = pkgs.noto-fonts-color-emoji; - name = "Noto Color Emoji"; - }; - sizes = { - applications = 12; - terminal = 10; - }; - }; - }; -}