diff --git a/.gitignore b/.gitignore index 3357b94..1df9283 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,7 @@ # Ignore build outputs from performing a nix-build or `nix build` command result result-* + +# ---> Kate +# Ignore kate's swap files +*.kate-swp diff --git a/flake.lock b/flake.lock index a4098ff..4a32b35 100644 --- a/flake.lock +++ b/flake.lock @@ -50,11 +50,11 @@ ] }, "locked": { - "lastModified": 1687647343, - "narHash": "sha256-1/o/i9KEFOBdlF9Cs04kBcqDFbYMt6W4SMqGa+QnnaI=", + "lastModified": 1689134369, + "narHash": "sha256-0G9dutIvhS/WUr3Awcnqw71g8EVVvvkOhVDnDDbY4Fw=", "owner": "nix-community", "repo": "home-manager", - "rev": "0ee5ab611dc1fbb5180bd7d88d2aeb7841a4d179", + "rev": "e42fb59768f0305085abde0dd27ab5e0cc15420c", "type": "github" }, "original": { @@ -70,11 +70,11 @@ ] }, "locked": { - "lastModified": 1687163790, - "narHash": "sha256-CmG/ZdswJrWM0CMgJiVyWfO6LqaI4SKEAx9IrnYDrpI=", + "lastModified": 1687871164, + "narHash": "sha256-bBFlPthuYX322xOlpJvkjUBz0C+MOBjZdDOOJJ+G2jU=", "owner": "nix-community", "repo": "home-manager", - "rev": "ac53777f52929bc82efcd2830bfc5aa60bcb4337", + "rev": "07c347bb50994691d7b0095f45ebd8838cf6bc38", "type": "github" }, "original": { @@ -101,11 +101,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1687379288, - "narHash": "sha256-cSuwfiqYfeVyqzCRkU9AvLTysmEuSal8nh6CYr+xWog=", + "lastModified": 1689137672, + "narHash": "sha256-QZoHxr0a73x6rQcAo5CiwYpysHbSnk7lAR8/16um7mM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ef0bc3976340dab9a4e087a0bcff661a8b2e87f3", + "rev": "98da3dd0de6660d4abed7bb74e748694bd803413", "type": "github" }, "original": { @@ -116,11 +116,11 @@ }, "nixpkgs-unstable": { "locked": { - "lastModified": 1686960236, - "narHash": "sha256-AYCC9rXNLpUWzD9hm+askOfpliLEC9kwAo7ITJc4HIw=", + "lastModified": 1689098530, + "narHash": "sha256-fxc/9f20wRyo/5ydkmZkX/Sh/ULa7RcT8h+cUv8p/44=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "04af42f3b31dba0ef742d254456dc4c14eedac86", + "rev": "f2406198ea0e4e37d4380d0e20336c575b8f8ef9", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 5b5c277..8f48cb0 100755 --- a/flake.nix +++ b/flake.nix @@ -43,20 +43,12 @@ outputs = {nixpkgs, nixpkgs-unstable, agenix, home-manager, home-manager-unstabl nixosConfigurations = { Archie = nixpkgs-unstable.lib.nixosSystem { system = "x86_64-linux"; - pkgs = import nixpkgs-unstable { - system = "x86_64-linux"; - config = { allowUnfree = true; }; # TODO: Find why this doesn't work - overlays = - let - discordOverlay = self: super: { - discord = super.discord.override { - withOpenASAR = true; - withVencord = true; - }; - }; - in - [ discordOverlay ]; - }; + /* + I used to set up nixpkgs in the flake, but doing that made + defining overlays in modules impossible (or at least I could + not figure out how) + Also has nice side effect of making it easier to add new systems :3 + */ modules = [ # Needed for nix-index { nix.nixPath = [ "nixpkgs=${nixpkgs}" ]; } @@ -65,16 +57,13 @@ outputs = {nixpkgs, nixpkgs-unstable, agenix, home-manager, home-manager-unstabl ./roles/common ./roles/desktop ./roles/kde + ./roles/gaming ./machines/Archie ]; }; Everest = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; - pkgs = import nixpkgs { - system = "x86_64-linux"; - config = { allowUnfree = false; }; # TODO: Find why this doesn't work - }; modules = [ # Needed for nix-index { nix.nixPath = [ "nixpkgs=${nixpkgs}" ]; } diff --git a/machines/Archie/configuration.nix b/machines/Archie/configuration.nix index c01b561..4b56c96 100644 --- a/machines/Archie/configuration.nix +++ b/machines/Archie/configuration.nix @@ -18,6 +18,8 @@ }; boot.loader.efi.canTouchEfiVariables = true; + boot.kernelPackages = pkgs.linuxKernel.packages.linux_xanmod_latest; + networking.hostName = "Archie"; # Define your hostname. networking.networkmanager.enable = true; # Enable networking diff --git a/machines/Archie/hardware-configuration.nix b/machines/Archie/hardware-configuration.nix index 08c86b5..48133e7 100644 --- a/machines/Archie/hardware-configuration.nix +++ b/machines/Archie/hardware-configuration.nix @@ -9,6 +9,7 @@ ]; # Enabke support for the Xbox One wireless dongle + # Enable support for the Xbox One wireless dongle hardware.xone.enable = true; boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ]; @@ -39,6 +40,19 @@ fsType = "vfat"; }; + /* + Mount the root subvolume of the SSD + This is helpful for getting things from + my old Arch install, as well as for running btdu + */ + fileSystems = { + "/mnt/ssd" = { + device = config.fileSystems."/".device; + fsType = config.fileSystems."/".fsType; + options = [ "subvolid=5" "ro" ]; + }; + }; + swapDevices = [ ]; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; diff --git a/roles/common/programs/default.nix b/roles/common/programs/default.nix index d28c74d..e3aaa87 100755 --- a/roles/common/programs/default.nix +++ b/roles/common/programs/default.nix @@ -4,6 +4,7 @@ imports = [ ./htop.nix ./nix.nix + ./micro.nix ./nix-index.nix ./command-not-found.nix ]; @@ -11,7 +12,7 @@ environment.systemPackages = with pkgs; [ speedtest-cli bat - micro + file nvd ncdu tree diff --git a/roles/common/programs/micro.nix b/roles/common/programs/micro.nix new file mode 100644 index 0000000..a80a708 --- /dev/null +++ b/roles/common/programs/micro.nix @@ -0,0 +1,17 @@ +{ config, pkgs, ... }: + +{ + home-manager = { + users.toast = { config, pkgs, ... }: + { + programs.micro = { + enable = true; + settings = { + clipboard = "terminal"; + indentchar = "|"; + softwrap = true; + }; + }; + }; + }; +} diff --git a/roles/desktop/default.nix b/roles/desktop/default.nix old mode 100755 new mode 100644 index b13a242..cb3d38f --- a/roles/desktop/default.nix +++ b/roles/desktop/default.nix @@ -2,7 +2,7 @@ { imports = [ - ./discord.nix - ./firefox.nix + ./services + ./programs ]; } diff --git a/roles/desktop/programs/default.nix b/roles/desktop/programs/default.nix new file mode 100755 index 0000000..6aa4825 --- /dev/null +++ b/roles/desktop/programs/default.nix @@ -0,0 +1,10 @@ +{ ... }: + +{ + imports = [ + ./discord.nix + ./firefox.nix + ./micro.nix + ./keepassxc.nix + ]; +} diff --git a/roles/desktop/discord.nix b/roles/desktop/programs/discord.nix similarity index 57% rename from roles/desktop/discord.nix rename to roles/desktop/programs/discord.nix index bdabdc4..5f47f87 100644 --- a/roles/desktop/discord.nix +++ b/roles/desktop/programs/discord.nix @@ -1,9 +1,5 @@ { config, pkgs, ... }: -{ - # TODO: Find out why this does not do anything. If I put this - # on flake.nix it does work, so it's not completely wrong. - /* nixpkgs.overlays = let discordOverlay = self: super: { discord = super.discord.override { @@ -12,7 +8,8 @@ }; }; in - [ discordOverlay ]; */ +{ + nixpkgs.overlays = [ discordOverlay ]; users.users.toast.packages = with pkgs; [ discord ]; diff --git a/roles/desktop/firefox.nix b/roles/desktop/programs/firefox.nix similarity index 64% rename from roles/desktop/firefox.nix rename to roles/desktop/programs/firefox.nix index 797fd9e..643f174 100644 --- a/roles/desktop/firefox.nix +++ b/roles/desktop/programs/firefox.nix @@ -31,7 +31,28 @@ "Value" = true; "Status" = "default"; }; + "dom.security.https_only_mode" = { + "Value" = true; + "Status" = "locked"; + }; + # Make firefox use the kde file picker + "widget.use-xdg-desktop-portal.file-picker" = { + "Value" = 1; + "Status" = "default"; + }; + /* + https://wiki.archlinux.org/title/Firefox#KDE_integration tells me to enable this, + but strangely enough doing so makes firefox ask to be set as the default browser + every time you start it up, so I'll disable it + */ + "widget.use-xdg-desktop-portal.mime-handler" = { + "Value" = 0; + "Status" = "default"; + }; }; + "PromptForDownloadLocation" = true; + # I use an external password manager, so the built in one just bothers me + "PasswordManagerEnabled" = false; "Permissions" = { "Autoplay" = { "Allow" = [ "https://www.youtube.com" ]; diff --git a/roles/desktop/programs/keepassxc.nix b/roles/desktop/programs/keepassxc.nix new file mode 100644 index 0000000..53f42da --- /dev/null +++ b/roles/desktop/programs/keepassxc.nix @@ -0,0 +1,69 @@ +{ config, pkgs, lib, ... }: + +let + kpxcSettings = lib.generators.toINI {} { + # Not sure what changing this does, I'll leave it alone + General = { + ConfigVersion = 2; + MinimizeAfterUnlock = true; + }; + GUI = { + ApplicationTheme = "classic"; + MinimizeOnStartup = false; + MinimizeOnClose = true; + MinimizeToTray = true; + ShowTrayIcon = true; + # 0 is icons, 1 is text, 2 is text next to icons, 3 is text under icons, and 4 is follow style + ToolButtonStyle = 0; # Would choose 4 but it's too big for a small window + # monochrome-light, monochrome-dark or colorful + TrayIconAppearance = "monochrome-light"; + }; + SSHAgent.Enabled = true; + }; +in + +{ + # I'm only using keepass on my user, so I'm installing it with home-manager + home-manager = { + /* + TODO: move home-manager settings into the common role + They are not keepass specific, so they really should + not be here. I'm too lazy to do it now tho :P + */ + backupFileExtension = "backup"; + useGlobalPkgs = true; + + extraSpecialArgs = { kpxcSettings = kpxcSettings; }; + users.toast = { config, pkgs, kpxcSettings, ... }: { + home = { + stateVersion = "23.05"; + packages = [ pkgs.keepassxc ]; + # No module for KeePassXC config :( + file = { + ".config/keepassxc/keepassxc.ini".text = kpxcSettings; + # For some reason the autostart .desktop is not the same as the regular one + ".config/autostart/org.keepassxc.KeePassXC.desktop".text = '' + [Desktop Entry] + Name=KeePassXC + GenericName=Password Manager + Exec=keepassxc + TryExec=keepassxc + Icon=keepassxc + StartupWMClass=keepassxc + StartupNotify=true + Terminal=false + Type=Application + Version=1.0 + Categories=Utility;Security;Qt; + MimeType=application/x-keepass2; + X-GNOME-Autostart-enabled=true + X-GNOME-Autostart-Delay=2 + X-KDE-autostart-after=panel + X-LXQt-Need-Tray=true + ''; + }; + }; + + }; + }; +} diff --git a/roles/desktop/programs/micro.nix b/roles/desktop/programs/micro.nix new file mode 100644 index 0000000..a09e819 --- /dev/null +++ b/roles/desktop/programs/micro.nix @@ -0,0 +1,21 @@ +{ config, pkgs, lib, ... }: + +{ + home-manager = { + users.toast = { config, pkgs, ... }: + { + programs.micro = { + enable = true; + settings = { + # Use xclip/wl-clipboard for copying and pasting + clipboard = lib.mkForce "external"; + }; + }; + /* + On a kde wayland session micro uses xsel or xclip instead of wl-clipboard + which doesn't work, so I only install wl-clipboard here to make micro use it + */ + home.packages = with pkgs; [ wl-clipboard ]; + }; + }; +} diff --git a/roles/desktop/services/default.nix b/roles/desktop/services/default.nix new file mode 100644 index 0000000..48f9952 --- /dev/null +++ b/roles/desktop/services/default.nix @@ -0,0 +1,7 @@ +{ ... }: + +{ + imports = [ + ./ssh-agent.nix + ]; +} diff --git a/roles/desktop/services/ssh-agent.nix b/roles/desktop/services/ssh-agent.nix new file mode 100644 index 0000000..31b9f73 --- /dev/null +++ b/roles/desktop/services/ssh-agent.nix @@ -0,0 +1,21 @@ +{ config, pkgs, ... }: + +{ + programs.ssh.startAgent = true; + /* + Home assistant added an option that does this + https://github.com/nix-community/home-manager/commit/2d9210f25ed18d5d4e11e6b886de4027c0c51a94 + but since I still need to fix home-manager's envvars not applying I'll stick to the NixOS one + */ + /* + TODO: fix SSH_AUTH_SOCK not being set in Plasma + Turns out the NixOS module also has issues :3 + The env is set but only in bash, not in the DE, so + keepass can't pick it up. For now I'll just set it manually + */ + home-manager.users.toast.xdg.configFile."plasma-workspace/env/ssh-agent.sh".text = '' + if [[ -z "$SSH_AUTH_SOCK" ]]; then + export SSH_AUTH_SOCK=$XDG_RUNTIME_DIR/ssh-agent + fi + ''; +} diff --git a/roles/gaming/default.nix b/roles/gaming/default.nix new file mode 100755 index 0000000..fb3cce4 --- /dev/null +++ b/roles/gaming/default.nix @@ -0,0 +1,8 @@ +{ ... }: + +{ + imports = [ + ./steam.nix + ./mangohud.nix + ]; +} diff --git a/roles/gaming/mangohud.nix b/roles/gaming/mangohud.nix new file mode 100644 index 0000000..47b37be --- /dev/null +++ b/roles/gaming/mangohud.nix @@ -0,0 +1,20 @@ +{ config, ... }: + +{ + # This does the same as enableSessionWide does on the mangohud config + environment.sessionVariables = { MANGOHUD = "1"; MANGOHUD_DLSYM = "1"; }; + + home-manager.users.toast = { config, ... }: + { + programs.mangohud = { + enable = true; + # TODO: fix envvars set by home manager not applying for some reason + # This only works for Vulkan, openGL programs still need the mangohud wrapper + enableSessionWide = true; + settings = { + preset = 4; + no_display = true; + }; + }; + }; +} diff --git a/roles/gaming/steam.nix b/roles/gaming/steam.nix new file mode 100644 index 0000000..1c71901 --- /dev/null +++ b/roles/gaming/steam.nix @@ -0,0 +1,11 @@ +{ config, pkgs, ... }: + +{ + programs.steam = { + enable = true; + # Doubt that I'll use it, but I'll enable it anyways + remotePlay.openFirewall = true; + }; + # Some linux native games (rise of the tomb raider) use alsa for sound + services.pipewire.alsa.enable = true; +}