merge paperclover changes in :3
This commit is contained in:
parent
5170a02cf0
commit
91c676f3f5
37 changed files with 872 additions and 444 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -1,3 +1,5 @@
|
||||||
flake.lock
|
flake.lock
|
||||||
.DS_STORE
|
.DS_STORE
|
||||||
**/.DS_STORE
|
**/.DS_STORE
|
||||||
|
result
|
||||||
|
result-*
|
||||||
|
|
61
flake.nix
61
flake.nix
|
@ -2,7 +2,6 @@
|
||||||
description = "New Modular flake!";
|
description = "New Modular flake!";
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "nixpkgs/nixos-unstable";
|
nixpkgs.url = "nixpkgs/nixos-unstable";
|
||||||
# nixpkgs.url = "github:NixOS/nixpkgs/master";
|
|
||||||
nixpkgs-stable.url = "nixpkgs/nixos-23.11";
|
nixpkgs-stable.url = "nixpkgs/nixos-23.11";
|
||||||
|
|
||||||
home-manager.url = "github:nix-community/home-manager/master";
|
home-manager.url = "github:nix-community/home-manager/master";
|
||||||
|
@ -69,41 +68,51 @@
|
||||||
inputs.nh.overlays.default
|
inputs.nh.overlays.default
|
||||||
];
|
];
|
||||||
|
|
||||||
# ----- USER SETTINGS ----- #
|
|
||||||
userSettings = rec {
|
|
||||||
#enable if you want to use a tiling wm on macos
|
|
||||||
darwinTiling = true;
|
|
||||||
|
|
||||||
username = "nmarks"; # username
|
|
||||||
name = "Natalie"; # name/identifier
|
|
||||||
email = "nmarks413@gmail.com"; # email (used for certain configurations)
|
|
||||||
dotfilesDir = "~/.dotfiles"; # absolute path of the local repo
|
|
||||||
theme = "catppuccin-mocha"; #name of theme that stylix will use
|
|
||||||
browser = "firefox"; # Default browser; must select one from ./user/app/browser/
|
|
||||||
term = "ghostty"; # Default terminal command;
|
|
||||||
font = "iosevka"; # Selected font
|
|
||||||
editor = "neovim"; # Default editor;
|
|
||||||
spawnEditor = "exec" + term + " -e " + editor;
|
|
||||||
timeZone = "America/Los_Angeles";
|
|
||||||
sexuality = "bisexual";
|
|
||||||
|
|
||||||
darwinHost = "laptop";
|
|
||||||
nixosHost = "desktop";
|
|
||||||
};
|
|
||||||
|
|
||||||
mkSystem = import ./lib/mkSystem.nix {
|
mkSystem = import ./lib/mkSystem.nix {
|
||||||
inherit overlays nixpkgs inputs userSettings;
|
inherit overlays nixpkgs inputs;
|
||||||
};
|
};
|
||||||
in {
|
in rec {
|
||||||
|
# "nix run .#darwin-rebuild"
|
||||||
|
packages.aarch64-darwin.darwin-rebuild = darwin.packages.aarch64-darwin.darwin-rebuild;
|
||||||
|
# "nix fmt ."
|
||||||
|
formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.alejandra;
|
||||||
|
formatter.aarch64-darwin = nixpkgs.legacyPackages.aarch64-darwin.alejandra;
|
||||||
|
|
||||||
|
# natalie's desktop computer
|
||||||
nixosConfigurations.nixos = mkSystem "nixos" {
|
nixosConfigurations.nixos = mkSystem "nixos" {
|
||||||
|
user = "natalie";
|
||||||
|
host = "desktop";
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
extraModules = [
|
extraModules = [
|
||||||
nixos-cosmic.nixosModules.default
|
nixos-cosmic.nixosModules.default
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
# natalie's laptop
|
||||||
darwinConfigurations."Natalies-MacBook-Air" = mkSystem "Natalies-MacBook-Air" {
|
darwinConfigurations."Natalies-MacBook-Air" = mkSystem "Natalies-MacBook-Air" {
|
||||||
|
user = "natalie";
|
||||||
|
host = "laptop";
|
||||||
system = "aarch64-darwin";
|
system = "aarch64-darwin";
|
||||||
darwin = true;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# chloe's mac studio "sandwich"
|
||||||
|
darwinConfigurations.sandwich = mkSystem "sandwich" {
|
||||||
|
user = "chloe";
|
||||||
|
host = "sandwich";
|
||||||
|
system = "aarch64-darwin";
|
||||||
|
};
|
||||||
|
# chloe's macbook air "paperback"
|
||||||
|
darwinConfigurations.paperback = mkSystem "paperback" {
|
||||||
|
user = "chloe";
|
||||||
|
host = "paperback";
|
||||||
|
system = "aarch64-darwin";
|
||||||
|
};
|
||||||
|
|
||||||
|
# generate checks for "nix flake check --all-systems --no-build"
|
||||||
|
checks.aarch64-darwin = builtins.listToAttrs (builtins.map (name: let
|
||||||
|
d = darwinConfigurations.${name}.system;
|
||||||
|
in {
|
||||||
|
name = "darwinConfiguration-" + d.name;
|
||||||
|
value = d;
|
||||||
|
}) (builtins.attrNames darwinConfigurations));
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
BIN
hosts/.DS_Store
vendored
BIN
hosts/.DS_Store
vendored
Binary file not shown.
|
@ -1,72 +0,0 @@
|
||||||
{
|
|
||||||
inputs,
|
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
lib,
|
|
||||||
userSettings,
|
|
||||||
systemSettings,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
shared-programs = import ../../modules/shared/homeManagerPrograms.nix {inherit inputs config pkgs lib userSettings systemSettings;};
|
|
||||||
in {
|
|
||||||
imports = [
|
|
||||||
inputs.nixvim.homeManagerModules.nixvim
|
|
||||||
#set up nixvim
|
|
||||||
# ../../modules/nixvim
|
|
||||||
];
|
|
||||||
home = {
|
|
||||||
stateVersion = "23.05"; # Please read the comment before changing.
|
|
||||||
|
|
||||||
packages = with pkgs; let
|
|
||||||
shared-packages = import ../../modules/shared/packages.nix {inherit pkgs systemSettings;};
|
|
||||||
in
|
|
||||||
shared-packages
|
|
||||||
++ [
|
|
||||||
#building macos apps hard :(
|
|
||||||
ghostty
|
|
||||||
stremio
|
|
||||||
julia
|
|
||||||
qbittorrent
|
|
||||||
|
|
||||||
#gaming
|
|
||||||
bottles
|
|
||||||
lutris
|
|
||||||
mangohud
|
|
||||||
dxvk_2
|
|
||||||
steam-run
|
|
||||||
vulkan-tools
|
|
||||||
path-of-building
|
|
||||||
wineWowPackages.stable
|
|
||||||
winetricks
|
|
||||||
(prismlauncher.override {gamemodeSupport = true;})
|
|
||||||
|
|
||||||
#window manager stuff
|
|
||||||
wofi
|
|
||||||
xorg.xauth
|
|
||||||
#linux tools
|
|
||||||
legcord
|
|
||||||
pavucontrol
|
|
||||||
ethtool
|
|
||||||
grub2
|
|
||||||
efibootmgr
|
|
||||||
distrobox
|
|
||||||
xdg-desktop-portal-gtk
|
|
||||||
xclip
|
|
||||||
kdePackages.dolphin
|
|
||||||
#broken on macos
|
|
||||||
calibre
|
|
||||||
mpv
|
|
||||||
wireguard-tools
|
|
||||||
signal-desktop
|
|
||||||
]
|
|
||||||
++ [
|
|
||||||
inputs.zls.packages.x86_64-linux.zls
|
|
||||||
rust-bin.stable.latest.default
|
|
||||||
];
|
|
||||||
# programs.mangohud.enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
programs = shared-programs;
|
|
||||||
|
|
||||||
# xdg.mimeApps.defaultApplications."inode/directory" = "dolphin.desktop";
|
|
||||||
}
|
|
BIN
hosts/laptop/.DS_Store
vendored
BIN
hosts/laptop/.DS_Store
vendored
Binary file not shown.
|
@ -1,40 +0,0 @@
|
||||||
{
|
|
||||||
inputs,
|
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
lib,
|
|
||||||
userSettings,
|
|
||||||
systemSettings,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
imports =
|
|
||||||
[
|
|
||||||
inputs.nixvim.homeManagerModules.nixvim
|
|
||||||
#set up nixvim
|
|
||||||
# ../../modules/nixvim
|
|
||||||
]
|
|
||||||
++ lib.optionals userSettings.darwinTiling [../../modules/macos/tiling/sketchybar-home.nix];
|
|
||||||
|
|
||||||
programs = import ../../modules/shared/homeManagerPrograms.nix {inherit inputs config pkgs lib userSettings systemSettings;};
|
|
||||||
|
|
||||||
home = {
|
|
||||||
inherit (userSettings) username;
|
|
||||||
# homeDirectory = systemSettings.homeConfig;
|
|
||||||
# shell = pkgs.fish;
|
|
||||||
stateVersion = "23.05"; # Please read the comment before changing.
|
|
||||||
|
|
||||||
packages = pkgs.callPackage ../../modules/shared/packages.nix {inherit systemSettings;};
|
|
||||||
|
|
||||||
# file = {
|
|
||||||
# ".config/sketchybar" = {
|
|
||||||
# source = ../../modules/macos/tiling/sketchybar;
|
|
||||||
# recursive = true;
|
|
||||||
# onChange = "${pkgs.sketchybar}/bin/sketchybar --reload";
|
|
||||||
# };
|
|
||||||
# };
|
|
||||||
|
|
||||||
sessionPath = [
|
|
||||||
"$HOME/.emacs.d/bin"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
221
lib/mkSystem.nix
221
lib/mkSystem.nix
|
@ -4,116 +4,149 @@
|
||||||
nixpkgs,
|
nixpkgs,
|
||||||
overlays,
|
overlays,
|
||||||
inputs,
|
inputs,
|
||||||
userSettings,
|
|
||||||
}: name: {
|
}: name: {
|
||||||
system,
|
user, # ./users/{name}
|
||||||
darwin ? false,
|
host ? null, # ./users/{name}/{host} (optional)
|
||||||
|
system, # arch-os
|
||||||
extraModules ? [],
|
extraModules ? [],
|
||||||
}: let
|
}: let
|
||||||
nixindex =
|
inherit (builtins) pathExists;
|
||||||
if darwin
|
darwin = nixpkgs.lib.strings.hasSuffix "-darwin" system;
|
||||||
then inputs.nix-index-database.darwinModules.nix-index
|
getInputModule = a: b:
|
||||||
else inputs.nix-index-database.nixosModules.nix-index;
|
inputs.${
|
||||||
|
a
|
||||||
|
}.${
|
||||||
|
if darwin
|
||||||
|
then "darwinModules"
|
||||||
|
else "nixosModules"
|
||||||
|
}.${
|
||||||
|
b
|
||||||
|
};
|
||||||
|
|
||||||
stylix =
|
# NixOS vs nix-darwin functions
|
||||||
|
systemFunc =
|
||||||
if darwin
|
if darwin
|
||||||
then inputs.stylix.darwinModules.stylix
|
then inputs.darwin.lib.darwinSystem
|
||||||
else inputs.stylix.nixosModules.stylix;
|
else nixpkgs.lib.nixosSystem;
|
||||||
|
|
||||||
systemModuleDir =
|
userDir = ../users + "/${user}";
|
||||||
if darwin
|
userConfig = import (userDir + "/user.nix");
|
||||||
then "macos"
|
hostDir = userDir + "/${host}";
|
||||||
else "nixos";
|
|
||||||
|
|
||||||
|
hostConfigPath = hostDir + "/configuration.nix";
|
||||||
|
userConfigPath = userDir + "/configuration.nix";
|
||||||
|
hostHomePath = hostDir + "/home.nix";
|
||||||
|
userHomePath = userDir + "/home.nix";
|
||||||
|
|
||||||
|
# Arguments passed to all module files
|
||||||
|
args = {
|
||||||
|
inherit inputs;
|
||||||
|
currentSystem = system;
|
||||||
|
# Details about the host machine
|
||||||
|
host = {
|
||||||
|
inherit darwin name;
|
||||||
|
};
|
||||||
|
user = ({
|
||||||
|
# This acts as formal documentation for what is allowed in user.nix
|
||||||
|
username, # unix username
|
||||||
|
name, # your display name
|
||||||
|
email, # for identity in programs such as git
|
||||||
|
dotfilesDir, # location to `../.`
|
||||||
|
timeZone ? "America/Los_Angeles",
|
||||||
|
# Stylix/Theming
|
||||||
|
theme ? null, # theme name for stylix
|
||||||
|
sexuality ? null, # pride flag for hyfetch
|
||||||
|
font ? null, # font to use
|
||||||
|
term, # preferred $TERM
|
||||||
|
editor, # preferred $EDITOR
|
||||||
|
browser ? null, # preferred $BROWSER
|
||||||
|
} @ user:
|
||||||
|
user)
|
||||||
|
userConfig;
|
||||||
|
};
|
||||||
systemSettings = rec {
|
systemSettings = rec {
|
||||||
inherit darwin;
|
inherit darwin;
|
||||||
host =
|
homeDir = "/${
|
||||||
if darwin
|
if darwin
|
||||||
then userSettings.darwinHost
|
then "Users"
|
||||||
else userSettings.nixosHost;
|
else "home"
|
||||||
|
}/${userConfig.username}";
|
||||||
# The config files for this system.
|
|
||||||
|
|
||||||
hostConfig = ../hosts/${host}/configuration.nix;
|
|
||||||
homeConfig = ../hosts/${host}/home.nix;
|
|
||||||
|
|
||||||
homeDir =
|
|
||||||
if darwin
|
|
||||||
then "/Users/" + userSettings.username + "/"
|
|
||||||
else "/home/" + userSettings.username + "/";
|
|
||||||
|
|
||||||
# NixOS vs nix-darwin functions
|
|
||||||
systemFunc =
|
|
||||||
if darwin
|
|
||||||
then inputs.darwin.lib.darwinSystem
|
|
||||||
else nixpkgs.lib.nixosSystem;
|
|
||||||
|
|
||||||
hmModules =
|
|
||||||
if darwin
|
|
||||||
then inputs.home-manager.darwinModules
|
|
||||||
else inputs.home-manager.nixosModules;
|
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
with systemSettings;
|
systemFunc {
|
||||||
systemFunc rec {
|
inherit system;
|
||||||
inherit system;
|
|
||||||
|
|
||||||
#gross and ugly hack do NOT like
|
modules =
|
||||||
specialArgs = {
|
builtins.filter (f: f != null)
|
||||||
inherit (userSettings) darwinTiling;
|
[
|
||||||
};
|
# Apply our overlays. Overlays are keyed by system type so we have
|
||||||
|
# to go through and apply our system type. We do this first so
|
||||||
|
# the overlays are available globally.
|
||||||
|
{nixpkgs.overlays = overlays;}
|
||||||
|
|
||||||
modules =
|
# Modules shared between nix-darwin and NixOS
|
||||||
[
|
../modules/shared
|
||||||
# Apply our overlays. Overlays are keyed by system type so we have
|
# Modules for the specific OS
|
||||||
# to go through and apply our system type. We do this first so
|
(
|
||||||
# the overlays are available globally.
|
if darwin
|
||||||
{nixpkgs.overlays = overlays;}
|
then ../modules/macos
|
||||||
|
else ../modules/nixos
|
||||||
|
)
|
||||||
|
|
||||||
# Enable caching for nix-index so we dont have to rebuild it
|
# The user-wide configuration.nix
|
||||||
|
(
|
||||||
|
if pathExists userConfigPath
|
||||||
|
then userConfigPath
|
||||||
|
else null
|
||||||
|
)
|
||||||
|
# The host-wide configuration.nix
|
||||||
|
(
|
||||||
|
if host != null && pathExists hostConfigPath
|
||||||
|
then hostConfigPath
|
||||||
|
else null
|
||||||
|
)
|
||||||
|
|
||||||
#shared modules
|
# Set up nix-index and enable comma for easy one-shot command use
|
||||||
../modules/shared
|
# https://github.com/nix-community/comma
|
||||||
|
(getInputModule "nix-index-database" "nix-index")
|
||||||
|
{programs.nix-index-database.comma.enable = true;}
|
||||||
|
|
||||||
#system specific modules
|
# Themes for all programs
|
||||||
../modules/${systemModuleDir}
|
(getInputModule "stylix" "stylix")
|
||||||
|
|
||||||
# Link to config.nix
|
# Home manager
|
||||||
hostConfig
|
(getInputModule "home-manager" "home-manager")
|
||||||
|
{
|
||||||
|
home-manager = {
|
||||||
|
useGlobalPkgs = true;
|
||||||
|
useUserPackages = true;
|
||||||
|
backupFileExtension = "hm-backup";
|
||||||
|
# Arguments passed to all module files
|
||||||
|
extraSpecialArgs =
|
||||||
|
args
|
||||||
|
// {
|
||||||
|
mainHomeImports = builtins.filter (f: f != null) [
|
||||||
|
(
|
||||||
|
if pathExists userHomePath
|
||||||
|
then userHomePath
|
||||||
|
else null
|
||||||
|
)
|
||||||
|
(
|
||||||
|
if host != null && pathExists hostHomePath
|
||||||
|
then hostHomePath
|
||||||
|
else null
|
||||||
|
)
|
||||||
|
];
|
||||||
|
};
|
||||||
|
# can't find how to make this an array without the param
|
||||||
|
users.${userConfig.username} = ../modules/home-manager.nix;
|
||||||
|
};
|
||||||
|
users.users.${userConfig.username}.home = systemSettings.homeDir;
|
||||||
|
}
|
||||||
|
|
||||||
#Set up nix-index and enable comma for easy one-shot command use
|
# Arguments passed to all module files
|
||||||
#https://github.com/nix-community/comma
|
{config._module.args = args;}
|
||||||
nixindex
|
]
|
||||||
{programs.nix-index-database.comma.enable = true;}
|
# Add extra modules specified from config
|
||||||
|
++ extraModules;
|
||||||
#style programs
|
}
|
||||||
stylix
|
|
||||||
|
|
||||||
hmModules.home-manager
|
|
||||||
{
|
|
||||||
home-manager = {
|
|
||||||
useGlobalPkgs = true;
|
|
||||||
useUserPackages = true;
|
|
||||||
backupFileExtension = "hm-backup";
|
|
||||||
extraSpecialArgs = {inherit inputs userSettings systemSettings;};
|
|
||||||
users.${userSettings.username} = homeConfig;
|
|
||||||
};
|
|
||||||
|
|
||||||
users.users.${userSettings.username}.home = homeDir;
|
|
||||||
}
|
|
||||||
|
|
||||||
# We expose some extra arguments so that our modules can parameterize
|
|
||||||
# better based on these values.
|
|
||||||
{
|
|
||||||
config._module.args = {
|
|
||||||
currentSystem = system;
|
|
||||||
# currentSystemName = name;
|
|
||||||
# currentSystemUser = userSettings.username;
|
|
||||||
|
|
||||||
inherit inputs userSettings systemSettings;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
]
|
|
||||||
#Add extra modules depending on system
|
|
||||||
++ extraModules;
|
|
||||||
}
|
|
||||||
|
|
82
modules/home-manager.nix
Normal file
82
modules/home-manager.nix
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
# This contains default configurations for set of programs
|
||||||
|
# and configuration, but does not enable many things on it's own.
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
user,
|
||||||
|
host,
|
||||||
|
mainHomeImports,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
cfg = config.programs;
|
||||||
|
in {
|
||||||
|
imports = mainHomeImports;
|
||||||
|
programs = {
|
||||||
|
home-manager.enable = true;
|
||||||
|
nix-index.enable = true;
|
||||||
|
|
||||||
|
direnv = {
|
||||||
|
enableZshIntegration = true;
|
||||||
|
nix-direnv.enable = config.programs.direnv.enable;
|
||||||
|
};
|
||||||
|
|
||||||
|
git = {
|
||||||
|
enable = true;
|
||||||
|
userName = lib.mkDefault user.name;
|
||||||
|
userEmail = lib.mkDefault user.email;
|
||||||
|
ignores = [
|
||||||
|
(lib.mkIf host.darwin ".DS_Store") # When using Finder
|
||||||
|
(lib.mkIf host.darwin "._*") # When using non-APFS drives
|
||||||
|
# ViM and Neovim
|
||||||
|
".*.swp"
|
||||||
|
".nvimlog"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
atuin = {
|
||||||
|
enableBashIntegration = true;
|
||||||
|
enableFishIntegration = true;
|
||||||
|
daemon.enable = cfg.atuin.enable;
|
||||||
|
};
|
||||||
|
bat = {
|
||||||
|
extraPackages = with pkgs.bat-extras; [batdiff batman batgrep batwatch batpipe prettybat];
|
||||||
|
};
|
||||||
|
hyfetch = {
|
||||||
|
settings = {
|
||||||
|
backend = "fastfetch";
|
||||||
|
preset = user.sexuality;
|
||||||
|
mode = "rgb";
|
||||||
|
light_dark = "dark";
|
||||||
|
lightness = {
|
||||||
|
};
|
||||||
|
color_align = {
|
||||||
|
mode = "horizontal";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
fastfetch.enable = cfg.hyfetch.enable;
|
||||||
|
|
||||||
|
fish = {
|
||||||
|
plugins = [
|
||||||
|
{
|
||||||
|
name = "tide";
|
||||||
|
inherit (pkgs.fishPlugins.tide) src;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "!!";
|
||||||
|
inherit (pkgs.fishPlugins.bang-bang) src;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
shellAliases =
|
||||||
|
{}
|
||||||
|
// lib.optionalAttrs (!host.darwin) {
|
||||||
|
reboot-windows = "sudo efibootmgr --bootnext 0000; sudo reboot -h now";
|
||||||
|
};
|
||||||
|
shellInit = ''
|
||||||
|
batman --export-env | source
|
||||||
|
'';
|
||||||
|
##test -r '/Users/${user.username}/.opam/opam-init/init.fish' && source '/Users/${user.username}/.opam/opam-init/init.fish' > /dev/null 2> /dev/null; or true
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,13 +1,20 @@
|
||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
lib,
|
lib,
|
||||||
darwinTiling,
|
|
||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
imports =
|
imports = [
|
||||||
[
|
# sort-lines: start
|
||||||
./homebrew.nix
|
./mac-app-store.nix
|
||||||
./system.nix
|
./system.nix
|
||||||
]
|
./icons.nix
|
||||||
++ lib.optionals darwinTiling [./tiling];
|
./tiling
|
||||||
|
# sort-lines: end
|
||||||
|
];
|
||||||
|
# make 'shared.linux' not an error to define.
|
||||||
|
options.shared.linux = lib.mkOption {
|
||||||
|
type = lib.types.anything;
|
||||||
|
default = {};
|
||||||
|
description = "no-op on darwin";
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
44
modules/macos/mac-app-store.nix
Normal file
44
modules/macos/mac-app-store.nix
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
types = lib.types;
|
||||||
|
|
||||||
|
# Mapping of Mac App Store applications.
|
||||||
|
# Add new entries to this list via the App Store's share button
|
||||||
|
# https://apps.apple.com/us/app/logic-pro/id634148309?mt=12
|
||||||
|
# --------- ID HERE
|
||||||
|
allMasApps = {
|
||||||
|
# sort-lines:start
|
||||||
|
adguard = 1440147259;
|
||||||
|
final-cut-pro = 424389933;
|
||||||
|
logic-pro = 634148309;
|
||||||
|
magnet = 441258766;
|
||||||
|
motion = 434290957;
|
||||||
|
wireguard = 1451685025;
|
||||||
|
# sort-lines:end
|
||||||
|
};
|
||||||
|
|
||||||
|
# the resolved configuration from the user
|
||||||
|
masApps = config.shared.darwin.macAppStoreApps;
|
||||||
|
in {
|
||||||
|
options = {
|
||||||
|
# Installs Mac Applications via name using homebrew.
|
||||||
|
shared.darwin.macAppStoreApps = lib.mkOption {
|
||||||
|
type = types.listOf types.str;
|
||||||
|
default = [];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = lib.mkIf (builtins.length masApps > 0) {
|
||||||
|
homebrew.enable = true;
|
||||||
|
homebrew.masApps = builtins.listToAttrs (
|
||||||
|
builtins.map (name: {
|
||||||
|
inherit name;
|
||||||
|
value = allMasApps.${name};
|
||||||
|
})
|
||||||
|
masApps
|
||||||
|
);
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,21 +1,25 @@
|
||||||
{
|
{
|
||||||
|
config,
|
||||||
pkgs,
|
pkgs,
|
||||||
userSettings,
|
lib,
|
||||||
...
|
...
|
||||||
}: {
|
}: let
|
||||||
#Use touchid or watch to activate sudo
|
tiling = config.shared.darwin.tiling.enable;
|
||||||
|
in {
|
||||||
|
# Use touchid or watch to activate sudo
|
||||||
security.pam.services.sudo_local = {
|
security.pam.services.sudo_local = {
|
||||||
enable = true;
|
enable = true;
|
||||||
reattach = true;
|
reattach = true;
|
||||||
touchIdAuth = true;
|
touchIdAuth = true;
|
||||||
};
|
};
|
||||||
# set some OSX preferences that I always end up hunting down and changing.
|
|
||||||
|
# Set some OSX preferences that I always end up hunting down and changing.
|
||||||
system = {
|
system = {
|
||||||
# Used for backwards compatibility, please read the changelog before changing.
|
# Used for backwards compatibility, please read the changelog before changing.
|
||||||
# $ darwin-rebuild changelog
|
# $ darwin-rebuild changelog
|
||||||
stateVersion = 6;
|
stateVersion = 6;
|
||||||
|
|
||||||
defaults = {
|
defaults = lib.mkDefault {
|
||||||
# Turn quarantine off
|
# Turn quarantine off
|
||||||
LaunchServices = {
|
LaunchServices = {
|
||||||
LSQuarantine = false;
|
LSQuarantine = false;
|
||||||
|
@ -53,14 +57,14 @@
|
||||||
NSDocumentSaveNewDocumentsToCloud = false;
|
NSDocumentSaveNewDocumentsToCloud = false;
|
||||||
AppleICUForce24HourTime = true;
|
AppleICUForce24HourTime = true;
|
||||||
|
|
||||||
#Autohide menu bar
|
# Autohide menu bar for tiling window manager
|
||||||
_HIHideMenuBar = userSettings.darwinTiling;
|
_HIHideMenuBar = tiling;
|
||||||
};
|
};
|
||||||
# minimal dock
|
# minimal dock
|
||||||
dock = {
|
dock = {
|
||||||
autohide = true;
|
autohide = true;
|
||||||
#instant hide and show
|
autohide-time-modifier = 0.0; # make animation instant
|
||||||
autohide-time-modifier = 0.0;
|
autohide-delay = 0.0; # remove delay when touching bottom of screen
|
||||||
show-process-indicators = true;
|
show-process-indicators = true;
|
||||||
|
|
||||||
expose-group-apps = true;
|
expose-group-apps = true;
|
||||||
|
@ -80,13 +84,12 @@
|
||||||
AppleShowAllExtensions = true;
|
AppleShowAllExtensions = true;
|
||||||
ShowPathbar = true;
|
ShowPathbar = true;
|
||||||
FXEnableExtensionChangeWarning = false;
|
FXEnableExtensionChangeWarning = false;
|
||||||
|
# TODO: default to list view and not saving .DS_Store
|
||||||
};
|
};
|
||||||
|
|
||||||
CustomSystemPreferences = {
|
CustomSystemPreferences = {
|
||||||
"com.apple.universalaccess" = {
|
"com.apple.universalaccess" = {
|
||||||
closeViewTrackpadGestureZoomEnabled = 1;
|
closeViewTrackpadGestureZoomEnabled = 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
"com.apple.symbolichotkeys" = {
|
"com.apple.symbolichotkeys" = {
|
||||||
AppleSymbolicHotKeys = {
|
AppleSymbolicHotKeys = {
|
||||||
"64" = {
|
"64" = {
|
||||||
|
@ -96,7 +99,6 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
# Bind caps to escape for better normal mode stuff
|
# Bind caps to escape for better normal mode stuff
|
||||||
keyboard = {
|
keyboard = {
|
||||||
enableKeyMapping = true;
|
enableKeyMapping = true;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{pkgs, ...}: {
|
{config,pkgs, ...}: {
|
||||||
services.aerospace = {
|
services.aerospace = {
|
||||||
enable = true;
|
enable = config.shared.darwin.tiling.enable;
|
||||||
settings = {
|
settings = {
|
||||||
# Normalizations. See: https://nikitabobko.github.io/AeroSpace/guide#normalization
|
# Normalizations. See: https://nikitabobko.github.io/AeroSpace/guide#normalization
|
||||||
enable-normalization-flatten-containers = true;
|
enable-normalization-flatten-containers = true;
|
||||||
|
|
|
@ -1,6 +1,16 @@
|
||||||
{pkgs, ...}: {
|
{ lib, ... }: let
|
||||||
|
inherit (lib) types;
|
||||||
|
in {
|
||||||
imports = [
|
imports = [
|
||||||
./aerospace.nix
|
|
||||||
./sketchybar.nix
|
./sketchybar.nix
|
||||||
|
./aerospace.nix
|
||||||
];
|
];
|
||||||
|
options = {
|
||||||
|
shared.darwin.tiling.enable = lib.mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
example = true;
|
||||||
|
description = "Enable tiling window management.";
|
||||||
|
};
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,150 @@
|
||||||
{pkgs, ...}: {
|
{config,pkgs, ...}: {
|
||||||
services.sketchybar = {
|
services.sketchybar = {
|
||||||
enable = true;
|
enable = config.shared.darwin.tiling.enable;
|
||||||
package = pkgs.sketchybar;
|
config = ''
|
||||||
|
# This is a demo config to showcase some of the most important commands.
|
||||||
|
# It is meant to be changed and configured, as it is intentionally kept sparse.
|
||||||
|
# For a (much) more advanced configuration example see my dotfiles:
|
||||||
|
# https://github.com/FelixKratz/dotfiles
|
||||||
|
|
||||||
|
PLUGIN_DIR="$CONFIG_DIR/plugins"
|
||||||
|
|
||||||
|
##### Bar Appearance #####
|
||||||
|
# Configuring the general appearance of the bar.
|
||||||
|
# These are only some of the options available. For all options see:
|
||||||
|
# https://felixkratz.github.io/SketchyBar/config/bar
|
||||||
|
# If you are looking for other colors, see the color picker:
|
||||||
|
# https://felixkratz.github.io/SketchyBar/config/tricks#color-picker
|
||||||
|
|
||||||
|
sketchybar --bar position=top height=40 blur_radius=30 color=0x04313244
|
||||||
|
|
||||||
|
# Colours
|
||||||
|
SURFACE=0xff313244
|
||||||
|
|
||||||
|
##### Changing Defaults #####
|
||||||
|
# We now change some default values, which are applied to all further items.
|
||||||
|
# For a full list of all available item properties see:
|
||||||
|
# https://felixkratz.github.io/SketchyBar/config/items
|
||||||
|
|
||||||
|
default=(
|
||||||
|
padding_left=5
|
||||||
|
padding_right=5
|
||||||
|
icon.font="Hack Nerd Font:Bold:17.0"
|
||||||
|
label.font="Hack Nerd Font:Bold:14.0"
|
||||||
|
icon.color=0xffcdd6f4
|
||||||
|
label.color=0xffcdd6f4
|
||||||
|
icon.padding_left=8
|
||||||
|
icon.padding_right=4
|
||||||
|
label.padding_left=4
|
||||||
|
label.padding_right=8
|
||||||
|
background.padding_left=2
|
||||||
|
background.padding_right=2
|
||||||
|
background.color=$SURFACE \
|
||||||
|
background.corner_radius=10 \
|
||||||
|
background.height=30 \
|
||||||
|
background.border_width=1 \
|
||||||
|
)
|
||||||
|
sketchybar --default "$\{default[@]}"
|
||||||
|
|
||||||
|
sketchybar --add event aerospace_workspace_change
|
||||||
|
|
||||||
|
for sid in $(aerospace list-workspaces --all); do
|
||||||
|
sketchybar --add item space.$sid left \
|
||||||
|
--subscribe space.$sid aerospace_workspace_change \
|
||||||
|
--set space.$sid \
|
||||||
|
background.border_width=1 \
|
||||||
|
background.border_color=0xffb4befe \
|
||||||
|
background.corner_radius=5 \
|
||||||
|
background.height=20 \
|
||||||
|
icon.padding_left=0 \
|
||||||
|
icon.padding_right=0 \
|
||||||
|
label.padding_right=6 \
|
||||||
|
label="$sid" \
|
||||||
|
click_script="aerospace workspace $sid" \
|
||||||
|
script="$CONFIG_DIR/plugins/aerospace.sh $sid"
|
||||||
|
done
|
||||||
|
|
||||||
|
##### Adding Left Items #####
|
||||||
|
# We add some regular items to the left side of the bar, where
|
||||||
|
# only the properties deviating from the current defaults need to be set
|
||||||
|
|
||||||
|
sketchybar --add item chevron left \
|
||||||
|
--set chevron icon= label.drawing=off background.drawing=off \
|
||||||
|
icon.color=0xfff5e0dc \
|
||||||
|
--add item front_app left \
|
||||||
|
--set front_app icon.drawing=off script="$PLUGIN_DIR/front_app.sh" \
|
||||||
|
label.color=0xff94e2d5 \
|
||||||
|
label.padding_left=8 \
|
||||||
|
background.border_color=0xff94e2d5 \
|
||||||
|
--subscribe front_app front_app_switched
|
||||||
|
|
||||||
|
##### Adding Right Items #####
|
||||||
|
# In the same way as the left items we can add items to the right side.
|
||||||
|
# Additional position (e.g. center) are available, see:
|
||||||
|
# https://felixkratz.github.io/SketchyBar/config/items#adding-items-to-sketchybar
|
||||||
|
|
||||||
|
# Some items refresh on a fixed cycle, e.g. the clock runs its script once
|
||||||
|
# every 10s. Other items respond to events they subscribe to, e.g. the
|
||||||
|
# volume.sh script is only executed once an actual change in system audio
|
||||||
|
# volume is registered. More info about the event system can be found here:
|
||||||
|
# https://felixkratz.github.io/SketchyBar/config/events
|
||||||
|
|
||||||
|
sketchybar --add item clock right \
|
||||||
|
--set clock update_freq=10 icon= script="$PLUGIN_DIR/clock.sh" \
|
||||||
|
icon.color=0xfffab387 \
|
||||||
|
label.color=0xffcdd6f4 \
|
||||||
|
background.color=$SURFACE \
|
||||||
|
background.corner_radius=10 \
|
||||||
|
background.height=30 \
|
||||||
|
--add item volume right \
|
||||||
|
--set volume script="$PLUGIN_DIR/volume.sh" \
|
||||||
|
label.color=0xffcdd6f4 \
|
||||||
|
background.color=$SURFACE \
|
||||||
|
background.corner_radius=10 \
|
||||||
|
background.height=30 \
|
||||||
|
--subscribe volume volume_change \
|
||||||
|
--add item battery right \
|
||||||
|
--set battery update_freq=120 script="$PLUGIN_DIR/battery.sh" \
|
||||||
|
label.color=0xffcdd6f4 \
|
||||||
|
background.color=$SURFACE \
|
||||||
|
background.corner_radius=10 \
|
||||||
|
background.height=30 \
|
||||||
|
--subscribe battery system_woke power_source_change
|
||||||
|
|
||||||
|
sketchybar -m --add item mullvad right \
|
||||||
|
--set mullvad icon= \
|
||||||
|
icon.color=0xfff38ba8 \
|
||||||
|
background.color=$SURFACE \
|
||||||
|
background.corner_radius=10 \
|
||||||
|
background.height=30 \
|
||||||
|
background.border_width=1 \
|
||||||
|
background.border_color=0xfff38ba8 \
|
||||||
|
label.padding_left=0 \
|
||||||
|
label.padding_right=0 \
|
||||||
|
icon.padding_left=6 \
|
||||||
|
update_freq=5 \
|
||||||
|
script="$PLUGIN_DIR/mullvad.sh"
|
||||||
|
|
||||||
|
# Add event
|
||||||
|
sketchybar -m --add event song_update com.apple.iTunes.playerInfo
|
||||||
|
|
||||||
|
# Add Music Item
|
||||||
|
sketchybar -m --add item music right \
|
||||||
|
--set music script="$PLUGIN_DIR/music.sh" \
|
||||||
|
click_script="$PLUGIN_DIR/music_click.sh" \
|
||||||
|
label.padding_right=10 \
|
||||||
|
label.color=0xffcdd6f4 \
|
||||||
|
background.color=$SURFACE \
|
||||||
|
background.corner_radius=10 \
|
||||||
|
background.height=30 \
|
||||||
|
background.border_width=1 \
|
||||||
|
background.border_color=0xfff38ba8 \
|
||||||
|
drawing=off \
|
||||||
|
--subscribe music song_update
|
||||||
|
|
||||||
|
##### Force all scripts to run the first time (never do this in a script) #####
|
||||||
|
sketchybar --update
|
||||||
|
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,14 @@
|
||||||
{pkgs, ...}: {
|
{ lib, pkgs, ... }: {
|
||||||
imports = [
|
imports = [
|
||||||
./boot.nix
|
./boot.nix
|
||||||
./ld.nix
|
./ld.nix
|
||||||
./nvidia.nix
|
./nvidia.nix
|
||||||
./services.nix
|
./services.nix
|
||||||
];
|
];
|
||||||
|
# make 'shared.darwin' not an error to define.
|
||||||
|
options.shared.darwin = lib.mkOption {
|
||||||
|
type = lib.types.anything;
|
||||||
|
default = {};
|
||||||
|
description = "no-op on linux";
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
|
# shared is used by nixos-rebuild and darwin-rebuild
|
||||||
{pkgs, ...}: {
|
{pkgs, ...}: {
|
||||||
imports = [
|
imports = [
|
||||||
./extras.nix
|
# sort-lines:start
|
||||||
|
./user-system-settings.nix
|
||||||
./nix.nix
|
./nix.nix
|
||||||
|
# sort-lines:end
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,53 +0,0 @@
|
||||||
{
|
|
||||||
inputs,
|
|
||||||
pkgs,
|
|
||||||
userSettings,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
services.tailscale.enable = true;
|
|
||||||
|
|
||||||
networking = {
|
|
||||||
};
|
|
||||||
fonts.packages = with pkgs; [
|
|
||||||
nerd-fonts.fira-code
|
|
||||||
nerd-fonts.iosevka
|
|
||||||
iosevka
|
|
||||||
nerd-fonts.symbols-only
|
|
||||||
nerd-fonts.iosevka
|
|
||||||
inputs.apple-fonts.packages.${pkgs.system}.sf-pro
|
|
||||||
];
|
|
||||||
|
|
||||||
# Set your time zone.
|
|
||||||
time.timeZone = userSettings.timeZone;
|
|
||||||
|
|
||||||
home-manager.users.${userSettings.username}.home.sessionVariables = {
|
|
||||||
EDITOR = userSettings.editor;
|
|
||||||
VISUAL = userSettings.editor;
|
|
||||||
TERMINAL = userSettings.term;
|
|
||||||
BROWSER = userSettings.browser;
|
|
||||||
};
|
|
||||||
|
|
||||||
stylix = {
|
|
||||||
enable = true;
|
|
||||||
base16Scheme = "${pkgs.base16-schemes}/share/themes/${userSettings.theme}.yaml";
|
|
||||||
|
|
||||||
fonts = {
|
|
||||||
serif = {
|
|
||||||
package = pkgs.nerd-fonts.${userSettings.font};
|
|
||||||
name = "${userSettings.font} Nerd Font";
|
|
||||||
};
|
|
||||||
sansSerif = {
|
|
||||||
package = pkgs.nerd-fonts.${userSettings.font};
|
|
||||||
name = "${userSettings.font} Nerd Font";
|
|
||||||
};
|
|
||||||
monospace = {
|
|
||||||
package = pkgs.nerd-fonts.${userSettings.font};
|
|
||||||
name = "${userSettings.font} Nerd Font";
|
|
||||||
};
|
|
||||||
emoji = {
|
|
||||||
package = pkgs.twemoji-color-font;
|
|
||||||
name = "Twemoji Color";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,67 +0,0 @@
|
||||||
{
|
|
||||||
pkgs,
|
|
||||||
lib,
|
|
||||||
userSettings,
|
|
||||||
systemSettings,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
nix-index.enable = true;
|
|
||||||
atuin = {
|
|
||||||
enable = true;
|
|
||||||
enableBashIntegration = true;
|
|
||||||
enableFishIntegration = true;
|
|
||||||
daemon.enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
direnv = {
|
|
||||||
enable = true;
|
|
||||||
enableZshIntegration = true;
|
|
||||||
nix-direnv.enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
bat = {
|
|
||||||
enable = true;
|
|
||||||
extraPackages = with pkgs.bat-extras; [batdiff batman batgrep batwatch batpipe prettybat];
|
|
||||||
};
|
|
||||||
|
|
||||||
hyfetch = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
backend = "fastfetch";
|
|
||||||
preset = userSettings.sexuality;
|
|
||||||
mode = "rgb";
|
|
||||||
light_dark = "dark";
|
|
||||||
lightness = {
|
|
||||||
};
|
|
||||||
color_align = {
|
|
||||||
mode = "horizontal";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
fish = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
plugins = [
|
|
||||||
{
|
|
||||||
name = "tide";
|
|
||||||
inherit (pkgs.fishPlugins.tide) src;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "!!";
|
|
||||||
inherit (pkgs.fishPlugins.bang-bang) src;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
shellAliases =
|
|
||||||
{
|
|
||||||
}
|
|
||||||
// lib.optionalAttrs (!systemSettings.darwin) {
|
|
||||||
reboot-windows = "sudo efibootmgr --bootnext 0000; sudo reboot -h now";
|
|
||||||
};
|
|
||||||
shellInit = ''
|
|
||||||
batman --export-env | source
|
|
||||||
'';
|
|
||||||
##test -r '/Users/${userSettings.username}/.opam/opam-init/init.fish' && source '/Users/${userSettings.username}/.opam/opam-init/init.fish' > /dev/null 2> /dev/null; or true
|
|
||||||
};
|
|
||||||
home-manager.enable = true;
|
|
||||||
}
|
|
43
modules/shared/user-system-settings.nix
Normal file
43
modules/shared/user-system-settings.nix
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
# applies user settings for the system
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
user,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
# Set your time zone.
|
||||||
|
time.timeZone = user.timeZone;
|
||||||
|
|
||||||
|
home-manager.users.${user.username}.home.sessionVariables =
|
||||||
|
{
|
||||||
|
EDITOR = user.editor;
|
||||||
|
TERMINAL = user.term;
|
||||||
|
}
|
||||||
|
// lib.optionalAttrs (user ? "browser") {
|
||||||
|
BROWSER = user.browser;
|
||||||
|
};
|
||||||
|
|
||||||
|
stylix = {
|
||||||
|
enable = user ? "theme";
|
||||||
|
base16Scheme = "${pkgs.base16-schemes}/share/themes/${user.theme}.yaml";
|
||||||
|
|
||||||
|
fonts = lib.optionalAttrs (user ? "font") {
|
||||||
|
serif = {
|
||||||
|
package = pkgs.nerd-fonts.${user.font};
|
||||||
|
name = "${user.font} Nerd Font";
|
||||||
|
};
|
||||||
|
sansSerif = {
|
||||||
|
package = pkgs.nerd-fonts.${user.font};
|
||||||
|
name = "${user.font} Nerd Font";
|
||||||
|
};
|
||||||
|
monospace = {
|
||||||
|
package = pkgs.nerd-fonts.${user.font};
|
||||||
|
name = "${user.font} Nerd Font";
|
||||||
|
};
|
||||||
|
emoji = {
|
||||||
|
package = pkgs.twemoji-color-font;
|
||||||
|
name = "Twemoji Color";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
47
oldflake.nix
47
oldflake.nix
|
@ -1,47 +0,0 @@
|
||||||
{
|
|
||||||
description = "My first flake!";
|
|
||||||
|
|
||||||
inputs = {
|
|
||||||
nixpkgs.url = "nixpkgs/nixos-23.11";
|
|
||||||
home-manager = {
|
|
||||||
url = "github:nix-community/home-manager/release-23.11";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
# nix-flatpak.url = "github:gmodena/nix-flatpak/?ref=<0.2.0>";
|
|
||||||
|
|
||||||
# hyprland.url = "github:hyprwm/Hyprland";
|
|
||||||
# hyprland-plugins = {
|
|
||||||
# url = "github:hyprwm/hyprland-plugins";
|
|
||||||
# inputs.hyprland.follows = "hyprland";
|
|
||||||
# };
|
|
||||||
# use the following for unstable:
|
|
||||||
# nixpkgs.url = "nixpkgs/nixos-unstable";
|
|
||||||
|
|
||||||
# or any branch you want:
|
|
||||||
# nixpkgs.url = "nixpkgs/{BRANCH-NAME}"
|
|
||||||
};
|
|
||||||
|
|
||||||
outputs = {
|
|
||||||
self,
|
|
||||||
home-manager,
|
|
||||||
nixpkgs,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
system = "x86_64-linux";
|
|
||||||
lib = nixpkgs.lib;
|
|
||||||
pkgs = nixpkgs.legacyPackages.${system};
|
|
||||||
in {
|
|
||||||
nixosConfigurations = {
|
|
||||||
nmarks = lib.nixosSystem {
|
|
||||||
inherit system;
|
|
||||||
modules = [./configuration.nix];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
homeConfigurations = {
|
|
||||||
nmarks = home-manager.lib.homeManagerConfiguration {
|
|
||||||
inherit pkgs;
|
|
||||||
modules = [./home.nix];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
65
readme.md
Normal file
65
readme.md
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
# nix config
|
||||||
|
|
||||||
|
this setup allows natalie and chloe to share common configuration between their machines, but also share useful modules between each other.
|
||||||
|
|
||||||
|
```
|
||||||
|
lib/ # reusable functions
|
||||||
|
modules/ # reusable modules
|
||||||
|
+-- macos/ # nix-darwin configurations
|
||||||
|
+-- nixos/ # linux configurations
|
||||||
|
+-- nixvim/ # neovim configurations
|
||||||
|
+-- shared/ # shared between nixos-rebuild & darwin-rebuild
|
||||||
|
+-- home-manager.nix # home program presets
|
||||||
|
users/
|
||||||
|
+-- chloe/
|
||||||
|
| +-- user.nix # info about her
|
||||||
|
| +-- configuration.nix # for all hosts
|
||||||
|
| +-- home.nix # for all hosts
|
||||||
|
| +-- sandwich/
|
||||||
|
| | +-- configuration.nix # per host
|
||||||
|
| | +-- home.nix
|
||||||
|
| +-- paperback/
|
||||||
|
| ...
|
||||||
|
+-- natalie/
|
||||||
|
+-- user.nix # info about her
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
A new machine can be added by adding a new definition in `flake.nix`. Note that the user and host `configuration.nix` and `home.nix` files are
|
||||||
|
|
||||||
|
## macOS installation instructions
|
||||||
|
|
||||||
|
Install Nix using the upstream Nix (Pick "no" then "yes):
|
||||||
|
|
||||||
|
```
|
||||||
|
curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | \
|
||||||
|
sh -s -- install
|
||||||
|
```
|
||||||
|
|
||||||
|
While this installs, now is a good time to perform manual setup steps:
|
||||||
|
|
||||||
|
- Setup your SSH keys in `~/.ssh`
|
||||||
|
- Configure the device hostname in System Settings in
|
||||||
|
- About -> Name
|
||||||
|
- General -> Sharing -> Local Hostname
|
||||||
|
- Make sure you're logged into iCloud / Mac App Store
|
||||||
|
- `xcode-select --install` to make sure Git and other utilities are available.
|
||||||
|
- Optional: Disable app verification with `sudo spctl --master-disable`, then, go to System Settings -> Privacy to allow unsigned apps.
|
||||||
|
|
||||||
|
Once Nix is installed, open a new shell and clone the repository:
|
||||||
|
|
||||||
|
```
|
||||||
|
# Clone via HTTPs
|
||||||
|
git clone https://git.paperclover.net/clo/config.git
|
||||||
|
# With SSH Authentication
|
||||||
|
git clone git@git.paperclover.net:clo/config
|
||||||
|
```
|
||||||
|
|
||||||
|
The location of the cloned repository must match what is in your `user.nix` file.
|
||||||
|
|
||||||
|
Setup `nix-darwin` using the `switch` helper:
|
||||||
|
|
||||||
|
```
|
||||||
|
./switch
|
||||||
|
```
|
||||||
|
|
12
switch
Executable file
12
switch
Executable file
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
nh_subcommand="os"
|
||||||
|
fallback_command="nixos-rebuild"
|
||||||
|
if [ "$(uname -o)" ]; then
|
||||||
|
nh_subcommand="darwin"
|
||||||
|
fallback_command="nix run .#darwin-rebuild"
|
||||||
|
fi;
|
||||||
|
if command -v nh > /dev/null; then
|
||||||
|
nh $nh_subcommand switch .
|
||||||
|
else
|
||||||
|
$fallback_command -- switch --flake .
|
||||||
|
fi
|
28
users/chloe/configuration.nix
Normal file
28
users/chloe/configuration.nix
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
# Configuration applied to all of chloe's machines
|
||||||
|
{ pkgs, ... }: {
|
||||||
|
# packages for all machines
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
neovim
|
||||||
|
];
|
||||||
|
# configuration for shared modules.
|
||||||
|
# all custom options in 'shared' for clarity.
|
||||||
|
shared.darwin = {
|
||||||
|
macAppStoreApps = [
|
||||||
|
"adguard"
|
||||||
|
"magnet"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
# system preferences
|
||||||
|
system.defaults = {
|
||||||
|
NSGlobalDomain = {
|
||||||
|
KeyRepeat = 1;
|
||||||
|
InitialKeyRepeat = 10;
|
||||||
|
};
|
||||||
|
CustomUserPreferences = {
|
||||||
|
NSGlobalDomain = {
|
||||||
|
# TODO: how to change system accent color
|
||||||
|
AppleHighlightColor = "1.000000 0.874510 0.701961 Orange";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
24
users/chloe/home.nix
Normal file
24
users/chloe/home.nix
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
{
|
||||||
|
inputs,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
home = {
|
||||||
|
stateVersion = "23.05"; # Please read the comment before changing.
|
||||||
|
packages = [
|
||||||
|
pkgs.neovim
|
||||||
|
pkgs.nh
|
||||||
|
pkgs.ffmpeg
|
||||||
|
];
|
||||||
|
};
|
||||||
|
programs = {
|
||||||
|
# sort-lines:start
|
||||||
|
hyfetch.enable = true;
|
||||||
|
zsh.enable = true;
|
||||||
|
# sort-lines:end
|
||||||
|
|
||||||
|
# use a git-specific email
|
||||||
|
git.userEmail = "git@paperclover.net";
|
||||||
|
};
|
||||||
|
}
|
5
users/chloe/paperback/configuration.nix
Normal file
5
users/chloe/paperback/configuration.nix
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{pkgs, ...}: {
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
reaper
|
||||||
|
];
|
||||||
|
}
|
14
users/chloe/sandwich/configuration.nix
Normal file
14
users/chloe/sandwich/configuration.nix
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
{pkgs, ...}: {
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
ffmpeg
|
||||||
|
ripgrep
|
||||||
|
reaper
|
||||||
|
];
|
||||||
|
shared.darwin = {
|
||||||
|
macAppStoreApps = [
|
||||||
|
"final-cut-pro"
|
||||||
|
"logic-pro"
|
||||||
|
"motion"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
18
users/chloe/user.nix
Normal file
18
users/chloe/user.nix
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
# This definition is used by modules to customize as needed.
|
||||||
|
{
|
||||||
|
username = "clo"; # username
|
||||||
|
name = "chloe caruso";
|
||||||
|
email = "account@paperclover.net";
|
||||||
|
timeZone = "America/Los_Angeles";
|
||||||
|
|
||||||
|
dotfilesDir = "~/config"; # absolute path of the local repo
|
||||||
|
|
||||||
|
# Stylix/Theming
|
||||||
|
theme = "catppuccin-mocha";
|
||||||
|
#font
|
||||||
|
sexuality = "lesbian"; # hyfetch
|
||||||
|
|
||||||
|
# Default terminal command. NOTE: ghostty is not installed for you
|
||||||
|
term = "ghostty"; # preferred $TERMINAL
|
||||||
|
editor = "nvim"; # preferred $EDITOR
|
||||||
|
}
|
17
users/natalie/configuration.nix
Normal file
17
users/natalie/configuration.nix
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
# Applied to all systems
|
||||||
|
{pkgs, ...}: {
|
||||||
|
services.tailscale.enable = true;
|
||||||
|
fonts.packages = with pkgs; [
|
||||||
|
nerd-fonts.fira-code
|
||||||
|
nerd-fonts.iosevka
|
||||||
|
iosevka
|
||||||
|
nerd-fonts.symbols-only
|
||||||
|
nerd-fonts.iosevka
|
||||||
|
];
|
||||||
|
|
||||||
|
# configuration for shared modules.
|
||||||
|
# all custom options in 'shared' for clarity.
|
||||||
|
shared.darwin = {
|
||||||
|
tiling.enable = true; # use tiling window manager
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
userSettings,
|
user,
|
||||||
systemSettings,
|
host,
|
||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
imports = [
|
imports = [
|
||||||
|
@ -16,7 +16,7 @@
|
||||||
enable = true;
|
enable = true;
|
||||||
# Certain features, including CLI integration and system authentication support,
|
# Certain features, including CLI integration and system authentication support,
|
||||||
# require enabling PolKit integration on some desktop environments (e.g. Plasma).
|
# require enabling PolKit integration on some desktop environments (e.g. Plasma).
|
||||||
polkitPolicyOwners = [userSettings.username];
|
polkitPolicyOwners = [user.username];
|
||||||
};
|
};
|
||||||
|
|
||||||
noisetorch.enable = true;
|
noisetorch.enable = true;
|
||||||
|
@ -75,7 +75,7 @@
|
||||||
libvirtd.enable = true;
|
libvirtd.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
nix.settings.trusted-users = ["root" userSettings.username];
|
nix.settings.trusted-users = ["root" user.username];
|
||||||
systemd = {
|
systemd = {
|
||||||
targets = {
|
targets = {
|
||||||
sleep.enable = false;
|
sleep.enable = false;
|
||||||
|
@ -129,10 +129,10 @@
|
||||||
|
|
||||||
# Define a user account. Don't forget to set a password with ‘passwd’.
|
# Define a user account. Don't forget to set a password with ‘passwd’.
|
||||||
# users.defaultUserShell = pkgs.fish;
|
# users.defaultUserShell = pkgs.fish;
|
||||||
users.users.${userSettings.username} = {
|
users.users.${user.username} = {
|
||||||
shell = pkgs.fish;
|
shell = pkgs.fish;
|
||||||
isNormalUser = true;
|
isNormalUser = true;
|
||||||
description = "Natalie Marks";
|
description = user.name;
|
||||||
extraGroups = ["networkmanager" "wheel" "docker"];
|
extraGroups = ["networkmanager" "wheel" "docker"];
|
||||||
# openssh.authorizedKeys.keyFiles = ["~/.ssh/id_ed25519.pub"];
|
# openssh.authorizedKeys.keyFiles = ["~/.ssh/id_ed25519.pub"];
|
||||||
packages = with pkgs; [
|
packages = with pkgs; [
|
||||||
|
@ -153,7 +153,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
networking = {
|
networking = {
|
||||||
hostName = systemSettings.host; # Define your hostname.
|
hostName = host.name; # Define your hostname.
|
||||||
# wireless.enable = true; # Enables wireless support via wpa_supplicant.
|
# wireless.enable = true; # Enables wireless support via wpa_supplicant.
|
||||||
networkmanager.enable = true;
|
networkmanager.enable = true;
|
||||||
firewall = {
|
firewall = {
|
62
users/natalie/desktop/home.nix
Normal file
62
users/natalie/desktop/home.nix
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
{
|
||||||
|
inputs,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
userSettings,
|
||||||
|
systemSettings,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [
|
||||||
|
inputs.nixvim.homeManagerModules.nixvim
|
||||||
|
#set up nixvim
|
||||||
|
# ../../modules/nixvim
|
||||||
|
];
|
||||||
|
home = {
|
||||||
|
stateVersion = "23.05"; # Please read the comment before changing.
|
||||||
|
|
||||||
|
packages = with pkgs; [
|
||||||
|
#building macos apps hard :(
|
||||||
|
ghostty
|
||||||
|
stremio
|
||||||
|
julia
|
||||||
|
qbittorrent
|
||||||
|
|
||||||
|
#gaming
|
||||||
|
bottles
|
||||||
|
lutris
|
||||||
|
mangohud
|
||||||
|
dxvk_2
|
||||||
|
steam-run
|
||||||
|
vulkan-tools
|
||||||
|
path-of-building
|
||||||
|
wineWowPackages.stable
|
||||||
|
winetricks
|
||||||
|
(prismlauncher.override {gamemodeSupport = true;})
|
||||||
|
|
||||||
|
#window manager stuff
|
||||||
|
wofi
|
||||||
|
xorg.xauth
|
||||||
|
#linux tools
|
||||||
|
legcord
|
||||||
|
pavucontrol
|
||||||
|
ethtool
|
||||||
|
grub2
|
||||||
|
efibootmgr
|
||||||
|
distrobox
|
||||||
|
xdg-desktop-portal-gtk
|
||||||
|
xclip
|
||||||
|
kdePackages.dolphin
|
||||||
|
#broken on macos
|
||||||
|
calibre
|
||||||
|
mpv
|
||||||
|
wireguard-tools
|
||||||
|
signal-desktop
|
||||||
|
inputs.zls.packages.x86_64-linux.zls
|
||||||
|
rust-bin.stable.latest.default
|
||||||
|
];
|
||||||
|
# programs.mangohud.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# xdg.mimeApps.defaultApplications."inode/directory" = "dolphin.desktop";
|
||||||
|
}
|
16
users/natalie/home.nix
Normal file
16
users/natalie/home.nix
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
} @ args: {
|
||||||
|
programs = {
|
||||||
|
# sort-lines:start
|
||||||
|
atuin.enable = true;
|
||||||
|
bat.enable = true;
|
||||||
|
hyfetch.enable = true;
|
||||||
|
direnv.enable = true;
|
||||||
|
# sort-lines:end
|
||||||
|
};
|
||||||
|
|
||||||
|
home.packages = import ./packages.nix args;
|
||||||
|
}
|
|
@ -1,14 +1,16 @@
|
||||||
{
|
{pkgs, ...}: {
|
||||||
pkgs,
|
|
||||||
userSettings,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
neovim
|
neovim
|
||||||
pinentry_mac
|
pinentry_mac
|
||||||
signal-desktop-bin
|
signal-desktop-bin
|
||||||
];
|
];
|
||||||
|
|
||||||
|
# Custom configuration modules in "modules" are shared between users,
|
||||||
|
# and can be configured in this "shared" namespace
|
||||||
|
shared.darwin = {
|
||||||
|
macAppStoreApps = ["wireguard"];
|
||||||
|
};
|
||||||
|
|
||||||
# Create /etc/zshrc that loads the nix-darwin environment.
|
# Create /etc/zshrc that loads the nix-darwin environment.
|
||||||
programs = {
|
programs = {
|
||||||
gnupg.agent.enable = true;
|
gnupg.agent.enable = true;
|
||||||
|
@ -25,4 +27,30 @@
|
||||||
fi
|
fi
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# Use homebrew to install casks
|
||||||
|
homebrew = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
onActivation = {
|
||||||
|
autoUpdate = true;
|
||||||
|
cleanup = "none";
|
||||||
|
upgrade = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
brews = [
|
||||||
|
"imagemagick"
|
||||||
|
"opam"
|
||||||
|
];
|
||||||
|
|
||||||
|
casks = [
|
||||||
|
"battle-net"
|
||||||
|
"stremio"
|
||||||
|
"alt-tab"
|
||||||
|
"legcord"
|
||||||
|
"zulip"
|
||||||
|
"zen-browser"
|
||||||
|
"supertuxkart"
|
||||||
|
];
|
||||||
|
};
|
||||||
}
|
}
|
23
users/natalie/laptop/home.nix
Normal file
23
users/natalie/laptop/home.nix
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
{
|
||||||
|
inputs,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
user,
|
||||||
|
host,
|
||||||
|
...
|
||||||
|
} @ args: {
|
||||||
|
imports = [
|
||||||
|
inputs.nixvim.homeManagerModules.nixvim
|
||||||
|
#set up nixvim
|
||||||
|
# ../../modules/nixvim
|
||||||
|
];
|
||||||
|
home = {
|
||||||
|
stateVersion = "23.05"; # Please read the comment before changing.
|
||||||
|
# shell = pkgs.fish;
|
||||||
|
|
||||||
|
sessionPath = [
|
||||||
|
"$HOME/.emacs.d/bin"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,8 +1,5 @@
|
||||||
{
|
# Packages installed with home-manager
|
||||||
pkgs,
|
{pkgs, ...}:
|
||||||
systemSettings,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
with pkgs; [
|
with pkgs; [
|
||||||
#general development
|
#general development
|
||||||
just
|
just
|
13
users/natalie/user.nix
Normal file
13
users/natalie/user.nix
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
rec {
|
||||||
|
username = "nmarks"; # username
|
||||||
|
name = "Natalie"; # name/identifier
|
||||||
|
email = "nmarks413@gmail.com"; # email (used for certain configurations)
|
||||||
|
dotfilesDir = "~/.dotfiles"; # absolute path of the local repo
|
||||||
|
theme = "catppuccin-mocha"; #name of theme that stylix will use
|
||||||
|
browser = "firefox"; # Default browser; must select one from ./user/app/browser/
|
||||||
|
term = "ghostty"; # Default terminal command;
|
||||||
|
font = "iosevka"; # Selected font
|
||||||
|
editor = "neovim"; # Default editor;
|
||||||
|
timeZone = "America/Los_Angeles";
|
||||||
|
sexuality = "bisexual";
|
||||||
|
}
|
Loading…
Reference in a new issue