mirror of
https://github.com/nmasur/dotfiles
synced 2025-04-23 19:12:23 +00:00
Compare commits
6 Commits
bf1d2f1e9e
...
0bc8a233d8
Author | SHA1 | Date | |
---|---|---|---|
|
0bc8a233d8 | ||
|
524a5aa347 | ||
|
b4ddb149cc | ||
|
d021baa1bb | ||
|
7063bd5f7a | ||
|
d040077d3a |
@ -59,9 +59,8 @@
|
|||||||
program = "${
|
program = "${
|
||||||
(import ../modules/neovim/package {
|
(import ../modules/neovim/package {
|
||||||
inherit pkgs;
|
inherit pkgs;
|
||||||
colors = import ../modules/colorscheme/gruvbox/neovim-gruvbox.nix {
|
colors =
|
||||||
inherit pkgs;
|
import ../colorscheme/gruvbox/neovim-gruvbox.nix { inherit pkgs; };
|
||||||
};
|
|
||||||
})
|
})
|
||||||
}/bin/nvim";
|
}/bin/nvim";
|
||||||
};
|
};
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
{ config, pkgs, lib, ... }: {
|
{ config, pkgs, lib, ... }: {
|
||||||
|
|
||||||
# MacOS-specific settings for Alacritty
|
# MacOS-specific settings for Alacritty
|
||||||
home-manager.users.${config.user} = {
|
home-manager.users.${config.user} = lib.mkIf pkgs.stdenv.isDarwin {
|
||||||
programs.alacritty.settings = {
|
programs.alacritty.settings = {
|
||||||
font.size = lib.mkForce 20.0;
|
font.size = lib.mkForce 20.0;
|
||||||
shell.program = "${pkgs.fish}/bin/fish";
|
shell.program = "${pkgs.fish}/bin/fish";
|
@ -1,6 +1,6 @@
|
|||||||
{ config, pkgs, ... }: {
|
{ config, pkgs, lib, ... }: {
|
||||||
|
|
||||||
home-manager.users.${config.user} = {
|
home-manager.users.${config.user} = lib.mkIf pkgs.stdenv.isDarwin {
|
||||||
|
|
||||||
home.packages = with pkgs;
|
home.packages = with pkgs;
|
||||||
[ (nerdfonts.override { fonts = [ "VictorMono" ]; }) ];
|
[ (nerdfonts.override { fonts = [ "VictorMono" ]; }) ];
|
32
darwin/hammerspoon.nix
Normal file
32
darwin/hammerspoon.nix
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
{ config, pkgs, lib, ... }: {
|
||||||
|
|
||||||
|
# Hammerspoon - MacOS custom automation scripting
|
||||||
|
|
||||||
|
config = lib.mkIf pkgs.stdenv.isDarwin {
|
||||||
|
|
||||||
|
home-manager.users.${config.user} = {
|
||||||
|
xdg.configFile."hammerspoon/init.lua".source = ./hammerspoon/init.lua;
|
||||||
|
xdg.configFile."hammerspoon/Spoons/ControlEscape.spoon".source =
|
||||||
|
./hammerspoon/Spoons/ControlEscape.spoon;
|
||||||
|
xdg.configFile."hammerspoon/Spoons/DismissAlerts.spoon".source =
|
||||||
|
./hammerspoon/Spoons/DismissAlerts.spoon;
|
||||||
|
xdg.configFile."hammerspoon/Spoons/Launcher.spoon/init.lua".source =
|
||||||
|
pkgs.substituteAll {
|
||||||
|
src = ./hammerspoon/Spoons/Launcher.spoon/init.lua;
|
||||||
|
firefox = "${pkgs.firefox-bin}/Applications/Firefox.app";
|
||||||
|
discord = "${pkgs.discord}/Applications/Discord.app";
|
||||||
|
kitty = "${pkgs.kitty}/Applications/kitty.app";
|
||||||
|
};
|
||||||
|
xdg.configFile."hammerspoon/Spoons/MoveWindow.spoon".source =
|
||||||
|
./hammerspoon/Spoons/MoveWindow.spoon;
|
||||||
|
};
|
||||||
|
|
||||||
|
homebrew.casks = [ "hammerspoon" ];
|
||||||
|
|
||||||
|
system.activationScripts.postUserActivation.text = ''
|
||||||
|
defaults write org.hammerspoon.Hammerspoon MJConfigFile "~/.config/hammerspoon/init.lua"
|
||||||
|
'';
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
56
darwin/homebrew.nix
Normal file
56
darwin/homebrew.nix
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
{ config, pkgs, lib, ... }: {
|
||||||
|
|
||||||
|
# Homebrew - Mac-specific packages that aren't in Nix
|
||||||
|
config = lib.mkIf pkgs.stdenv.isDarwin {
|
||||||
|
|
||||||
|
# Requires Homebrew to be installed
|
||||||
|
system.activationScripts.preUserActivation.text = ''
|
||||||
|
if ! xcode-select --version 2>/dev/null; then
|
||||||
|
$DRY_RUN_CMD xcode-select --install
|
||||||
|
fi
|
||||||
|
if ! /usr/local/bin/brew --version 2>/dev/null; then
|
||||||
|
$DRY_RUN_CMD /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
|
||||||
|
homebrew = {
|
||||||
|
enable = true;
|
||||||
|
onActivation = {
|
||||||
|
autoUpdate = false; # Don't update during rebuild
|
||||||
|
cleanup = "zap"; # Uninstall all programs not declared
|
||||||
|
upgrade = true;
|
||||||
|
};
|
||||||
|
global = {
|
||||||
|
brewfile = true; # Run brew bundle from anywhere
|
||||||
|
lockfiles = false; # Don't save lockfile (since running from anywhere)
|
||||||
|
};
|
||||||
|
taps = [
|
||||||
|
"homebrew/cask" # Required for casks
|
||||||
|
"homebrew/cask-drivers" # Used for Logitech G-Hub
|
||||||
|
];
|
||||||
|
brews = [
|
||||||
|
"trash" # Delete files and folders to trash instead of rm
|
||||||
|
"openjdk" # Required by Apache Directory Studio
|
||||||
|
];
|
||||||
|
casks = [
|
||||||
|
"1password" # 1Password packaging on Nix is broken for macOS
|
||||||
|
"scroll-reverser" # Different scroll style for mouse vs. trackpad
|
||||||
|
"meetingbar" # Show meetings in menu bar
|
||||||
|
"gitify" # Git notifications in menu bar
|
||||||
|
"logitech-g-hub" # Mouse and keyboard management
|
||||||
|
"mimestream" # Gmail client
|
||||||
|
"obsidian" # Obsidian packaging on Nix is not available for macOS
|
||||||
|
"steam" # Not packaged for Nix
|
||||||
|
"apache-directory-studio" # Packaging on Nix is not available for macOS
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
home-manager.users.${config.user} = {
|
||||||
|
|
||||||
|
programs.fish.shellAbbrs.t = "trash";
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
@ -1,7 +1,7 @@
|
|||||||
{ config, pkgs, lib, ... }: {
|
{ config, pkgs, lib, ... }: {
|
||||||
|
|
||||||
# MacOS-specific settings for Kitty
|
# MacOS-specific settings for Kitty
|
||||||
home-manager.users.${config.user} = {
|
home-manager.users.${config.user} = lib.mkIf pkgs.stdenv.isDarwin {
|
||||||
programs.kitty = {
|
programs.kitty = {
|
||||||
darwinLaunchOptions = [ "--start-as=fullscreen" ];
|
darwinLaunchOptions = [ "--start-as=fullscreen" ];
|
||||||
font.size = lib.mkForce 20;
|
font.size = lib.mkForce 20;
|
11
darwin/networking.nix
Normal file
11
darwin/networking.nix
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{ config, pkgs, lib, ... }: {
|
||||||
|
|
||||||
|
config = lib.mkIf pkgs.stdenv.isDarwin {
|
||||||
|
networking = {
|
||||||
|
computerName = "${config.fullName}'\\''s Mac";
|
||||||
|
# Adjust if necessary
|
||||||
|
# hostName = "";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
@ -1,6 +1,6 @@
|
|||||||
{ config, pkgs, lib, ... }: {
|
{ config, pkgs, lib, ... }: {
|
||||||
|
|
||||||
home-manager.users.${config.user} = {
|
home-manager.users.${config.user} = lib.mkIf pkgs.stdenv.isDarwin {
|
||||||
|
|
||||||
programs.fish = {
|
programs.fish = {
|
||||||
shellAbbrs = {
|
shellAbbrs = {
|
186
darwin/system.nix
Normal file
186
darwin/system.nix
Normal file
@ -0,0 +1,186 @@
|
|||||||
|
{ pkgs, lib, ... }: {
|
||||||
|
|
||||||
|
config = lib.mkIf pkgs.stdenv.isDarwin {
|
||||||
|
|
||||||
|
services.nix-daemon.enable = true;
|
||||||
|
|
||||||
|
environment.shells = [ pkgs.fish ];
|
||||||
|
|
||||||
|
security.pam.enableSudoTouchIdAuth = true;
|
||||||
|
|
||||||
|
system = {
|
||||||
|
|
||||||
|
keyboard = {
|
||||||
|
remapCapsLockToControl = true;
|
||||||
|
enableKeyMapping = true; # Allows for skhd
|
||||||
|
};
|
||||||
|
|
||||||
|
defaults = {
|
||||||
|
NSGlobalDomain = {
|
||||||
|
|
||||||
|
# Set to dark mode
|
||||||
|
AppleInterfaceStyle = "Dark";
|
||||||
|
|
||||||
|
# Don't change from dark to light automatically
|
||||||
|
# AppleInterfaceSwitchesAutomatically = false;
|
||||||
|
|
||||||
|
# Enable full keyboard access for all controls (e.g. enable Tab in modal dialogs)
|
||||||
|
AppleKeyboardUIMode = 3;
|
||||||
|
|
||||||
|
# Automatically show and hide the menu bar
|
||||||
|
_HIHideMenuBar = true;
|
||||||
|
|
||||||
|
# Expand save panel by default
|
||||||
|
NSNavPanelExpandedStateForSaveMode = true;
|
||||||
|
|
||||||
|
# Expand print panel by default
|
||||||
|
PMPrintingExpandedStateForPrint = true;
|
||||||
|
|
||||||
|
# Replace press-and-hold with key repeat
|
||||||
|
ApplePressAndHoldEnabled = false;
|
||||||
|
|
||||||
|
# Set a fast key repeat rate
|
||||||
|
KeyRepeat = 2;
|
||||||
|
|
||||||
|
# Shorten delay before key repeat begins
|
||||||
|
InitialKeyRepeat = 12;
|
||||||
|
|
||||||
|
# Save to local disk by default, not iCloud
|
||||||
|
NSDocumentSaveNewDocumentsToCloud = false;
|
||||||
|
|
||||||
|
# Disable autocorrect capitalization
|
||||||
|
NSAutomaticCapitalizationEnabled = false;
|
||||||
|
|
||||||
|
# Disable autocorrect smart dashes
|
||||||
|
NSAutomaticDashSubstitutionEnabled = false;
|
||||||
|
|
||||||
|
# Disable autocorrect adding periods
|
||||||
|
NSAutomaticPeriodSubstitutionEnabled = false;
|
||||||
|
|
||||||
|
# Disable autocorrect smart quotation marks
|
||||||
|
NSAutomaticQuoteSubstitutionEnabled = false;
|
||||||
|
|
||||||
|
# Disable autocorrect spellcheck
|
||||||
|
NSAutomaticSpellingCorrectionEnabled = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
dock = {
|
||||||
|
# Automatically show and hide the dock
|
||||||
|
autohide = true;
|
||||||
|
|
||||||
|
# Add translucency in dock for hidden applications
|
||||||
|
showhidden = true;
|
||||||
|
|
||||||
|
# Enable spring loading on all dock items
|
||||||
|
enable-spring-load-actions-on-all-items = true;
|
||||||
|
|
||||||
|
# Highlight hover effect in dock stack grid view
|
||||||
|
mouse-over-hilite-stack = true;
|
||||||
|
|
||||||
|
mineffect = "genie";
|
||||||
|
orientation = "bottom";
|
||||||
|
show-recents = false;
|
||||||
|
tilesize = 44;
|
||||||
|
};
|
||||||
|
|
||||||
|
finder = {
|
||||||
|
|
||||||
|
# Default Finder window set to column view
|
||||||
|
FXPreferredViewStyle = "clmv";
|
||||||
|
|
||||||
|
# Finder search in current folder by default
|
||||||
|
FXDefaultSearchScope = "SCcf";
|
||||||
|
|
||||||
|
# Disable warning when changing file extension
|
||||||
|
FXEnableExtensionChangeWarning = false;
|
||||||
|
|
||||||
|
# Allow quitting of Finder application
|
||||||
|
QuitMenuItem = true;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
# Disable "Are you sure you want to open" dialog
|
||||||
|
LaunchServices.LSQuarantine = false;
|
||||||
|
|
||||||
|
# Disable trackpad tap to click
|
||||||
|
trackpad.Clicking = false;
|
||||||
|
|
||||||
|
# universalaccess = {
|
||||||
|
|
||||||
|
# # Zoom in with Control + Scroll Wheel
|
||||||
|
# closeViewScrollWheelToggle = true;
|
||||||
|
# closeViewZoomFollowsFocus = true;
|
||||||
|
# };
|
||||||
|
|
||||||
|
# Where to save screenshots
|
||||||
|
screencapture.location = "~/Downloads";
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
# Settings that don't have an option in nix-darwin
|
||||||
|
activationScripts.postActivation.text = ''
|
||||||
|
echo "Disable disk image verification"
|
||||||
|
defaults write com.apple.frameworks.diskimages skip-verify -bool true
|
||||||
|
defaults write com.apple.frameworks.diskimages skip-verify-locked -bool true
|
||||||
|
defaults write com.apple.frameworks.diskimages skip-verify-remote -bool true
|
||||||
|
|
||||||
|
echo "Avoid creating .DS_Store files on network volumes"
|
||||||
|
defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool true
|
||||||
|
|
||||||
|
echo "Disable the warning before emptying the Trash"
|
||||||
|
defaults write com.apple.finder WarnOnEmptyTrash -bool false
|
||||||
|
|
||||||
|
echo "Require password immediately after sleep or screen saver begins"
|
||||||
|
defaults write com.apple.screensaver askForPassword -int 1
|
||||||
|
defaults write com.apple.screensaver askForPasswordDelay -int 0
|
||||||
|
|
||||||
|
echo "Allow apps from anywhere"
|
||||||
|
SPCTL=$(spctl --status)
|
||||||
|
if ! [ "$SPCTL" = "assessments disabled" ]; then
|
||||||
|
sudo spctl --master-disable
|
||||||
|
fi
|
||||||
|
|
||||||
|
'';
|
||||||
|
|
||||||
|
# User-level settings
|
||||||
|
activationScripts.postUserActivation.text = ''
|
||||||
|
echo "Show the ~/Library folder"
|
||||||
|
chflags nohidden ~/Library
|
||||||
|
|
||||||
|
echo "Enable dock magnification"
|
||||||
|
defaults write com.apple.dock magnification -bool true
|
||||||
|
|
||||||
|
echo "Set dock magnification size"
|
||||||
|
defaults write com.apple.dock largesize -int 48
|
||||||
|
|
||||||
|
echo "Define dock icon function"
|
||||||
|
__dock_item() {
|
||||||
|
printf "%s%s%s%s%s" \
|
||||||
|
"<dict><key>tile-data</key><dict><key>file-data</key><dict>" \
|
||||||
|
"<key>_CFURLString</key><string>" \
|
||||||
|
"$1" \
|
||||||
|
"</string><key>_CFURLStringType</key><integer>0</integer>" \
|
||||||
|
"</dict></dict></dict>"
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "Choose and order dock icons"
|
||||||
|
defaults write com.apple.dock persistent-apps -array \
|
||||||
|
"$(__dock_item /Applications/1Password.app)" \
|
||||||
|
"$(__dock_item /Applications/Slack.app)" \
|
||||||
|
"$(__dock_item /System/Applications/Calendar.app)" \
|
||||||
|
"$(__dock_item ${pkgs.firefox-bin}/Applications/Firefox.app)" \
|
||||||
|
"$(__dock_item /System/Applications/Messages.app)" \
|
||||||
|
"$(__dock_item /System/Applications/Mail.app)" \
|
||||||
|
"$(__dock_item /Applications/Mimestream.app)" \
|
||||||
|
"$(__dock_item /Applications/zoom.us.app)" \
|
||||||
|
"$(__dock_item ${pkgs.discord}/Applications/Discord.app)" \
|
||||||
|
"$(__dock_item /Applications/Obsidian.app)" \
|
||||||
|
"$(__dock_item ${pkgs.kitty}/Applications/kitty.app)" \
|
||||||
|
"$(__dock_item /System/Applications/System\ Settings.app)"
|
||||||
|
'';
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
@ -1,6 +1,8 @@
|
|||||||
{ config, pkgs, ... }: {
|
{ config, pkgs, lib, ... }: {
|
||||||
|
|
||||||
home-manager.users.${config.user} = {
|
options.tmux.enable = lib.mkEnableOption "Tmux terminal multiplexer";
|
||||||
|
|
||||||
|
config.home-manager.users.${config.user} = lib.mkIf config.tmux.enable {
|
||||||
|
|
||||||
programs.tmux = {
|
programs.tmux = {
|
||||||
enable = true;
|
enable = true;
|
21
darwin/user.nix
Normal file
21
darwin/user.nix
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
{ config, pkgs, lib, ... }: {
|
||||||
|
|
||||||
|
config = lib.mkIf pkgs.stdenv.isDarwin {
|
||||||
|
|
||||||
|
users.users."${config.user}" = {
|
||||||
|
# macOS user
|
||||||
|
home = config.homePath;
|
||||||
|
shell = pkgs.fish; # Default shell
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
# Used for aerc
|
||||||
|
home-manager.users.${config.user} = {
|
||||||
|
home.sessionVariables = {
|
||||||
|
XDG_CONFIG_HOME = "${config.homePath}/.config";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
@ -15,7 +15,7 @@ let
|
|||||||
|
|
||||||
in {
|
in {
|
||||||
|
|
||||||
home-manager.users.${config.user} = {
|
home-manager.users.${config.user} = lib.mkIf pkgs.stdenv.isDarwin {
|
||||||
|
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
# visidata # CSV inspector
|
# visidata # CSV inspector
|
||||||
@ -34,7 +34,7 @@ in {
|
|||||||
ipcalc # Make IP network calculations
|
ipcalc # Make IP network calculations
|
||||||
(mkScript {
|
(mkScript {
|
||||||
name = "ocr";
|
name = "ocr";
|
||||||
file = ../shell/bash/scripts/ocr.sh;
|
file = ../modules/shell/bash/scripts/ocr.sh;
|
||||||
env = [ tesseract ];
|
env = [ tesseract ];
|
||||||
})
|
})
|
||||||
];
|
];
|
@ -104,7 +104,7 @@
|
|||||||
fullName = "Noah Masur";
|
fullName = "Noah Masur";
|
||||||
gitName = fullName;
|
gitName = fullName;
|
||||||
gitEmail = "7386960+nmasur@users.noreply.github.com";
|
gitEmail = "7386960+nmasur@users.noreply.github.com";
|
||||||
mailServer = "noahmasur.com";
|
mail.server = "noahmasur.com";
|
||||||
dotfilesRepo = "git@github.com:nmasur/dotfiles";
|
dotfilesRepo = "git@github.com:nmasur/dotfiles";
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -154,9 +154,8 @@
|
|||||||
neovim = let pkgs = import nixpkgs { inherit system overlays; };
|
neovim = let pkgs = import nixpkgs { inherit system overlays; };
|
||||||
in import ./modules/neovim/package {
|
in import ./modules/neovim/package {
|
||||||
inherit pkgs;
|
inherit pkgs;
|
||||||
colors = import ./modules/colorscheme/gruvbox/neovim-gruvbox.nix {
|
colors =
|
||||||
inherit pkgs;
|
import ./colorscheme/gruvbox/neovim-gruvbox.nix { inherit pkgs; };
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
});
|
});
|
||||||
|
@ -7,9 +7,14 @@ nixpkgs.lib.nixosSystem {
|
|||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
specialArgs = { };
|
specialArgs = { };
|
||||||
modules = [
|
modules = [
|
||||||
|
./hardware-configuration.nix
|
||||||
|
../../modules
|
||||||
|
../../nixos
|
||||||
globals
|
globals
|
||||||
|
wsl.nixosModules.wsl
|
||||||
home-manager.nixosModules.home-manager
|
home-manager.nixosModules.home-manager
|
||||||
{
|
{
|
||||||
|
physical = true;
|
||||||
networking.hostName = "desktop";
|
networking.hostName = "desktop";
|
||||||
nixpkgs.overlays = [ nur.overlay ];
|
nixpkgs.overlays = [ nur.overlay ];
|
||||||
# Set registry to flake packages, used for nix X commands
|
# Set registry to flake packages, used for nix X commands
|
||||||
@ -17,32 +22,31 @@ nixpkgs.lib.nixosSystem {
|
|||||||
identityFile = "/home/${globals.user}/.ssh/id_ed25519";
|
identityFile = "/home/${globals.user}/.ssh/id_ed25519";
|
||||||
gui.enable = true;
|
gui.enable = true;
|
||||||
theme = {
|
theme = {
|
||||||
colors = (import ../../modules/colorscheme/gruvbox).dark;
|
colors = (import ../../colorscheme/gruvbox).dark;
|
||||||
dark = true;
|
dark = true;
|
||||||
};
|
};
|
||||||
wallpaper = "${wallpapers}/gruvbox/road.jpg";
|
wallpaper = "${wallpapers}/gruvbox/road.jpg";
|
||||||
gtk.theme.name = nixpkgs.lib.mkDefault "Adwaita-dark";
|
gtk.theme.name = nixpkgs.lib.mkDefault "Adwaita-dark";
|
||||||
passwordHash = nixpkgs.lib.fileContents ../../private/password.sha512;
|
passwordHash = nixpkgs.lib.fileContents ../../private/password.sha512;
|
||||||
}
|
wsl.enable = false;
|
||||||
|
|
||||||
./hardware-configuration.nix
|
media.enable = true;
|
||||||
../common.nix
|
firefox.enable = true;
|
||||||
../../modules/hardware
|
kitty.enable = true;
|
||||||
../../modules/nixos
|
"1password".enable = true;
|
||||||
../../modules/graphical
|
discord.enable = true;
|
||||||
../../modules/applications/media.nix
|
nautilus.enable = true;
|
||||||
../../modules/applications/firefox.nix
|
obsidian.enable = true;
|
||||||
../../modules/applications/kitty.nix
|
mail.enable = true;
|
||||||
../../modules/applications/1password.nix
|
mail.aerc.enable = true;
|
||||||
../../modules/applications/discord.nix
|
mail.himalaya.enable = true;
|
||||||
../../modules/applications/nautilus.nix
|
gaming.enable = true;
|
||||||
../../modules/applications/obsidian.nix
|
gaming.steam.enable = true;
|
||||||
../../modules/mail
|
gaming.legendary.enable = true;
|
||||||
../../modules/gaming/steam.nix
|
keybase.enable = true;
|
||||||
../../modules/gaming/legendary.nix
|
mullvad.enable = true;
|
||||||
../../modules/repositories/notes.nix
|
nixlang.enable = true;
|
||||||
../../modules/services/keybase.nix
|
dotfiles.enable = true;
|
||||||
../../modules/services/mullvad.nix
|
}
|
||||||
../../modules/programming/nix.nix
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,8 @@ darwin.lib.darwinSystem {
|
|||||||
system = "x86_64-darwin";
|
system = "x86_64-darwin";
|
||||||
specialArgs = { };
|
specialArgs = { };
|
||||||
modules = [
|
modules = [
|
||||||
|
../../modules
|
||||||
|
../../darwin
|
||||||
(globals // {
|
(globals // {
|
||||||
user = "Noah.Masur";
|
user = "Noah.Masur";
|
||||||
gitName = "Noah-Masur_1701";
|
gitName = "Noah-Masur_1701";
|
||||||
@ -14,30 +16,31 @@ darwin.lib.darwinSystem {
|
|||||||
})
|
})
|
||||||
home-manager.darwinModules.home-manager
|
home-manager.darwinModules.home-manager
|
||||||
{
|
{
|
||||||
|
networking.hostName = "noah-masur-mac";
|
||||||
identityFile = "/Users/Noah.Masur/.ssh/id_ed25519";
|
identityFile = "/Users/Noah.Masur/.ssh/id_ed25519";
|
||||||
gui.enable = true;
|
gui.enable = true;
|
||||||
theme = {
|
theme = {
|
||||||
colors = (import ../../modules/colorscheme/gruvbox).dark;
|
colors = (import ../../colorscheme/gruvbox).dark;
|
||||||
dark = true;
|
dark = true;
|
||||||
};
|
};
|
||||||
mailUser = globals.user;
|
mail.user = globals.user;
|
||||||
networking.hostName = "noah-masur-mac";
|
|
||||||
nixpkgs.overlays = [ firefox-darwin.overlay ] ++ overlays;
|
nixpkgs.overlays = [ firefox-darwin.overlay ] ++ overlays;
|
||||||
# Set registry to flake packages, used for nix X commands
|
# Set registry to flake packages, used for nix X commands
|
||||||
nix.registry.nixpkgs.flake = nixpkgs;
|
nix.registry.nixpkgs.flake = nixpkgs;
|
||||||
|
neovim.enable = true;
|
||||||
|
mail.enable = true;
|
||||||
|
mail.aerc.enable = true;
|
||||||
|
mail.himalaya.enable = true;
|
||||||
|
kitty.enable = true;
|
||||||
|
discord.enable = true;
|
||||||
|
firefox.enable = true;
|
||||||
|
dotfiles.enable = true;
|
||||||
|
nixlang.enable = true;
|
||||||
|
terraform.enable = true;
|
||||||
|
python.enable = true;
|
||||||
|
lua.enable = true;
|
||||||
|
kubernetes.enable = true;
|
||||||
|
"1password".enable = true;
|
||||||
}
|
}
|
||||||
../common.nix
|
|
||||||
../../modules/darwin
|
|
||||||
../../modules/mail
|
|
||||||
../../modules/applications/alacritty.nix
|
|
||||||
../../modules/applications/kitty.nix
|
|
||||||
../../modules/applications/discord.nix
|
|
||||||
../../modules/applications/firefox.nix
|
|
||||||
../../modules/repositories/notes.nix
|
|
||||||
../../modules/programming/nix.nix
|
|
||||||
../../modules/programming/terraform.nix
|
|
||||||
../../modules/programming/python.nix
|
|
||||||
../../modules/programming/lua.nix
|
|
||||||
../../modules/programming/kubernetes.nix
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
@ -11,12 +11,19 @@ nixpkgs.lib.nixosSystem {
|
|||||||
system = "aarch64-linux";
|
system = "aarch64-linux";
|
||||||
specialArgs = { };
|
specialArgs = { };
|
||||||
modules = [
|
modules = [
|
||||||
(removeAttrs globals [ "mailServer" ])
|
./hardware-configuration.nix
|
||||||
|
../../modules
|
||||||
|
../../nixos
|
||||||
|
(removeAttrs globals [ "mail.server" ])
|
||||||
|
wsl.nixosModules.wsl
|
||||||
home-manager.nixosModules.home-manager
|
home-manager.nixosModules.home-manager
|
||||||
{
|
{
|
||||||
|
server = true;
|
||||||
gui.enable = false;
|
gui.enable = false;
|
||||||
theme = { colors = (import ../../modules/colorscheme/gruvbox).dark; };
|
theme = { colors = (import ../../colorscheme/gruvbox).dark; };
|
||||||
nixpkgs.overlays = overlays;
|
nixpkgs.overlays = overlays;
|
||||||
|
wsl.enable = false;
|
||||||
|
caddy.enable = true;
|
||||||
|
|
||||||
# FQDNs for various services
|
# FQDNs for various services
|
||||||
networking.hostName = "oracle";
|
networking.hostName = "oracle";
|
||||||
@ -33,7 +40,7 @@ nixpkgs.lib.nixosSystem {
|
|||||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB+AbmjGEwITk5CK9y7+Rg27Fokgj9QEjgc9wST6MA3s";
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB+AbmjGEwITk5CK9y7+Rg27Fokgj9QEjgc9wST6MA3s";
|
||||||
|
|
||||||
# Nextcloud backup config
|
# Nextcloud backup config
|
||||||
backupS3 = {
|
backup.s3 = {
|
||||||
endpoint = "s3.us-west-002.backblazeb2.com";
|
endpoint = "s3.us-west-002.backblazeb2.com";
|
||||||
bucket = "noahmasur-backup";
|
bucket = "noahmasur-backup";
|
||||||
accessKeyId = "0026b0e73b2e2c80000000005";
|
accessKeyId = "0026b0e73b2e2c80000000005";
|
||||||
@ -43,6 +50,7 @@ nixpkgs.lib.nixosSystem {
|
|||||||
users.users.nextcloud.extraGroups = [ "jellyfin" ];
|
users.users.nextcloud.extraGroups = [ "jellyfin" ];
|
||||||
|
|
||||||
# Wireguard config for Transmission
|
# Wireguard config for Transmission
|
||||||
|
wireguard.enable = true;
|
||||||
networking.wireguard.interfaces.wg0 = {
|
networking.wireguard.interfaces.wg0 = {
|
||||||
|
|
||||||
# The local IPs for this machine within the Wireguard network
|
# The local IPs for this machine within the Wireguard network
|
||||||
@ -72,20 +80,18 @@ nixpkgs.lib.nixosSystem {
|
|||||||
|
|
||||||
# Grant access to Transmission directories from Jellyfin
|
# Grant access to Transmission directories from Jellyfin
|
||||||
users.users.jellyfin.extraGroups = [ "transmission" ];
|
users.users.jellyfin.extraGroups = [ "transmission" ];
|
||||||
|
|
||||||
|
# Proxy traffic with Cloudflare
|
||||||
|
cloudflare.enable = true;
|
||||||
|
|
||||||
|
# Setup Minecraft server
|
||||||
|
gaming.minecraft-server.enable = true;
|
||||||
|
|
||||||
|
# Clone dotfiles
|
||||||
|
dotfiles.enable = true;
|
||||||
|
|
||||||
|
neovim.enable = true;
|
||||||
|
|
||||||
}
|
}
|
||||||
./hardware-configuration.nix
|
|
||||||
../common.nix
|
|
||||||
../../modules/nixos
|
|
||||||
../../modules/hardware/server.nix
|
|
||||||
../../modules/services/sshd.nix
|
|
||||||
../../modules/services/calibre.nix
|
|
||||||
../../modules/services/jellyfin.nix
|
|
||||||
../../modules/services/nextcloud.nix
|
|
||||||
../../modules/services/cloudflare.nix
|
|
||||||
../../modules/services/transmission.nix
|
|
||||||
../../modules/services/prometheus.nix
|
|
||||||
../../modules/services/vaultwarden.nix
|
|
||||||
../../modules/services/gitea.nix
|
|
||||||
../../modules/gaming/minecraft-server.nix
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,8 @@ nixpkgs.lib.nixosSystem {
|
|||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
specialArgs = { };
|
specialArgs = { };
|
||||||
modules = [
|
modules = [
|
||||||
|
../../modules
|
||||||
|
../../nixos
|
||||||
globals
|
globals
|
||||||
wsl.nixosModules.wsl
|
wsl.nixosModules.wsl
|
||||||
home-manager.nixosModules.home-manager
|
home-manager.nixosModules.home-manager
|
||||||
@ -17,7 +19,7 @@ nixpkgs.lib.nixosSystem {
|
|||||||
identityFile = "/home/${globals.user}/.ssh/id_ed25519";
|
identityFile = "/home/${globals.user}/.ssh/id_ed25519";
|
||||||
gui.enable = false;
|
gui.enable = false;
|
||||||
theme = {
|
theme = {
|
||||||
colors = (import ../../modules/colorscheme/gruvbox).dark;
|
colors = (import ../../colorscheme/gruvbox).dark;
|
||||||
dark = true;
|
dark = true;
|
||||||
};
|
};
|
||||||
passwordHash = nixpkgs.lib.fileContents ../../private/password.sha512;
|
passwordHash = nixpkgs.lib.fileContents ../../private/password.sha512;
|
||||||
@ -30,13 +32,13 @@ nixpkgs.lib.nixosSystem {
|
|||||||
interop.includePath =
|
interop.includePath =
|
||||||
false; # Including Windows PATH will slow down Neovim command mode
|
false; # Including Windows PATH will slow down Neovim command mode
|
||||||
};
|
};
|
||||||
|
|
||||||
|
mail.enable = true;
|
||||||
|
mail.aerc.enable = true;
|
||||||
|
mail.himalaya.enable = true;
|
||||||
|
dotfiles.enable = true;
|
||||||
|
nixlang.enable = true;
|
||||||
|
lua.enable = true;
|
||||||
}
|
}
|
||||||
../common.nix
|
|
||||||
../../modules/wsl
|
|
||||||
../../modules/nixos
|
|
||||||
../../modules/mail
|
|
||||||
../../modules/repositories/notes.nix
|
|
||||||
../../modules/programming/nix.nix
|
|
||||||
../../modules/programming/lua.nix
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,20 @@
|
|||||||
{ config, pkgs, lib, ... }: {
|
{ config, pkgs, lib, ... }: {
|
||||||
|
|
||||||
config = lib.mkIf config.gui.enable {
|
options = {
|
||||||
unfreePackages = [ "1password" "_1password-gui" ];
|
"1password" = {
|
||||||
home-manager.users.${config.user} = {
|
enable = lib.mkEnableOption {
|
||||||
home.packages = with pkgs; [ _1password-gui ];
|
description = "Enable 1Password.";
|
||||||
|
default = false;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf
|
||||||
|
(config.gui.enable && config."1password".enable && pkgs.stdenv.isLinux) {
|
||||||
|
unfreePackages = [ "1password" "_1password-gui" ];
|
||||||
|
home-manager.users.${config.user} = {
|
||||||
|
home.packages = with pkgs; [ _1password-gui ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,15 @@
|
|||||||
{ config, pkgs, lib, ... }: {
|
{ config, pkgs, lib, ... }: {
|
||||||
|
|
||||||
config = lib.mkIf config.gui.enable {
|
options = {
|
||||||
|
alacritty = {
|
||||||
|
enable = lib.mkEnableOption {
|
||||||
|
description = "Enable Alacritty.";
|
||||||
|
default = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf (config.gui.enable && config.alacritty.enable) {
|
||||||
home-manager.users.${config.user} = {
|
home-manager.users.${config.user} = {
|
||||||
xsession.windowManager.i3.config.terminal = "alacritty";
|
xsession.windowManager.i3.config.terminal = "alacritty";
|
||||||
programs.rofi.terminal = "${pkgs.alacritty}/bin/alacritty";
|
programs.rofi.terminal = "${pkgs.alacritty}/bin/alacritty";
|
||||||
|
@ -3,7 +3,6 @@
|
|||||||
imports = [
|
imports = [
|
||||||
./1password.nix
|
./1password.nix
|
||||||
./alacritty.nix
|
./alacritty.nix
|
||||||
./calibre.nix
|
|
||||||
./discord.nix
|
./discord.nix
|
||||||
./firefox.nix
|
./firefox.nix
|
||||||
./kitty.nix
|
./kitty.nix
|
||||||
|
@ -1,6 +1,15 @@
|
|||||||
{ config, pkgs, lib, ... }: {
|
{ config, pkgs, lib, ... }: {
|
||||||
|
|
||||||
config = lib.mkIf config.gui.enable {
|
options = {
|
||||||
|
discord = {
|
||||||
|
enable = lib.mkEnableOption {
|
||||||
|
description = "Enable Discord.";
|
||||||
|
default = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf (config.gui.enable && config.discord.enable) {
|
||||||
unfreePackages = [ "discord" ];
|
unfreePackages = [ "discord" ];
|
||||||
home-manager.users.${config.user} = {
|
home-manager.users.${config.user} = {
|
||||||
home.packages = with pkgs; [ discord ];
|
home.packages = with pkgs; [ discord ];
|
||||||
|
@ -1,13 +1,26 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
{ config, pkgs, lib, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
config = lib.mkIf config.gui.enable {
|
|
||||||
|
|
||||||
unfreePackages = [ "onepassword-password-manager" "okta-browser-plugin" ];
|
options = {
|
||||||
|
firefox = {
|
||||||
|
enable = lib.mkEnableOption {
|
||||||
|
description = "Enable Firefox.";
|
||||||
|
default = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf (config.gui.enable && config.firefox.enable) {
|
||||||
|
|
||||||
|
unfreePackages = [
|
||||||
|
(lib.mkIf config."1password".enable "onepassword-password-manager")
|
||||||
|
"okta-browser-plugin"
|
||||||
|
];
|
||||||
|
|
||||||
home-manager.users.${config.user} = {
|
home-manager.users.${config.user} = {
|
||||||
|
|
||||||
programs.firefox = rec {
|
programs.firefox = {
|
||||||
enable = true;
|
enable = true;
|
||||||
package =
|
package =
|
||||||
if pkgs.stdenv.isDarwin then pkgs.firefox-bin else pkgs.firefox;
|
if pkgs.stdenv.isDarwin then pkgs.firefox-bin else pkgs.firefox;
|
||||||
@ -17,7 +30,7 @@
|
|||||||
multi-account-containers
|
multi-account-containers
|
||||||
facebook-container
|
facebook-container
|
||||||
temporary-containers
|
temporary-containers
|
||||||
onepassword-password-manager
|
(lib.mkIf config."1password".enable onepassword-password-manager)
|
||||||
okta-browser-plugin
|
okta-browser-plugin
|
||||||
sponsorblock
|
sponsorblock
|
||||||
reddit-enhancement-suite
|
reddit-enhancement-suite
|
||||||
|
@ -1,6 +1,15 @@
|
|||||||
{ config, pkgs, lib, ... }: {
|
{ config, pkgs, lib, ... }: {
|
||||||
|
|
||||||
config = lib.mkIf config.gui.enable {
|
options = {
|
||||||
|
kitty = {
|
||||||
|
enable = lib.mkEnableOption {
|
||||||
|
description = "Enable Kitty.";
|
||||||
|
default = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf (config.gui.enable && config.kitty.enable) {
|
||||||
home-manager.users.${config.user} = {
|
home-manager.users.${config.user} = {
|
||||||
# xsession.windowManager.i3.config.terminal = "kitty";
|
# xsession.windowManager.i3.config.terminal = "kitty";
|
||||||
# programs.rofi.terminal = "${pkgs.kitty}/bin/kitty";
|
# programs.rofi.terminal = "${pkgs.kitty}/bin/kitty";
|
||||||
|
@ -1,6 +1,15 @@
|
|||||||
{ config, pkgs, lib, ... }: {
|
{ config, pkgs, lib, ... }: {
|
||||||
|
|
||||||
config = lib.mkIf config.gui.enable {
|
options = {
|
||||||
|
media = {
|
||||||
|
enable = lib.mkEnableOption {
|
||||||
|
description = "Enable media programs.";
|
||||||
|
default = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf (config.gui.enable && config.media.enable) {
|
||||||
home-manager.users.${config.user}.home.packages = with pkgs; [
|
home-manager.users.${config.user}.home.packages = with pkgs; [
|
||||||
mpv # Video viewer
|
mpv # Video viewer
|
||||||
sxiv # Image viewer
|
sxiv # Image viewer
|
||||||
|
@ -1,7 +1,16 @@
|
|||||||
{ config, pkgs, lib, ... }: {
|
{ config, pkgs, lib, ... }: {
|
||||||
|
|
||||||
|
options = {
|
||||||
|
nautilus = {
|
||||||
|
enable = lib.mkEnableOption {
|
||||||
|
description = "Enable Nautilus file manager.";
|
||||||
|
default = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
# Install Nautilus file manager
|
# Install Nautilus file manager
|
||||||
config = lib.mkIf config.gui.enable {
|
config = lib.mkIf (config.gui.enable && config.nautilus.enable) {
|
||||||
home-manager.users.${config.user} = {
|
home-manager.users.${config.user} = {
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
gnome.nautilus
|
gnome.nautilus
|
||||||
|
@ -1,6 +1,15 @@
|
|||||||
{ config, pkgs, lib, ... }: {
|
{ config, pkgs, lib, ... }: {
|
||||||
|
|
||||||
config = lib.mkIf config.gui.enable {
|
options = {
|
||||||
|
obsidian = {
|
||||||
|
enable = lib.mkEnableOption {
|
||||||
|
description = "Enable Obsidian.";
|
||||||
|
default = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf (config.gui.enable && config.obsidian.enable) {
|
||||||
unfreePackages = [ "obsidian" ];
|
unfreePackages = [ "obsidian" ];
|
||||||
home-manager.users.${config.user} = {
|
home-manager.users.${config.user} = {
|
||||||
home.packages = with pkgs; [ obsidian ];
|
home.packages = with pkgs; [ obsidian ];
|
||||||
|
@ -1,6 +1,15 @@
|
|||||||
{ config, pkgs, lib, ... }: {
|
{ config, pkgs, lib, ... }: {
|
||||||
|
|
||||||
config = lib.mkIf config.gui.enable {
|
options = {
|
||||||
|
qbittorrent = {
|
||||||
|
enable = lib.mkEnableOption {
|
||||||
|
description = "Enable qBittorrent.";
|
||||||
|
default = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf (config.gui.enable && config.qbittorrent.enable) {
|
||||||
|
|
||||||
home-manager.users.${config.user} = {
|
home-manager.users.${config.user} = {
|
||||||
|
|
||||||
|
@ -1,13 +0,0 @@
|
|||||||
local M = {}
|
|
||||||
|
|
||||||
M.packer = function(use)
|
|
||||||
use({
|
|
||||||
"lifepillar/vim-gruvbox8",
|
|
||||||
config = function()
|
|
||||||
vim.g.gruvbox_italicize_strings = 0
|
|
||||||
vim.cmd("colorscheme gruvbox8")
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
return M
|
|
@ -1,28 +0,0 @@
|
|||||||
{ config, pkgs, ... }: {
|
|
||||||
|
|
||||||
# Hammerspoon - MacOS custom automation scripting
|
|
||||||
|
|
||||||
home-manager.users.${config.user} = {
|
|
||||||
xdg.configFile."hammerspoon/init.lua".source = ./hammerspoon/init.lua;
|
|
||||||
xdg.configFile."hammerspoon/Spoons/ControlEscape.spoon".source =
|
|
||||||
./hammerspoon/Spoons/ControlEscape.spoon;
|
|
||||||
xdg.configFile."hammerspoon/Spoons/DismissAlerts.spoon".source =
|
|
||||||
./hammerspoon/Spoons/DismissAlerts.spoon;
|
|
||||||
xdg.configFile."hammerspoon/Spoons/Launcher.spoon/init.lua".source =
|
|
||||||
pkgs.substituteAll {
|
|
||||||
src = ./hammerspoon/Spoons/Launcher.spoon/init.lua;
|
|
||||||
firefox = "${pkgs.firefox-bin}/Applications/Firefox.app";
|
|
||||||
discord = "${pkgs.discord}/Applications/Discord.app";
|
|
||||||
kitty = "${pkgs.kitty}/Applications/kitty.app";
|
|
||||||
};
|
|
||||||
xdg.configFile."hammerspoon/Spoons/MoveWindow.spoon".source =
|
|
||||||
./hammerspoon/Spoons/MoveWindow.spoon;
|
|
||||||
};
|
|
||||||
|
|
||||||
homebrew.casks = [ "hammerspoon" ];
|
|
||||||
|
|
||||||
system.activationScripts.postUserActivation.text = ''
|
|
||||||
defaults write org.hammerspoon.Hammerspoon MJConfigFile "~/.config/hammerspoon/init.lua"
|
|
||||||
'';
|
|
||||||
|
|
||||||
}
|
|
@ -1,53 +0,0 @@
|
|||||||
{ config, ... }: {
|
|
||||||
|
|
||||||
# Homebrew - Mac-specific packages that aren't in Nix
|
|
||||||
|
|
||||||
# Requires Homebrew to be installed
|
|
||||||
system.activationScripts.preUserActivation.text = ''
|
|
||||||
if ! xcode-select --version 2>/dev/null; then
|
|
||||||
$DRY_RUN_CMD xcode-select --install
|
|
||||||
fi
|
|
||||||
if ! /usr/local/bin/brew --version 2>/dev/null; then
|
|
||||||
$DRY_RUN_CMD /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
|
||||||
fi
|
|
||||||
'';
|
|
||||||
|
|
||||||
homebrew = {
|
|
||||||
enable = true;
|
|
||||||
onActivation = {
|
|
||||||
autoUpdate = false; # Don't update during rebuild
|
|
||||||
cleanup = "zap"; # Uninstall all programs not declared
|
|
||||||
upgrade = true;
|
|
||||||
};
|
|
||||||
global = {
|
|
||||||
brewfile = true; # Run brew bundle from anywhere
|
|
||||||
lockfiles = false; # Don't save lockfile (since running from anywhere)
|
|
||||||
};
|
|
||||||
taps = [
|
|
||||||
"homebrew/cask" # Required for casks
|
|
||||||
"homebrew/cask-drivers" # Used for Logitech G-Hub
|
|
||||||
];
|
|
||||||
brews = [
|
|
||||||
"trash" # Delete files and folders to trash instead of rm
|
|
||||||
"openjdk" # Required by Apache Directory Studio
|
|
||||||
];
|
|
||||||
casks = [
|
|
||||||
"1password" # 1Password packaging on Nix is broken for macOS
|
|
||||||
"scroll-reverser" # Different scroll style for mouse vs. trackpad
|
|
||||||
"meetingbar" # Show meetings in menu bar
|
|
||||||
"gitify" # Git notifications in menu bar
|
|
||||||
"logitech-g-hub" # Mouse and keyboard management
|
|
||||||
"mimestream" # Gmail client
|
|
||||||
"obsidian" # Obsidian packaging on Nix is not available for macOS
|
|
||||||
"steam" # Not packaged for Nix
|
|
||||||
"apache-directory-studio" # Packaging on Nix is not available for macOS
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
home-manager.users.${config.user} = {
|
|
||||||
|
|
||||||
programs.fish.shellAbbrs.t = "trash";
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
@ -1,9 +0,0 @@
|
|||||||
{ config, ... }: {
|
|
||||||
|
|
||||||
networking = {
|
|
||||||
computerName = "${config.fullName}'\\''s Mac";
|
|
||||||
# Adjust if necessary
|
|
||||||
# hostName = "";
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
@ -1,182 +0,0 @@
|
|||||||
{ pkgs, ... }: {
|
|
||||||
|
|
||||||
services.nix-daemon.enable = true;
|
|
||||||
|
|
||||||
environment.shells = [ pkgs.fish ];
|
|
||||||
|
|
||||||
security.pam.enableSudoTouchIdAuth = true;
|
|
||||||
|
|
||||||
system = {
|
|
||||||
|
|
||||||
keyboard = {
|
|
||||||
remapCapsLockToControl = true;
|
|
||||||
enableKeyMapping = true; # Allows for skhd
|
|
||||||
};
|
|
||||||
|
|
||||||
defaults = {
|
|
||||||
NSGlobalDomain = {
|
|
||||||
|
|
||||||
# Set to dark mode
|
|
||||||
AppleInterfaceStyle = "Dark";
|
|
||||||
|
|
||||||
# Don't change from dark to light automatically
|
|
||||||
# AppleInterfaceSwitchesAutomatically = false;
|
|
||||||
|
|
||||||
# Enable full keyboard access for all controls (e.g. enable Tab in modal dialogs)
|
|
||||||
AppleKeyboardUIMode = 3;
|
|
||||||
|
|
||||||
# Automatically show and hide the menu bar
|
|
||||||
_HIHideMenuBar = true;
|
|
||||||
|
|
||||||
# Expand save panel by default
|
|
||||||
NSNavPanelExpandedStateForSaveMode = true;
|
|
||||||
|
|
||||||
# Expand print panel by default
|
|
||||||
PMPrintingExpandedStateForPrint = true;
|
|
||||||
|
|
||||||
# Replace press-and-hold with key repeat
|
|
||||||
ApplePressAndHoldEnabled = false;
|
|
||||||
|
|
||||||
# Set a fast key repeat rate
|
|
||||||
KeyRepeat = 2;
|
|
||||||
|
|
||||||
# Shorten delay before key repeat begins
|
|
||||||
InitialKeyRepeat = 12;
|
|
||||||
|
|
||||||
# Save to local disk by default, not iCloud
|
|
||||||
NSDocumentSaveNewDocumentsToCloud = false;
|
|
||||||
|
|
||||||
# Disable autocorrect capitalization
|
|
||||||
NSAutomaticCapitalizationEnabled = false;
|
|
||||||
|
|
||||||
# Disable autocorrect smart dashes
|
|
||||||
NSAutomaticDashSubstitutionEnabled = false;
|
|
||||||
|
|
||||||
# Disable autocorrect adding periods
|
|
||||||
NSAutomaticPeriodSubstitutionEnabled = false;
|
|
||||||
|
|
||||||
# Disable autocorrect smart quotation marks
|
|
||||||
NSAutomaticQuoteSubstitutionEnabled = false;
|
|
||||||
|
|
||||||
# Disable autocorrect spellcheck
|
|
||||||
NSAutomaticSpellingCorrectionEnabled = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
dock = {
|
|
||||||
# Automatically show and hide the dock
|
|
||||||
autohide = true;
|
|
||||||
|
|
||||||
# Add translucency in dock for hidden applications
|
|
||||||
showhidden = true;
|
|
||||||
|
|
||||||
# Enable spring loading on all dock items
|
|
||||||
enable-spring-load-actions-on-all-items = true;
|
|
||||||
|
|
||||||
# Highlight hover effect in dock stack grid view
|
|
||||||
mouse-over-hilite-stack = true;
|
|
||||||
|
|
||||||
mineffect = "genie";
|
|
||||||
orientation = "bottom";
|
|
||||||
show-recents = false;
|
|
||||||
tilesize = 44;
|
|
||||||
};
|
|
||||||
|
|
||||||
finder = {
|
|
||||||
|
|
||||||
# Default Finder window set to column view
|
|
||||||
FXPreferredViewStyle = "clmv";
|
|
||||||
|
|
||||||
# Finder search in current folder by default
|
|
||||||
FXDefaultSearchScope = "SCcf";
|
|
||||||
|
|
||||||
# Disable warning when changing file extension
|
|
||||||
FXEnableExtensionChangeWarning = false;
|
|
||||||
|
|
||||||
# Allow quitting of Finder application
|
|
||||||
QuitMenuItem = true;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
# Disable "Are you sure you want to open" dialog
|
|
||||||
LaunchServices.LSQuarantine = false;
|
|
||||||
|
|
||||||
# Disable trackpad tap to click
|
|
||||||
trackpad.Clicking = false;
|
|
||||||
|
|
||||||
# universalaccess = {
|
|
||||||
|
|
||||||
# # Zoom in with Control + Scroll Wheel
|
|
||||||
# closeViewScrollWheelToggle = true;
|
|
||||||
# closeViewZoomFollowsFocus = true;
|
|
||||||
# };
|
|
||||||
|
|
||||||
# Where to save screenshots
|
|
||||||
screencapture.location = "~/Downloads";
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
# Settings that don't have an option in nix-darwin
|
|
||||||
activationScripts.postActivation.text = ''
|
|
||||||
echo "Disable disk image verification"
|
|
||||||
defaults write com.apple.frameworks.diskimages skip-verify -bool true
|
|
||||||
defaults write com.apple.frameworks.diskimages skip-verify-locked -bool true
|
|
||||||
defaults write com.apple.frameworks.diskimages skip-verify-remote -bool true
|
|
||||||
|
|
||||||
echo "Avoid creating .DS_Store files on network volumes"
|
|
||||||
defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool true
|
|
||||||
|
|
||||||
echo "Disable the warning before emptying the Trash"
|
|
||||||
defaults write com.apple.finder WarnOnEmptyTrash -bool false
|
|
||||||
|
|
||||||
echo "Require password immediately after sleep or screen saver begins"
|
|
||||||
defaults write com.apple.screensaver askForPassword -int 1
|
|
||||||
defaults write com.apple.screensaver askForPasswordDelay -int 0
|
|
||||||
|
|
||||||
echo "Allow apps from anywhere"
|
|
||||||
SPCTL=$(spctl --status)
|
|
||||||
if ! [ "$SPCTL" = "assessments disabled" ]; then
|
|
||||||
sudo spctl --master-disable
|
|
||||||
fi
|
|
||||||
|
|
||||||
'';
|
|
||||||
|
|
||||||
# User-level settings
|
|
||||||
activationScripts.postUserActivation.text = ''
|
|
||||||
echo "Show the ~/Library folder"
|
|
||||||
chflags nohidden ~/Library
|
|
||||||
|
|
||||||
echo "Enable dock magnification"
|
|
||||||
defaults write com.apple.dock magnification -bool true
|
|
||||||
|
|
||||||
echo "Set dock magnification size"
|
|
||||||
defaults write com.apple.dock largesize -int 48
|
|
||||||
|
|
||||||
echo "Define dock icon function"
|
|
||||||
__dock_item() {
|
|
||||||
printf "%s%s%s%s%s" \
|
|
||||||
"<dict><key>tile-data</key><dict><key>file-data</key><dict>" \
|
|
||||||
"<key>_CFURLString</key><string>" \
|
|
||||||
"$1" \
|
|
||||||
"</string><key>_CFURLStringType</key><integer>0</integer>" \
|
|
||||||
"</dict></dict></dict>"
|
|
||||||
}
|
|
||||||
|
|
||||||
echo "Choose and order dock icons"
|
|
||||||
defaults write com.apple.dock persistent-apps -array \
|
|
||||||
"$(__dock_item /Applications/1Password.app)" \
|
|
||||||
"$(__dock_item /Applications/Slack.app)" \
|
|
||||||
"$(__dock_item /System/Applications/Calendar.app)" \
|
|
||||||
"$(__dock_item ${pkgs.firefox-bin}/Applications/Firefox.app)" \
|
|
||||||
"$(__dock_item /System/Applications/Messages.app)" \
|
|
||||||
"$(__dock_item /System/Applications/Mail.app)" \
|
|
||||||
"$(__dock_item /Applications/Mimestream.app)" \
|
|
||||||
"$(__dock_item /Applications/zoom.us.app)" \
|
|
||||||
"$(__dock_item ${pkgs.discord}/Applications/Discord.app)" \
|
|
||||||
"$(__dock_item /Applications/Obsidian.app)" \
|
|
||||||
"$(__dock_item ${pkgs.kitty}/Applications/kitty.app)" \
|
|
||||||
"$(__dock_item /System/Applications/System\ Settings.app)"
|
|
||||||
'';
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
@ -1,15 +0,0 @@
|
|||||||
{ config, pkgs, lib, ... }: {
|
|
||||||
|
|
||||||
users.users."${config.user}" = {
|
|
||||||
# macOS user
|
|
||||||
home = config.homePath;
|
|
||||||
shell = pkgs.fish; # Default shell
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
# Used for aerc
|
|
||||||
home-manager.users.${config.user} = {
|
|
||||||
home.sessionVariables = { XDG_CONFIG_HOME = "${config.homePath}/.config"; };
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
@ -1,7 +1,7 @@
|
|||||||
{ config, lib, pkgs, ... }: {
|
{ config, lib, pkgs, ... }: {
|
||||||
|
|
||||||
imports =
|
imports =
|
||||||
[ ../modules/shell ../modules/neovim ../modules/repositories/dotfiles.nix ];
|
[ ./applications ./mail ./neovim ./programming ./repositories ./shell ];
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
user = lib.mkOption {
|
user = lib.mkOption {
|
||||||
@ -36,7 +36,7 @@
|
|||||||
colors = lib.mkOption {
|
colors = lib.mkOption {
|
||||||
type = lib.types.attrs;
|
type = lib.types.attrs;
|
||||||
description = "Base16 color scheme.";
|
description = "Base16 color scheme.";
|
||||||
default = (import ../modules/colorscheme/gruvbox).dark;
|
default = (import ../colorscheme/gruvbox).dark;
|
||||||
};
|
};
|
||||||
dark = lib.mkOption {
|
dark = lib.mkOption {
|
||||||
type = lib.types.bool;
|
type = lib.types.bool;
|
@ -1,9 +0,0 @@
|
|||||||
{ config, ... }: {
|
|
||||||
|
|
||||||
config = {
|
|
||||||
hardware.opengl = {
|
|
||||||
enable = true;
|
|
||||||
driSupport32Bit = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
@ -1,30 +0,0 @@
|
|||||||
{ config, pkgs, lib, ... }: {
|
|
||||||
|
|
||||||
options.gaming.leagueoflegends = lib.mkEnableOption "League of Legends";
|
|
||||||
|
|
||||||
config = lib.mkIf config.gaming.leagueoflegends {
|
|
||||||
|
|
||||||
# League of Legends anti-cheat requirement
|
|
||||||
boot.kernel.sysctl = { "abi.vsyscall32" = 0; };
|
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
|
|
||||||
# Lutris requirement to install the game
|
|
||||||
lutris
|
|
||||||
amdvlk
|
|
||||||
wineWowPackages.stable
|
|
||||||
# vulkan-tools
|
|
||||||
|
|
||||||
# Required according to https://lutris.net/games/league-of-legends/
|
|
||||||
openssl
|
|
||||||
gnome.zenity
|
|
||||||
|
|
||||||
# Don't remember if this is required
|
|
||||||
dconf
|
|
||||||
|
|
||||||
];
|
|
||||||
|
|
||||||
environment.sessionVariables = { QT_X11_NO_MITSHM = "1"; };
|
|
||||||
|
|
||||||
};
|
|
||||||
}
|
|
@ -1,145 +0,0 @@
|
|||||||
{ pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
|
|
||||||
localPort = 25564;
|
|
||||||
publicPort = 49732;
|
|
||||||
rconPort = 25575;
|
|
||||||
rconPassword = "thiscanbeanything";
|
|
||||||
|
|
||||||
in {
|
|
||||||
|
|
||||||
unfreePackages = [ "minecraft-server" ];
|
|
||||||
|
|
||||||
services.minecraft-server = {
|
|
||||||
enable = true;
|
|
||||||
eula = true;
|
|
||||||
declarative = true;
|
|
||||||
whitelist = { };
|
|
||||||
openFirewall = false;
|
|
||||||
serverProperties = {
|
|
||||||
server-port = localPort;
|
|
||||||
difficulty = "normal";
|
|
||||||
gamemode = "survival";
|
|
||||||
white-list = false;
|
|
||||||
enforce-whitelist = false;
|
|
||||||
level-name = "world";
|
|
||||||
motd = "Welcome!";
|
|
||||||
pvp = true;
|
|
||||||
player-idle-timeout = 30;
|
|
||||||
generate-structures = true;
|
|
||||||
max-players = 20;
|
|
||||||
snooper-enabled = false;
|
|
||||||
spawn-npcs = true;
|
|
||||||
spawn-animals = true;
|
|
||||||
spawn-monsters = true;
|
|
||||||
allow-nether = true;
|
|
||||||
allow-flight = false;
|
|
||||||
enable-rcon = true;
|
|
||||||
"rcon.port" = rconPort;
|
|
||||||
"rcon.password" = rconPassword;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
networking.firewall.allowedTCPPorts = [ publicPort ];
|
|
||||||
|
|
||||||
## Automatically start and stop Minecraft server based on player connections
|
|
||||||
|
|
||||||
# Adapted shamelessly from:
|
|
||||||
# https://dataswamp.org/~solene/2022-08-20-on-demand-minecraft-with-systemd.html
|
|
||||||
|
|
||||||
# Prevent Minecraft from starting by default
|
|
||||||
systemd.services.minecraft-server = { wantedBy = pkgs.lib.mkForce [ ]; };
|
|
||||||
|
|
||||||
# Listen for connections on the public port, to trigger the actual
|
|
||||||
# listen-minecraft service.
|
|
||||||
systemd.sockets.listen-minecraft = {
|
|
||||||
wantedBy = [ "sockets.target" ];
|
|
||||||
requires = [ "network.target" ];
|
|
||||||
listenStreams = [ "${toString publicPort}" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
# Proxy traffic to local port, and trigger hook-minecraft
|
|
||||||
systemd.services.listen-minecraft = {
|
|
||||||
path = [ pkgs.systemd ];
|
|
||||||
requires = [ "hook-minecraft.service" "listen-minecraft.socket" ];
|
|
||||||
after = [ "hook-minecraft.service" "listen-minecraft.socket" ];
|
|
||||||
serviceConfig.ExecStart =
|
|
||||||
"${pkgs.systemd.out}/lib/systemd/systemd-socket-proxyd 127.0.0.1:${
|
|
||||||
toString localPort
|
|
||||||
}";
|
|
||||||
};
|
|
||||||
|
|
||||||
# Start Minecraft if required and wait for it to be available
|
|
||||||
# Then unlock the listen-minecraft.service
|
|
||||||
systemd.services.hook-minecraft = {
|
|
||||||
path = with pkgs; [ systemd libressl busybox ];
|
|
||||||
|
|
||||||
# Start Minecraft and the auto-shutdown timer
|
|
||||||
script = ''
|
|
||||||
systemctl start minecraft-server.service
|
|
||||||
systemctl start stop-minecraft.timer
|
|
||||||
'';
|
|
||||||
|
|
||||||
# Keep checking until the service is available
|
|
||||||
postStart = ''
|
|
||||||
for i in $(seq 60); do
|
|
||||||
if ${pkgs.libressl.nc}/bin/nc -z 127.0.0.1 ${
|
|
||||||
toString localPort
|
|
||||||
} > /dev/null ; then
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
${pkgs.busybox.out}/bin/sleep 1
|
|
||||||
done
|
|
||||||
exit 1
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
# Run a player check on a schedule for auto-shutdown
|
|
||||||
systemd.timers.stop-minecraft = {
|
|
||||||
timerConfig = {
|
|
||||||
OnCalendar = "*-*-* *:*:0/20"; # Every 20 seconds
|
|
||||||
Unit = "stop-minecraft.service";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# If no players are connected, then stop services and prepare to resume again
|
|
||||||
systemd.services.stop-minecraft = {
|
|
||||||
serviceConfig.Type = "oneshot";
|
|
||||||
script = ''
|
|
||||||
# Check when service was launched
|
|
||||||
servicestartsec=$(
|
|
||||||
date -d \
|
|
||||||
"$(systemctl show \
|
|
||||||
--property=ActiveEnterTimestamp \
|
|
||||||
minecraft-server.service \
|
|
||||||
| cut -d= -f2)" \
|
|
||||||
+%s)
|
|
||||||
|
|
||||||
# Calculate elapsed time
|
|
||||||
serviceelapsedsec=$(( $(date +%s) - servicestartsec))
|
|
||||||
|
|
||||||
# Ignore if service just started
|
|
||||||
if [ $serviceelapsedsec -lt 180 ]
|
|
||||||
then
|
|
||||||
echo "Server was just started"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
PLAYERS=$(
|
|
||||||
printf "list\n" \
|
|
||||||
| ${pkgs.rcon.out}/bin/rcon -m \
|
|
||||||
-H 127.0.0.1 -p ${builtins.toString rconPort} -P ${rconPassword} \
|
|
||||||
)
|
|
||||||
|
|
||||||
if echo "$PLAYERS" | grep "are 0 of a"
|
|
||||||
then
|
|
||||||
echo "Stopping server"
|
|
||||||
systemctl stop minecraft-server.service
|
|
||||||
systemctl stop hook-minecraft.service
|
|
||||||
systemctl stop stop-minecraft.timer
|
|
||||||
fi
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
@ -1,14 +0,0 @@
|
|||||||
{ ... }: {
|
|
||||||
|
|
||||||
imports = [
|
|
||||||
./audio.nix
|
|
||||||
./boot.nix
|
|
||||||
./keyboard.nix
|
|
||||||
./monitors.nix
|
|
||||||
./mouse.nix
|
|
||||||
./networking.nix
|
|
||||||
./sleep.nix
|
|
||||||
./wifi.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
}
|
|
@ -1,53 +0,0 @@
|
|||||||
{ config, pkgs, lib, ... }: {
|
|
||||||
|
|
||||||
# Timezone required for Redshift schedule
|
|
||||||
imports = [ ../nixos/timezone.nix ];
|
|
||||||
|
|
||||||
config = lib.mkIf config.gui.enable {
|
|
||||||
|
|
||||||
environment.systemPackages = with pkgs;
|
|
||||||
[
|
|
||||||
ddcutil # Monitor brightness control
|
|
||||||
];
|
|
||||||
|
|
||||||
# Reduce blue light at night
|
|
||||||
services.redshift = {
|
|
||||||
enable = true;
|
|
||||||
brightness = {
|
|
||||||
day = "1.0";
|
|
||||||
night = "1.0";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# Detect monitors (brightness) for ddcutil
|
|
||||||
hardware.i2c.enable = true;
|
|
||||||
|
|
||||||
# Grant main user access to external monitors
|
|
||||||
users.users.${config.user}.extraGroups = [ "i2c" ];
|
|
||||||
|
|
||||||
services.xserver.displayManager = {
|
|
||||||
|
|
||||||
# Put the login screen on the left monitor
|
|
||||||
lightdm.greeters.gtk.extraConfig = ''
|
|
||||||
active-monitor=0
|
|
||||||
'';
|
|
||||||
|
|
||||||
# Set up screen position and rotation
|
|
||||||
setupCommands = ''
|
|
||||||
${pkgs.xorg.xrandr}/bin/xrandr --output DisplayPort-0 \
|
|
||||||
--mode 1920x1200 \
|
|
||||||
--pos 1920x0 \
|
|
||||||
--rotate left \
|
|
||||||
--output HDMI-0 \
|
|
||||||
--primary \
|
|
||||||
--mode 1920x1080 \
|
|
||||||
--pos 0x560 \
|
|
||||||
--rotate normal \
|
|
||||||
--output DVI-0 --off \
|
|
||||||
--output DVI-1 --off \
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
@ -1,21 +0,0 @@
|
|||||||
{ config, pkgs, lib, ... }: {
|
|
||||||
|
|
||||||
config = lib.mkIf config.gui.enable {
|
|
||||||
|
|
||||||
# Mouse customization
|
|
||||||
services.ratbagd.enable = true;
|
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
libratbag # Mouse adjustments
|
|
||||||
piper # Mouse adjustments GUI
|
|
||||||
];
|
|
||||||
|
|
||||||
services.xserver.libinput.mouse = {
|
|
||||||
# Disable mouse acceleration
|
|
||||||
accelProfile = "flat";
|
|
||||||
accelSpeed = "1.15";
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
@ -1,10 +0,0 @@
|
|||||||
{ ... }: {
|
|
||||||
|
|
||||||
# The global useDHCP flag is deprecated, therefore explicitly set to false here.
|
|
||||||
# Per-interface useDHCP will be mandatory in the future, so this generated config
|
|
||||||
# replicates the default behaviour.
|
|
||||||
networking.useDHCP = false;
|
|
||||||
networking.interfaces.enp0s31f6.useDHCP = true;
|
|
||||||
networking.interfaces.wlp3s0.useDHCP = true;
|
|
||||||
|
|
||||||
}
|
|
@ -1,7 +0,0 @@
|
|||||||
{ config, ... }: {
|
|
||||||
|
|
||||||
# Servers need a bootloader or they won't start
|
|
||||||
boot.loader.systemd-boot.enable = true;
|
|
||||||
boot.loader.efi.canTouchEfiVariables = true;
|
|
||||||
|
|
||||||
}
|
|
@ -1,8 +0,0 @@
|
|||||||
{ ... }: {
|
|
||||||
|
|
||||||
# Prevent wake from keyboard
|
|
||||||
powerManagement.powerDownCommands = ''
|
|
||||||
for wakeup in /sys/bus/usb/devices/1-*/power/wakeup; do echo disabled > $wakeup; done
|
|
||||||
'';
|
|
||||||
|
|
||||||
}
|
|
@ -1,9 +0,0 @@
|
|||||||
{ ... }: {
|
|
||||||
|
|
||||||
# Enables wireless support via wpa_supplicant.
|
|
||||||
networking.wireless.enable = true;
|
|
||||||
|
|
||||||
# Allows the user to control the WiFi settings.
|
|
||||||
networking.wireless.userControlled.enable = true;
|
|
||||||
|
|
||||||
}
|
|
@ -1,6 +1,8 @@
|
|||||||
{ config, pkgs, ... }: {
|
{ config, pkgs, lib, ... }: {
|
||||||
|
|
||||||
config = {
|
options.mail.aerc.enable = lib.mkEnableOption "Aerc email.";
|
||||||
|
|
||||||
|
config = lib.mkIf config.mail.aerc.enable {
|
||||||
|
|
||||||
home-manager.users.${config.user} = {
|
home-manager.users.${config.user} = {
|
||||||
|
|
||||||
|
@ -3,18 +3,19 @@
|
|||||||
imports = [ ./himalaya.nix ./aerc.nix ];
|
imports = [ ./himalaya.nix ./aerc.nix ];
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
mailUser = lib.mkOption {
|
mail.enable = lib.mkEnableOption "Mail service.";
|
||||||
|
mail.user = lib.mkOption {
|
||||||
type = lib.types.str;
|
type = lib.types.str;
|
||||||
description = "User name for the email address.";
|
description = "User name for the email address.";
|
||||||
default = config.user;
|
default = config.user;
|
||||||
};
|
};
|
||||||
mailServer = lib.mkOption {
|
mail.server = lib.mkOption {
|
||||||
type = lib.types.str;
|
type = lib.types.str;
|
||||||
description = "Server name for the email address.";
|
description = "Server name for the email address.";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
config = {
|
config = lib.mkIf config.mail.enable {
|
||||||
|
|
||||||
home-manager.users.${config.user} = {
|
home-manager.users.${config.user} = {
|
||||||
programs.mbsync = { enable = true; };
|
programs.mbsync = { enable = true; };
|
||||||
@ -25,13 +26,13 @@
|
|||||||
accounts.email = {
|
accounts.email = {
|
||||||
maildirBasePath = "${config.homePath}/mail";
|
maildirBasePath = "${config.homePath}/mail";
|
||||||
accounts = {
|
accounts = {
|
||||||
home = let address = "${config.mailUser}@${config.mailServer}";
|
home = let address = "${config.mail.user}@${config.mail.server}";
|
||||||
in {
|
in {
|
||||||
userName = address;
|
userName = address;
|
||||||
realName = config.fullName;
|
realName = config.fullName;
|
||||||
primary = true;
|
primary = true;
|
||||||
inherit address;
|
inherit address;
|
||||||
aliases = map (mailUser: "${mailUser}@${config.mailServer}") [
|
aliases = map (user: "${user}@${config.mail.server}") [
|
||||||
"me"
|
"me"
|
||||||
"hey"
|
"hey"
|
||||||
"admin"
|
"admin"
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
{ config, ... }: {
|
{ config, lib, ... }: {
|
||||||
|
|
||||||
config = {
|
options.mail.himalaya.enable = lib.mkEnableOption "Himalaya email.";
|
||||||
|
|
||||||
|
config = lib.mkIf config.mail.himalaya.enable {
|
||||||
|
|
||||||
home-manager.users.${config.user} = {
|
home-manager.users.${config.user} = {
|
||||||
|
|
||||||
|
@ -9,31 +9,36 @@ let
|
|||||||
|
|
||||||
in {
|
in {
|
||||||
|
|
||||||
home-manager.users.${config.user} =
|
options.neovim.enable = lib.mkEnableOption "Neovim.";
|
||||||
|
|
||||||
{
|
config = lib.mkIf config.neovim.enable {
|
||||||
|
home-manager.users.${config.user} =
|
||||||
|
|
||||||
home.packages = [ neovim ];
|
{
|
||||||
|
|
||||||
programs.git.extraConfig.core.editor = "nvim";
|
home.packages = [ neovim ];
|
||||||
home.sessionVariables = {
|
|
||||||
EDITOR = "nvim";
|
programs.git.extraConfig.core.editor = "nvim";
|
||||||
MANPAGER = "nvim +Man!";
|
home.sessionVariables = {
|
||||||
};
|
EDITOR = "nvim";
|
||||||
programs.fish = {
|
MANPAGER = "nvim +Man!";
|
||||||
shellAliases = { vim = "nvim"; };
|
|
||||||
shellAbbrs = {
|
|
||||||
v = lib.mkForce "nvim";
|
|
||||||
vl = lib.mkForce "nvim -c 'normal! `0' -c 'bdelete 1'";
|
|
||||||
vll = "nvim -c 'Telescope oldfiles'";
|
|
||||||
};
|
};
|
||||||
|
programs.fish = {
|
||||||
|
shellAliases = { vim = "nvim"; };
|
||||||
|
shellAbbrs = {
|
||||||
|
v = lib.mkForce "nvim";
|
||||||
|
vl = lib.mkForce "nvim -c 'normal! `0' -c 'bdelete 1'";
|
||||||
|
vll = "nvim -c 'Telescope oldfiles'";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
programs.kitty.settings.scrollback_pager = lib.mkForce ''
|
||||||
|
${neovim}/bin/nvim -c 'setlocal nonumber nolist showtabline=0 foldcolumn=0|Man!' -c "autocmd VimEnter * normal G" -'';
|
||||||
|
|
||||||
};
|
};
|
||||||
programs.kitty.settings.scrollback_pager = lib.mkForce ''
|
|
||||||
${neovim}/bin/nvim -c 'setlocal nonumber nolist showtabline=0 foldcolumn=0|Man!' -c "autocmd VimEnter * normal G" -'';
|
|
||||||
|
|
||||||
};
|
# # Used for icons in Vim
|
||||||
|
# fonts.fonts = with pkgs; [ nerdfonts ];
|
||||||
|
|
||||||
# # Used for icons in Vim
|
};
|
||||||
# fonts.fonts = with pkgs; [ nerdfonts ];
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,9 +0,0 @@
|
|||||||
{ config, ... }: {
|
|
||||||
|
|
||||||
imports = [ ./user.nix ./timezone.nix ./doas.nix ];
|
|
||||||
|
|
||||||
# Pin a state version to prevent warnings
|
|
||||||
system.stateVersion =
|
|
||||||
config.home-manager.users.${config.user}.home.stateVersion;
|
|
||||||
|
|
||||||
}
|
|
@ -1,30 +0,0 @@
|
|||||||
# Replace sudo with doas
|
|
||||||
|
|
||||||
{ config, ... }: {
|
|
||||||
|
|
||||||
security = {
|
|
||||||
|
|
||||||
# Remove sudo
|
|
||||||
sudo.enable = false;
|
|
||||||
|
|
||||||
# Add doas
|
|
||||||
doas = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
# No password required
|
|
||||||
wheelNeedsPassword = false;
|
|
||||||
|
|
||||||
# Pass environment variables from user to root
|
|
||||||
# Also requires removing password here
|
|
||||||
extraRules = [{
|
|
||||||
groups = [ "wheel" ];
|
|
||||||
noPass = true;
|
|
||||||
keepEnv = true;
|
|
||||||
}];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
home-manager.users.${config.user}.programs.fish.shellAliases = {
|
|
||||||
sudo = "doas";
|
|
||||||
};
|
|
||||||
}
|
|
@ -1,15 +0,0 @@
|
|||||||
{ ... }: {
|
|
||||||
|
|
||||||
# Service to determine location for time zone
|
|
||||||
services.geoclue2.enable = true;
|
|
||||||
services.geoclue2.enableWifi = false; # Breaks when it can't connect
|
|
||||||
location = { provider = "geoclue2"; };
|
|
||||||
|
|
||||||
# Enable local time based on time zone
|
|
||||||
services.localtimed.enable = true;
|
|
||||||
|
|
||||||
# Required to get localtimed to talk to geoclue2
|
|
||||||
services.geoclue2.appConfig.localtimed.isSystem = true;
|
|
||||||
services.geoclue2.appConfig.localtimed.isAllowed = true;
|
|
||||||
|
|
||||||
}
|
|
12
modules/programming/default.nix
Normal file
12
modules/programming/default.nix
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{ config, pkgs, lib, ... }: {
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
./haskell.nix
|
||||||
|
./kubernetes.nix
|
||||||
|
./lua.nix
|
||||||
|
./nix.nix
|
||||||
|
./python.nix
|
||||||
|
./terraform.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
}
|
@ -1,8 +1,14 @@
|
|||||||
{ ... }: {
|
{ config, pkgs, lib, ... }: {
|
||||||
|
|
||||||
# Binary Cache for Haskell.nix
|
options.haskell.enable = lib.mkEnableOption "Haskell programming language.";
|
||||||
nix.settings.trusted-public-keys =
|
|
||||||
[ "hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ=" ];
|
config = lib.mkIf config.haskell.enable {
|
||||||
nix.settings.substituters = [ "https://cache.iog.io" ];
|
|
||||||
|
# Binary Cache for Haskell.nix
|
||||||
|
nix.settings.trusted-public-keys =
|
||||||
|
[ "hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ=" ];
|
||||||
|
nix.settings.substituters = [ "https://cache.iog.io" ];
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,138 +1,143 @@
|
|||||||
{ config, pkgs, ... }: {
|
{ config, pkgs, lib, ... }: {
|
||||||
|
|
||||||
home-manager.users.${config.user} = {
|
options.kubernetes.enable = lib.mkEnableOption "Kubernetes tools.";
|
||||||
|
|
||||||
home.packages = with pkgs; [
|
config = lib.mkIf config.kubernetes.enable {
|
||||||
kubectl # Basic Kubernetes queries
|
home-manager.users.${config.user} = {
|
||||||
kubernetes-helm # Helm CLI
|
|
||||||
fluxcd # Bootstrap clusters with Flux
|
|
||||||
kustomize # Kustomize CLI (for Flux)
|
|
||||||
];
|
|
||||||
|
|
||||||
programs.fish.shellAbbrs = {
|
home.packages = with pkgs; [
|
||||||
k = "kubectl";
|
kubectl # Basic Kubernetes queries
|
||||||
pods = "kubectl get pods -A";
|
kubernetes-helm # Helm CLI
|
||||||
nodes = "kubectl get nodes";
|
fluxcd # Bootstrap clusters with Flux
|
||||||
deploys = "kubectl get deployments -A";
|
kustomize # Kustomize CLI (for Flux)
|
||||||
dash = "kube-dashboard";
|
];
|
||||||
ks = "k9s";
|
|
||||||
};
|
|
||||||
|
|
||||||
# Terminal Kubernetes UI
|
programs.fish.shellAbbrs = {
|
||||||
programs.k9s = {
|
k = "kubectl";
|
||||||
enable = true;
|
pods = "kubectl get pods -A";
|
||||||
# settings = { k9s = { headless = true; }; };
|
nodes = "kubectl get nodes";
|
||||||
skin = {
|
deploys = "kubectl get deployments -A";
|
||||||
k9s = {
|
dash = "kube-dashboard";
|
||||||
body = {
|
ks = "k9s";
|
||||||
fgColor = config.theme.colors.base06;
|
};
|
||||||
bgColor = config.theme.colors.base00;
|
|
||||||
logoColor = config.theme.colors.base02; # *blue ?
|
# Terminal Kubernetes UI
|
||||||
};
|
programs.k9s = {
|
||||||
# Search bar
|
enable = true;
|
||||||
prompt = {
|
# settings = { k9s = { headless = true; }; };
|
||||||
fgColor = config.theme.colors.base06;
|
skin = {
|
||||||
bgColor = config.theme.colors.base00;
|
k9s = {
|
||||||
suggestColor = config.theme.colors.base03;
|
body = {
|
||||||
};
|
|
||||||
# Header left side
|
|
||||||
info = {
|
|
||||||
fgColor = config.theme.colors.base04;
|
|
||||||
sectionColor = config.theme.colors.base05;
|
|
||||||
};
|
|
||||||
dialog = {
|
|
||||||
fgColor = config.theme.colors.base06;
|
|
||||||
bgColor = config.theme.colors.base00;
|
|
||||||
buttonFgColor = config.theme.colors.base06;
|
|
||||||
buttonBgColor = config.theme.colors.base0E;
|
|
||||||
buttonFocusFgColor = config.theme.colors.base07;
|
|
||||||
buttonFocusBgColor = config.theme.colors.base02; # *cyan
|
|
||||||
labelFgColor = config.theme.colors.base09;
|
|
||||||
fieldFgColor = config.theme.colors.base06;
|
|
||||||
};
|
|
||||||
frame = {
|
|
||||||
border = {
|
|
||||||
fgColor = config.theme.colors.base01;
|
|
||||||
focusColor = config.theme.colors.base06;
|
|
||||||
};
|
|
||||||
menu = {
|
|
||||||
fgColor = config.theme.colors.base06;
|
|
||||||
keyColor = config.theme.colors.base0E; # *magenta
|
|
||||||
numKeyColor = config.theme.colors.base0E; # *magenta
|
|
||||||
};
|
|
||||||
crumbs = {
|
|
||||||
fgColor = config.theme.colors.base06;
|
|
||||||
bgColor = config.theme.colors.base01;
|
|
||||||
activeColor = config.theme.colors.base03;
|
|
||||||
};
|
|
||||||
status = {
|
|
||||||
newColor = config.theme.colors.base04; # *cyan
|
|
||||||
modifyColor = config.theme.colors.base0D; # *blue
|
|
||||||
addColor = config.theme.colors.base0B; # *green
|
|
||||||
errorColor = config.theme.colors.base08; # *red
|
|
||||||
highlightColor = config.theme.colors.base09; # *orange
|
|
||||||
killColor = config.theme.colors.base03; # *comment
|
|
||||||
completedColor = config.theme.colors.base03; # *comment
|
|
||||||
};
|
|
||||||
title = {
|
|
||||||
fgColor = config.theme.colors.base06;
|
fgColor = config.theme.colors.base06;
|
||||||
bgColor = config.theme.colors.base00;
|
bgColor = config.theme.colors.base00;
|
||||||
highlightColor = config.theme.colors.base09; # *orange
|
logoColor = config.theme.colors.base02; # *blue ?
|
||||||
counterColor = config.theme.colors.base0D; # *blue
|
|
||||||
filterColor = config.theme.colors.base0E; # *magenta
|
|
||||||
};
|
};
|
||||||
};
|
# Search bar
|
||||||
views = {
|
prompt = {
|
||||||
charts = {
|
|
||||||
bgColor = config.theme.colors.base00;
|
|
||||||
defaultDialColors =
|
|
||||||
[ config.theme.colors.base0D config.theme.colors.base08 ];
|
|
||||||
# - *blue
|
|
||||||
# - *red
|
|
||||||
defaultChartColors =
|
|
||||||
[ config.theme.colors.base0D config.theme.colors.base08 ];
|
|
||||||
# - *blue
|
|
||||||
# - *red
|
|
||||||
};
|
|
||||||
table = {
|
|
||||||
# List of resources
|
|
||||||
fgColor = config.theme.colors.base06;
|
fgColor = config.theme.colors.base06;
|
||||||
bgColor = config.theme.colors.base00;
|
bgColor = config.theme.colors.base00;
|
||||||
|
suggestColor = config.theme.colors.base03;
|
||||||
# Row selection
|
};
|
||||||
cursorFgColor = config.theme.colors.base07;
|
# Header left side
|
||||||
cursorBgColor = config.theme.colors.base01;
|
info = {
|
||||||
|
fgColor = config.theme.colors.base04;
|
||||||
# Header row
|
sectionColor = config.theme.colors.base05;
|
||||||
header = {
|
};
|
||||||
fgColor = config.theme.colors.base0D;
|
dialog = {
|
||||||
bgColor = config.theme.colors.base00;
|
fgColor = config.theme.colors.base06;
|
||||||
sorterColor = config.theme.colors.base0A; # *selection
|
bgColor = config.theme.colors.base00;
|
||||||
|
buttonFgColor = config.theme.colors.base06;
|
||||||
|
buttonBgColor = config.theme.colors.base0E;
|
||||||
|
buttonFocusFgColor = config.theme.colors.base07;
|
||||||
|
buttonFocusBgColor = config.theme.colors.base02; # *cyan
|
||||||
|
labelFgColor = config.theme.colors.base09;
|
||||||
|
fieldFgColor = config.theme.colors.base06;
|
||||||
|
};
|
||||||
|
frame = {
|
||||||
|
border = {
|
||||||
|
fgColor = config.theme.colors.base01;
|
||||||
|
focusColor = config.theme.colors.base06;
|
||||||
};
|
};
|
||||||
};
|
menu = {
|
||||||
xray = {
|
fgColor = config.theme.colors.base06;
|
||||||
fgColor = config.theme.colors.base06;
|
keyColor = config.theme.colors.base0E; # *magenta
|
||||||
bgColor = config.theme.colors.base00;
|
numKeyColor = config.theme.colors.base0E; # *magenta
|
||||||
cursorColor = config.theme.colors.base06;
|
};
|
||||||
graphicColor = config.theme.colors.base0D;
|
crumbs = {
|
||||||
showIcons = false;
|
fgColor = config.theme.colors.base06;
|
||||||
};
|
bgColor = config.theme.colors.base01;
|
||||||
yaml = {
|
activeColor = config.theme.colors.base03;
|
||||||
keyColor = config.theme.colors.base0D;
|
};
|
||||||
colonColor = config.theme.colors.base04;
|
status = {
|
||||||
fgColor = config.theme.colors.base03;
|
newColor = config.theme.colors.base04; # *cyan
|
||||||
};
|
modifyColor = config.theme.colors.base0D; # *blue
|
||||||
logs = {
|
addColor = config.theme.colors.base0B; # *green
|
||||||
fgColor = config.theme.colors.base06;
|
errorColor = config.theme.colors.base08; # *red
|
||||||
bgColor = config.theme.colors.base00;
|
highlightColor = config.theme.colors.base09; # *orange
|
||||||
indicator = {
|
killColor = config.theme.colors.base03; # *comment
|
||||||
|
completedColor = config.theme.colors.base03; # *comment
|
||||||
|
};
|
||||||
|
title = {
|
||||||
fgColor = config.theme.colors.base06;
|
fgColor = config.theme.colors.base06;
|
||||||
bgColor = config.theme.colors.base00;
|
bgColor = config.theme.colors.base00;
|
||||||
|
highlightColor = config.theme.colors.base09; # *orange
|
||||||
|
counterColor = config.theme.colors.base0D; # *blue
|
||||||
|
filterColor = config.theme.colors.base0E; # *magenta
|
||||||
|
};
|
||||||
|
};
|
||||||
|
views = {
|
||||||
|
charts = {
|
||||||
|
bgColor = config.theme.colors.base00;
|
||||||
|
defaultDialColors =
|
||||||
|
[ config.theme.colors.base0D config.theme.colors.base08 ];
|
||||||
|
# - *blue
|
||||||
|
# - *red
|
||||||
|
defaultChartColors =
|
||||||
|
[ config.theme.colors.base0D config.theme.colors.base08 ];
|
||||||
|
# - *blue
|
||||||
|
# - *red
|
||||||
|
};
|
||||||
|
table = {
|
||||||
|
# List of resources
|
||||||
|
fgColor = config.theme.colors.base06;
|
||||||
|
bgColor = config.theme.colors.base00;
|
||||||
|
|
||||||
|
# Row selection
|
||||||
|
cursorFgColor = config.theme.colors.base07;
|
||||||
|
cursorBgColor = config.theme.colors.base01;
|
||||||
|
|
||||||
|
# Header row
|
||||||
|
header = {
|
||||||
|
fgColor = config.theme.colors.base0D;
|
||||||
|
bgColor = config.theme.colors.base00;
|
||||||
|
sorterColor = config.theme.colors.base0A; # *selection
|
||||||
|
};
|
||||||
|
};
|
||||||
|
xray = {
|
||||||
|
fgColor = config.theme.colors.base06;
|
||||||
|
bgColor = config.theme.colors.base00;
|
||||||
|
cursorColor = config.theme.colors.base06;
|
||||||
|
graphicColor = config.theme.colors.base0D;
|
||||||
|
showIcons = false;
|
||||||
|
};
|
||||||
|
yaml = {
|
||||||
|
keyColor = config.theme.colors.base0D;
|
||||||
|
colonColor = config.theme.colors.base04;
|
||||||
|
fgColor = config.theme.colors.base03;
|
||||||
|
};
|
||||||
|
logs = {
|
||||||
|
fgColor = config.theme.colors.base06;
|
||||||
|
bgColor = config.theme.colors.base00;
|
||||||
|
indicator = {
|
||||||
|
fgColor = config.theme.colors.base06;
|
||||||
|
bgColor = config.theme.colors.base00;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -1,8 +1,12 @@
|
|||||||
{ config, pkgs, ... }: {
|
{ config, pkgs, lib, ... }: {
|
||||||
|
|
||||||
home-manager.users.${config.user}.home.packages = with pkgs; [
|
options.lua.enable = lib.mkEnableOption "Lua programming language.";
|
||||||
stylua # Lua formatter
|
|
||||||
sumneko-lua-language-server # Lua LSP
|
config = lib.mkIf config.lua.enable {
|
||||||
];
|
home-manager.users.${config.user}.home.packages = with pkgs; [
|
||||||
|
stylua # Lua formatter
|
||||||
|
sumneko-lua-language-server # Lua LSP
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,17 @@
|
|||||||
{ config, pkgs, ... }: {
|
{ config, pkgs, lib, ... }: {
|
||||||
|
|
||||||
home-manager.users.${config.user} = {
|
options.nixlang.enable = lib.mkEnableOption "Nix programming language.";
|
||||||
|
|
||||||
home.packages = with pkgs; [
|
config = lib.mkIf config.nixlang.enable {
|
||||||
nixfmt # Nix file formatter
|
|
||||||
nil # Nix language server
|
home-manager.users.${config.user} = {
|
||||||
];
|
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
nixfmt # Nix file formatter
|
||||||
|
nil # Nix language server
|
||||||
|
];
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,15 +1,21 @@
|
|||||||
{ config, pkgs, ... }: {
|
{ config, pkgs, lib, ... }: {
|
||||||
|
|
||||||
home-manager.users.${config.user} = {
|
options.python.enable = lib.mkEnableOption "Python programming language.";
|
||||||
|
|
||||||
home.packages = with pkgs; [
|
config = lib.mkIf config.python.enable {
|
||||||
# python310 # Standard Python interpreter
|
|
||||||
nodePackages.pyright # Python language server
|
|
||||||
black # Python formatter
|
|
||||||
python310Packages.flake8 # Python linter
|
|
||||||
];
|
|
||||||
|
|
||||||
programs.fish.shellAbbrs = { py = "python3"; };
|
home-manager.users.${config.user} = {
|
||||||
|
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
# python310 # Standard Python interpreter
|
||||||
|
nodePackages.pyright # Python language server
|
||||||
|
black # Python formatter
|
||||||
|
python310Packages.flake8 # Python linter
|
||||||
|
];
|
||||||
|
|
||||||
|
programs.fish.shellAbbrs = { py = "python3"; };
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,15 +1,21 @@
|
|||||||
{ config, pkgs, ... }: {
|
{ config, pkgs, lib, ... }: {
|
||||||
|
|
||||||
|
options.terraform.enable = lib.mkEnableOption "Terraform tools.";
|
||||||
|
|
||||||
|
config = lib.mkIf config.terraform.enable {
|
||||||
|
|
||||||
|
home-manager.users.${config.user} = {
|
||||||
|
programs.fish.shellAbbrs = {
|
||||||
|
# Terraform
|
||||||
|
te = "terraform";
|
||||||
|
};
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
terraform # Terraform executable
|
||||||
|
terraform-ls # Language server
|
||||||
|
tflint # Linter
|
||||||
|
];
|
||||||
|
|
||||||
home-manager.users.${config.user} = {
|
|
||||||
programs.fish.shellAbbrs = {
|
|
||||||
# Terraform
|
|
||||||
te = "terraform";
|
|
||||||
};
|
};
|
||||||
home.packages = with pkgs; [
|
|
||||||
terraform # Terraform executable
|
|
||||||
terraform-ls # Language server
|
|
||||||
tflint # Linter
|
|
||||||
];
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
5
modules/repositories/default.nix
Normal file
5
modules/repositories/default.nix
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{ ... }: {
|
||||||
|
|
||||||
|
imports = [ ./dotfiles.nix ./notes.nix ];
|
||||||
|
|
||||||
|
}
|
@ -1,24 +1,30 @@
|
|||||||
{ config, pkgs, lib, ... }: {
|
{ config, pkgs, lib, ... }: {
|
||||||
|
|
||||||
home-manager.users.${config.user} = {
|
options.dotfiles.enable = lib.mkEnableOption "Clone dotfiles.";
|
||||||
|
|
||||||
home.activation = {
|
config = lib.mkIf config.dotfiles.enable {
|
||||||
|
|
||||||
# Always clone dotfiles repository if it doesn't exist
|
home-manager.users.${config.user} = {
|
||||||
cloneDotfiles =
|
|
||||||
config.home-manager.users.${config.user}.lib.dag.entryAfter
|
home.activation = {
|
||||||
[ "writeBoundary" ] ''
|
|
||||||
if [ ! -d "${config.dotfilesPath}" ]; then
|
# Always clone dotfiles repository if it doesn't exist
|
||||||
$DRY_RUN_CMD mkdir --parents $VERBOSE_ARG $(dirname "${config.dotfilesPath}")
|
cloneDotfiles =
|
||||||
$DRY_RUN_CMD ${pkgs.git}/bin/git clone ${config.dotfilesRepo} "${config.dotfilesPath}"
|
config.home-manager.users.${config.user}.lib.dag.entryAfter
|
||||||
fi
|
[ "writeBoundary" ] ''
|
||||||
'';
|
if [ ! -d "${config.dotfilesPath}" ]; then
|
||||||
|
$DRY_RUN_CMD mkdir --parents $VERBOSE_ARG $(dirname "${config.dotfilesPath}")
|
||||||
|
$DRY_RUN_CMD ${pkgs.git}/bin/git clone ${config.dotfilesRepo} "${config.dotfilesPath}"
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
# Set a variable for dotfiles repo, not necessary but convenient
|
||||||
|
home.sessionVariables.DOTS = config.dotfilesPath;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# Set a variable for dotfiles repo, not necessary but convenient
|
|
||||||
home.sessionVariables.DOTS = config.dotfilesPath;
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,28 +0,0 @@
|
|||||||
{ config, pkgs, lib, ... }: {
|
|
||||||
|
|
||||||
services.keybase.enable = true;
|
|
||||||
services.kbfs = {
|
|
||||||
enable = true;
|
|
||||||
# enableRedirector = true;
|
|
||||||
mountPoint = "/run/user/1000/keybase/kbfs";
|
|
||||||
};
|
|
||||||
security.wrappers.keybase-redirector = {
|
|
||||||
setuid = true;
|
|
||||||
owner = "root";
|
|
||||||
group = "root";
|
|
||||||
source = "${pkgs.kbfs}/bin/redirector";
|
|
||||||
};
|
|
||||||
|
|
||||||
home-manager.users.${config.user} = {
|
|
||||||
home.packages = [ (lib.mkIf config.gui.enable pkgs.keybase-gui) ];
|
|
||||||
home.file = let
|
|
||||||
ignorePatterns = ''
|
|
||||||
keybase/
|
|
||||||
kbfs/'';
|
|
||||||
in {
|
|
||||||
".rgignore".text = ignorePatterns;
|
|
||||||
".fdignore".text = ignorePatterns;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
@ -1,6 +0,0 @@
|
|||||||
{ pkgs, ... }: {
|
|
||||||
|
|
||||||
services.mullvad-vpn.enable = true;
|
|
||||||
environment.systemPackages = [ pkgs.mullvad-vpn ];
|
|
||||||
|
|
||||||
}
|
|
@ -1,21 +0,0 @@
|
|||||||
{ ... }: {
|
|
||||||
|
|
||||||
services.n8n = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
n8n = {
|
|
||||||
listenAddress = "127.0.0.1";
|
|
||||||
port = 5678;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
caddyRoutes = [{
|
|
||||||
match = [{ host = [ config.n8nServer ]; }];
|
|
||||||
handle = [{
|
|
||||||
handler = "reverse_proxy";
|
|
||||||
upstreams = [{ dial = "localhost:5678"; }];
|
|
||||||
}];
|
|
||||||
}];
|
|
||||||
|
|
||||||
}
|
|
@ -1,6 +1,8 @@
|
|||||||
{ config, pkgs, ... }: {
|
{ config, pkgs, lib, ... }: {
|
||||||
|
|
||||||
home-manager.users.${config.user} = {
|
options.charm.enable = lib.mkEnableOption "Charm utilities.";
|
||||||
|
|
||||||
|
config.home-manager.users.${config.user} = lib.mkIf config.charm.enable {
|
||||||
|
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
glow # Markdown previews
|
glow # Markdown previews
|
||||||
|
@ -1,19 +0,0 @@
|
|||||||
{ config, lib, ... }: {
|
|
||||||
|
|
||||||
# Systemd doesn't work in WSL so these must be disabled
|
|
||||||
services.geoclue2.enable = lib.mkForce false;
|
|
||||||
location = { provider = lib.mkForce "manual"; };
|
|
||||||
services.localtimed.enable = lib.mkForce false;
|
|
||||||
|
|
||||||
# Used by NeoVim for clipboard sharing with Windows
|
|
||||||
# home-manager.users.${config.user}.home.sessionPath =
|
|
||||||
# [ "/mnt/c/Program Files/win32yank/" ];
|
|
||||||
|
|
||||||
# Replace config directory with our repo, since it sources from config on
|
|
||||||
# every launch
|
|
||||||
system.activationScripts.configDir.text = ''
|
|
||||||
rm -rf /etc/nixos
|
|
||||||
ln --symbolic --no-dereference --force ${config.dotfilesPath} /etc/nixos
|
|
||||||
'';
|
|
||||||
|
|
||||||
}
|
|
@ -1,6 +1,15 @@
|
|||||||
{ config, pkgs, lib, ... }: {
|
{ config, pkgs, lib, ... }: {
|
||||||
|
|
||||||
config = lib.mkIf config.gui.enable {
|
options = {
|
||||||
|
calibre = {
|
||||||
|
enable = lib.mkEnableOption {
|
||||||
|
description = "Enable Calibre.";
|
||||||
|
default = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf (config.gui.enable && config.calibre.enable) {
|
||||||
home-manager.users.${config.user} = {
|
home-manager.users.${config.user} = {
|
||||||
home.packages = with pkgs; [ calibre ];
|
home.packages = with pkgs; [ calibre ];
|
||||||
# home.sessionVariables = { CALIBRE_USE_DARK_PALETTE = 1; };
|
# home.sessionVariables = { CALIBRE_USE_DARK_PALETTE = 1; };
|
5
nixos/applications/default.nix
Normal file
5
nixos/applications/default.nix
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{ ... }: {
|
||||||
|
|
||||||
|
imports = [ ./calibre.nix ];
|
||||||
|
|
||||||
|
}
|
13
nixos/default.nix
Normal file
13
nixos/default.nix
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
{ ... }: {
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
./applications
|
||||||
|
./gaming
|
||||||
|
./graphical
|
||||||
|
./hardware
|
||||||
|
./services
|
||||||
|
./system
|
||||||
|
./wsl
|
||||||
|
];
|
||||||
|
|
||||||
|
}
|
19
nixos/gaming/default.nix
Normal file
19
nixos/gaming/default.nix
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
{ config, pkgs, lib, ... }: {
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
./leagueoflegends.nix
|
||||||
|
./legendary.nix
|
||||||
|
./lutris.nix
|
||||||
|
./minecraft-server.nix
|
||||||
|
./steam.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
options.gaming.enable = lib.mkEnableOption "Enable gaming features.";
|
||||||
|
|
||||||
|
config = lib.mkIf (config.gaming.enable && pkgs.stdenv.isLinux) {
|
||||||
|
hardware.opengl = {
|
||||||
|
enable = true;
|
||||||
|
driSupport32Bit = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
32
nixos/gaming/leagueoflegends.nix
Normal file
32
nixos/gaming/leagueoflegends.nix
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
{ config, pkgs, lib, ... }: {
|
||||||
|
|
||||||
|
options.gaming.leagueoflegends.enable =
|
||||||
|
lib.mkEnableOption "League of Legends";
|
||||||
|
|
||||||
|
config =
|
||||||
|
lib.mkIf (config.gaming.leagueoflegends.enable && pkgs.stdenv.isLinux) {
|
||||||
|
|
||||||
|
# League of Legends anti-cheat requirement
|
||||||
|
boot.kernel.sysctl = { "abi.vsyscall32" = 0; };
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
|
||||||
|
# Lutris requirement to install the game
|
||||||
|
lutris
|
||||||
|
amdvlk
|
||||||
|
wineWowPackages.stable
|
||||||
|
# vulkan-tools
|
||||||
|
|
||||||
|
# Required according to https://lutris.net/games/league-of-legends/
|
||||||
|
openssl
|
||||||
|
gnome.zenity
|
||||||
|
|
||||||
|
# Don't remember if this is required
|
||||||
|
dconf
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
environment.sessionVariables = { QT_X11_NO_MITSHM = "1"; };
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
@ -4,9 +4,10 @@ let home-packages = config.home-manager.users.${config.user}.home.packages;
|
|||||||
|
|
||||||
in {
|
in {
|
||||||
|
|
||||||
imports = [ ./. ];
|
options.gaming.legendary.enable =
|
||||||
|
lib.mkEnableOption "Legendary Epic Games launcher.";
|
||||||
|
|
||||||
config = {
|
config = lib.mkIf config.gaming.legendary.enable {
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
legendary-gl
|
legendary-gl
|
||||||
rare # GUI for Legendary (not working)
|
rare # GUI for Legendary (not working)
|
@ -1,8 +1,8 @@
|
|||||||
{ config, pkgs, lib, ... }: {
|
{ config, pkgs, lib, ... }: {
|
||||||
|
|
||||||
options.gaming.lutris = lib.mkEnableOption "Lutris";
|
options.gaming.lutris.enable = lib.mkEnableOption "Lutris game installer.";
|
||||||
|
|
||||||
config = lib.mkIf config.gaming.lutris {
|
config = lib.mkIf config.gaming.lutris.enable {
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
lutris
|
lutris
|
||||||
amdvlk # Vulkan drivers (probably already installed)
|
amdvlk # Vulkan drivers (probably already installed)
|
152
nixos/gaming/minecraft-server.nix
Normal file
152
nixos/gaming/minecraft-server.nix
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
{ config, pkgs, lib, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
|
||||||
|
localPort = 25564;
|
||||||
|
publicPort = 49732;
|
||||||
|
rconPort = 25575;
|
||||||
|
rconPassword = "thiscanbeanything";
|
||||||
|
|
||||||
|
in {
|
||||||
|
|
||||||
|
options.gaming.minecraft-server.enable =
|
||||||
|
lib.mkEnableOption "Minecraft Server.";
|
||||||
|
|
||||||
|
config = lib.mkIf config.gaming.minecraft-server.enable {
|
||||||
|
|
||||||
|
unfreePackages = [ "minecraft-server" ];
|
||||||
|
|
||||||
|
services.minecraft-server = {
|
||||||
|
enable = true;
|
||||||
|
eula = true;
|
||||||
|
declarative = true;
|
||||||
|
whitelist = { };
|
||||||
|
openFirewall = false;
|
||||||
|
serverProperties = {
|
||||||
|
server-port = localPort;
|
||||||
|
difficulty = "normal";
|
||||||
|
gamemode = "survival";
|
||||||
|
white-list = false;
|
||||||
|
enforce-whitelist = false;
|
||||||
|
level-name = "world";
|
||||||
|
motd = "Welcome!";
|
||||||
|
pvp = true;
|
||||||
|
player-idle-timeout = 30;
|
||||||
|
generate-structures = true;
|
||||||
|
max-players = 20;
|
||||||
|
snooper-enabled = false;
|
||||||
|
spawn-npcs = true;
|
||||||
|
spawn-animals = true;
|
||||||
|
spawn-monsters = true;
|
||||||
|
allow-nether = true;
|
||||||
|
allow-flight = false;
|
||||||
|
enable-rcon = true;
|
||||||
|
"rcon.port" = rconPort;
|
||||||
|
"rcon.password" = rconPassword;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
networking.firewall.allowedTCPPorts = [ publicPort ];
|
||||||
|
|
||||||
|
## Automatically start and stop Minecraft server based on player connections
|
||||||
|
|
||||||
|
# Adapted shamelessly from:
|
||||||
|
# https://dataswamp.org/~solene/2022-08-20-on-demand-minecraft-with-systemd.html
|
||||||
|
|
||||||
|
# Prevent Minecraft from starting by default
|
||||||
|
systemd.services.minecraft-server = { wantedBy = pkgs.lib.mkForce [ ]; };
|
||||||
|
|
||||||
|
# Listen for connections on the public port, to trigger the actual
|
||||||
|
# listen-minecraft service.
|
||||||
|
systemd.sockets.listen-minecraft = {
|
||||||
|
wantedBy = [ "sockets.target" ];
|
||||||
|
requires = [ "network.target" ];
|
||||||
|
listenStreams = [ "${toString publicPort}" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Proxy traffic to local port, and trigger hook-minecraft
|
||||||
|
systemd.services.listen-minecraft = {
|
||||||
|
path = [ pkgs.systemd ];
|
||||||
|
requires = [ "hook-minecraft.service" "listen-minecraft.socket" ];
|
||||||
|
after = [ "hook-minecraft.service" "listen-minecraft.socket" ];
|
||||||
|
serviceConfig.ExecStart =
|
||||||
|
"${pkgs.systemd.out}/lib/systemd/systemd-socket-proxyd 127.0.0.1:${
|
||||||
|
toString localPort
|
||||||
|
}";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Start Minecraft if required and wait for it to be available
|
||||||
|
# Then unlock the listen-minecraft.service
|
||||||
|
systemd.services.hook-minecraft = {
|
||||||
|
path = with pkgs; [ systemd libressl busybox ];
|
||||||
|
|
||||||
|
# Start Minecraft and the auto-shutdown timer
|
||||||
|
script = ''
|
||||||
|
systemctl start minecraft-server.service
|
||||||
|
systemctl start stop-minecraft.timer
|
||||||
|
'';
|
||||||
|
|
||||||
|
# Keep checking until the service is available
|
||||||
|
postStart = ''
|
||||||
|
for i in $(seq 60); do
|
||||||
|
if ${pkgs.libressl.nc}/bin/nc -z 127.0.0.1 ${
|
||||||
|
toString localPort
|
||||||
|
} > /dev/null ; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
${pkgs.busybox.out}/bin/sleep 1
|
||||||
|
done
|
||||||
|
exit 1
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
# Run a player check on a schedule for auto-shutdown
|
||||||
|
systemd.timers.stop-minecraft = {
|
||||||
|
timerConfig = {
|
||||||
|
OnCalendar = "*-*-* *:*:0/20"; # Every 20 seconds
|
||||||
|
Unit = "stop-minecraft.service";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# If no players are connected, then stop services and prepare to resume again
|
||||||
|
systemd.services.stop-minecraft = {
|
||||||
|
serviceConfig.Type = "oneshot";
|
||||||
|
script = ''
|
||||||
|
# Check when service was launched
|
||||||
|
servicestartsec=$(
|
||||||
|
date -d \
|
||||||
|
"$(systemctl show \
|
||||||
|
--property=ActiveEnterTimestamp \
|
||||||
|
minecraft-server.service \
|
||||||
|
| cut -d= -f2)" \
|
||||||
|
+%s)
|
||||||
|
|
||||||
|
# Calculate elapsed time
|
||||||
|
serviceelapsedsec=$(( $(date +%s) - servicestartsec))
|
||||||
|
|
||||||
|
# Ignore if service just started
|
||||||
|
if [ $serviceelapsedsec -lt 180 ]
|
||||||
|
then
|
||||||
|
echo "Server was just started"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
PLAYERS=$(
|
||||||
|
printf "list\n" \
|
||||||
|
| ${pkgs.rcon.out}/bin/rcon -m \
|
||||||
|
-H 127.0.0.1 -p ${builtins.toString rconPort} -P ${rconPassword} \
|
||||||
|
)
|
||||||
|
|
||||||
|
if echo "$PLAYERS" | grep "are 0 of a"
|
||||||
|
then
|
||||||
|
echo "Stopping server"
|
||||||
|
systemctl stop minecraft-server.service
|
||||||
|
systemctl stop hook-minecraft.service
|
||||||
|
systemctl stop stop-minecraft.timer
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
@ -1,8 +1,8 @@
|
|||||||
{ config, pkgs, lib, ... }: {
|
{ config, pkgs, lib, ... }: {
|
||||||
|
|
||||||
imports = [ ./. ];
|
options.gaming.steam.enable = lib.mkEnableOption "Steam game launcher.";
|
||||||
|
|
||||||
config = {
|
config = lib.mkIf (config.gaming.steam.enable && pkgs.stdenv.isLinux) {
|
||||||
hardware.steam-hardware.enable = true;
|
hardware.steam-hardware.enable = true;
|
||||||
unfreePackages = [ "steam" "steam-original" "steamcmd" "steam-run" ];
|
unfreePackages = [ "steam" "steam-original" "steamcmd" "steam-run" ];
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
@ -2,7 +2,9 @@
|
|||||||
|
|
||||||
{
|
{
|
||||||
|
|
||||||
config = lib.mkIf config.services.xserver.enable {
|
options.gui.dmenu.enable = lib.mkEnableOption "dmenu launcher.";
|
||||||
|
|
||||||
|
config = lib.mkIf (config.services.xserver.enable && config.dmenu.enable) {
|
||||||
|
|
||||||
home-manager.users.${config.user}.home.packages = [ pkgs.dmenu ];
|
home-manager.users.${config.user}.home.packages = [ pkgs.dmenu ];
|
||||||
gui.launcherCommand = "${pkgs.dmenu}/bin/dmenu_run";
|
gui.launcherCommand = "${pkgs.dmenu}/bin/dmenu_run";
|
@ -4,7 +4,7 @@ let fontName = "Victor Mono";
|
|||||||
|
|
||||||
in {
|
in {
|
||||||
|
|
||||||
config = lib.mkIf config.gui.enable {
|
config = lib.mkIf (config.gui.enable && pkgs.stdenv.isLinux) {
|
||||||
|
|
||||||
fonts.fonts = with pkgs; [
|
fonts.fonts = with pkgs; [
|
||||||
victor-mono # Used for Vim and Terminal
|
victor-mono # Used for Vim and Terminal
|
@ -9,7 +9,7 @@ let
|
|||||||
|
|
||||||
in {
|
in {
|
||||||
|
|
||||||
config = {
|
config = lib.mkIf pkgs.stdenv.isLinux {
|
||||||
|
|
||||||
services.xserver.windowManager = {
|
services.xserver.windowManager = {
|
||||||
i3 = {
|
i3 = {
|
@ -1,6 +1,6 @@
|
|||||||
{ config, lib, ... }: {
|
{ config, pkgs, lib, ... }: {
|
||||||
|
|
||||||
config = lib.mkIf (config.services.xserver.enable) {
|
config = lib.mkIf (pkgs.stdenv.isLinux && config.services.xserver.enable) {
|
||||||
home-manager.users.${config.user} = {
|
home-manager.users.${config.user} = {
|
||||||
|
|
||||||
services.picom = {
|
services.picom = {
|
@ -1,6 +1,6 @@
|
|||||||
{ config, pkgs, lib, ... }: {
|
{ config, pkgs, lib, ... }: {
|
||||||
|
|
||||||
config = lib.mkIf config.services.xserver.enable {
|
config = lib.mkIf (pkgs.stdenv.isLinux && config.services.xserver.enable) {
|
||||||
|
|
||||||
toggleBarCommand = "polybar-msg cmd toggle";
|
toggleBarCommand = "polybar-msg cmd toggle";
|
||||||
|
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
{
|
{
|
||||||
|
|
||||||
config = lib.mkIf config.services.xserver.enable {
|
config = lib.mkIf (pkgs.stdenv.isLinux && config.services.xserver.enable) {
|
||||||
|
|
||||||
home-manager.users.${config.user} = {
|
home-manager.users.${config.user} = {
|
||||||
|
|
@ -15,10 +15,12 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
config = let
|
config = let
|
||||||
|
|
||||||
gtkTheme = {
|
gtkTheme = {
|
||||||
name = config.gtk.theme.name;
|
name = config.gtk.theme.name;
|
||||||
package = pkgs."${config.gtk.theme.package}";
|
package = pkgs."${config.gtk.theme.package}";
|
||||||
};
|
};
|
||||||
|
|
||||||
in lib.mkIf config.gui.enable {
|
in lib.mkIf config.gui.enable {
|
||||||
|
|
||||||
# Enable the X11 windowing system.
|
# Enable the X11 windowing system.
|
@ -30,7 +30,7 @@ let
|
|||||||
|
|
||||||
in {
|
in {
|
||||||
|
|
||||||
config = lib.mkIf config.gui.enable {
|
config = lib.mkIf (pkgs.stdenv.isLinux && config.gui.enable) {
|
||||||
sound.enable = true;
|
sound.enable = true;
|
||||||
|
|
||||||
# Enable PipeWire
|
# Enable PipeWire
|
@ -1,6 +1,6 @@
|
|||||||
{ config, ... }: {
|
{ config, pkgs, lib, ... }: {
|
||||||
|
|
||||||
boot.loader = {
|
boot.loader = lib.mkIf (config.physical && pkgs.stdenv.isLinux) {
|
||||||
grub = {
|
grub = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
20
nixos/hardware/default.nix
Normal file
20
nixos/hardware/default.nix
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
{ lib, ... }: {
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
./audio.nix
|
||||||
|
./boot.nix
|
||||||
|
./keyboard.nix
|
||||||
|
./monitors.nix
|
||||||
|
./mouse.nix
|
||||||
|
./networking.nix
|
||||||
|
./server.nix
|
||||||
|
./sleep.nix
|
||||||
|
./wifi.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
options = {
|
||||||
|
physical = lib.mkEnableOption "Whether this machine is a physical device.";
|
||||||
|
server = lib.mkEnableOption "Whether this machine is a server.";
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user