format everything

This commit is contained in:
Ray Andrew 2025-04-05 16:34:08 -05:00
parent fa4919f87e
commit 0fbad1d781
Signed by: rayandrew
SSH key fingerprint: SHA256:XYrYrxF0Z3A72n8P/p6mqPRNQZT22F88XcLsG+kX4xw
33 changed files with 1034 additions and 859 deletions

View file

@ -1,4 +1,9 @@
{ pkgs, lib, config, ... }: {
pkgs,
lib,
config,
...
}:
{ {
options.custom = with lib; { options.custom = with lib; {
@ -37,9 +42,10 @@
alt-enter = alt-enter =
let let
script = pkgs.writeText "ghostty.applescript" '' script = pkgs.writeText "ghostty.applescript" ''
do shell script "open -n -a Ghostty" do shell script "open -n -a Ghostty"
''; '';
in "exec-and-forget osascript ${script}"; in
"exec-and-forget osascript ${script}";
alt-shift-f = "fullscreen"; alt-shift-f = "fullscreen";
alt-p = "layout floating tiling"; alt-p = "layout floating tiling";
@ -120,8 +126,8 @@
on-window-detected = [ on-window-detected = [
{ {
"if".app-id="com.mitchellh.ghostty"; "if".app-id = "com.mitchellh.ghostty";
run= [ "layout tiling" ]; run = [ "layout tiling" ];
} }
]; ];
}; };

View file

@ -6,7 +6,8 @@
system, system,
host, host,
... ...
}: { }:
{
imports = [ imports = [
./aerospace.nix ./aerospace.nix
./homebrew.nix ./homebrew.nix
@ -53,10 +54,13 @@
# networking.hostId = builtins.substring 0 8 (builtins.hashString "md5" config.networking.hostName); # networking.hostId = builtins.substring 0 8 (builtins.hashString "md5" config.networking.hostName);
# networking.networkmanager.enable = true; # networking.networkmanager.enable = true;
environment.systemPackages = with pkgs; [ environment.systemPackages =
vim with pkgs;
htop [
] ++ (lib.attrValues config.custom.shell.packages); vim
htop
]
++ (lib.attrValues config.custom.shell.packages);
system.stateVersion = 6; system.stateVersion = 6;
}; };

View file

@ -1,34 +1,87 @@
{ pkgs, user, inputs, ... }: {
config,
lib,
pkgs,
user,
inputs,
...
}:
{ {
nix-homebrew = { options.custom.brew = with lib; {
inherit user; zen-browser = mkEnableOption "Enable Zen Browser";
enable = true; webex = mkEnableOption "Enable Webe";
enableRosetta = true; zoom = mkEnableOption "Enable Zoom";
taps = { slack = mkEnableOption "Enable Slack";
"homebrew/homebrew-core" = inputs.homebrew-core; ghostty = mkEnableOption "Enable Ghostty";
"homebrew/homebrew-cask" = inputs.homebrew-cask; ms-office = mkEnableOption "Enable MS Office";
"homebrew/homebrew-createzap" = inputs.homebrew-createzap; ms-teams = mkEnableOption "Enable MS Teams";
}; spotify = mkEnableOption "Enable Spotify";
mutableTaps = false;
}; };
homebrew = { config = lib.mkMerge [
enable = true; {
onActivation = { nix-homebrew = {
# autoUpdate = true; inherit user;
# cleanup = "zap"; enable = true;
}; enableRosetta = true;
global = { taps = {
brewfile = true; "homebrew/homebrew-core" = inputs.homebrew-core;
}; "homebrew/homebrew-cask" = inputs.homebrew-cask;
casks = [ "homebrew/homebrew-createzap" = inputs.homebrew-createzap;
"zen-browser" };
"webex" mutableTaps = false;
"slack" };
"zoom" homebrew = {
"spotify" enable = true;
"ghostty" onActivation = {
]; # autoUpdate = true;
}; # cleanup = "zap";
};
global = {
brewfile = true;
};
};
}
(lib.mkIf config.custom.brew.zen-browser {
homebrew.casks = [
"zen-browser"
];
})
(lib.mkIf config.custom.brew.webex {
homebrew.casks = [
"webex"
];
})
(lib.mkIf config.custom.brew.slack {
homebrew.casks = [
"slack"
];
})
(lib.mkIf config.custom.brew.zoom {
homebrew.casks = [
"zoom"
];
})
(lib.mkIf config.custom.brew.spotify {
homebrew.casks = [
"spotify"
];
})
(lib.mkIf config.custom.brew.ghostty {
homebrew.casks = [
"ghostty"
];
})
(lib.mkIf config.custom.brew.ms-office {
homebrew.casks = [
"microsoft-office"
];
})
(lib.mkIf config.custom.brew.ms-teams {
homebrew.casks = [
"microsoft-teams"
];
})
];
} }

184
flake.nix
View file

@ -36,103 +36,117 @@
homebrew-createzap.flake = false; homebrew-createzap.flake = false;
}; };
outputs = { outputs =
self, {
nixpkgs, self,
home-manager, nixpkgs,
treefmt-nix, home-manager,
... treefmt-nix,
} @ inputs: let ...
inherit (self) outputs; }@inputs:
user = "rayandrew"; let
lib = nixpkgs.lib; inherit (self) outputs;
commonArgs = { user = "rayandrew";
inherit lib = nixpkgs.lib;
commonArgs = {
inherit
self self
inputs inputs
nixpkgs nixpkgs
lib lib
; ;
specialArgs = { specialArgs = {
inherit self inputs; inherit self inputs;
};
}; };
};
# call with forAllSystems (commonArgs: function body) # call with forAllSystems (commonArgs: function body)
forAllSystems = forAllSystems =
fn: fn:
lib.genAttrs [ lib.genAttrs
"x86_64-linux" [
"aarch64-linux" "x86_64-linux"
"x86_64-darwin" "aarch64-linux"
"aarch64-darwin" "x86_64-darwin"
] (system: fn (commonArgs // { inherit system; pkgs = import inputs.nixpkgs { "aarch64-darwin"
inherit system; ]
config.allowUnfree = true; (
}; })); system:
treefmtEval = forAllSystems ( fn (
{ pkgs, ... }: commonArgs
treefmt-nix.lib.evalModule pkgs { // {
projectRootFile = "flake.nix"; inherit system;
programs.nixfmt-rfc-style.enable = true; pkgs = import inputs.nixpkgs {
settings.global.excludes = [ "flake.lock" ]; inherit system;
} config.allowUnfree = true;
); };
in (import ./hosts commonArgs) // }
{ )
checks = forAllSystems ( );
{ treefmtEval = forAllSystems (
pkgs, { pkgs, ... }:
system, treefmt-nix.lib.evalModule pkgs {
... projectRootFile = "flake.nix";
}: programs.nixfmt-rfc-style.enable = true;
{ settings.global.excludes = [ "flake.lock" ];
formatting = treefmtEval.${system}.config.build.check self; }
pre-commit-check = inputs.git-hooks.lib.${system}.run { );
src = ./.; in
excludes = [ "flake.lock" ]; (import ./hosts commonArgs)
hooks = { // {
treefmt = { checks = forAllSystems (
enable = true; {
package = lib.mkForce treefmtEval.${system}.config.build.wrapper; pkgs,
args = [ system,
# "--config-file ${treefmtEval.${system}.config.build.configFile}" ...
]; }:
{
formatting = treefmtEval.${system}.config.build.check self;
pre-commit-check = inputs.git-hooks.lib.${system}.run {
src = ./.;
excludes = [ "flake.lock" ];
hooks = {
treefmt = {
enable = true;
package = lib.mkForce treefmtEval.${system}.config.build.wrapper;
args = [
# "--config-file ${treefmtEval.${system}.config.build.configFile}"
];
};
}; };
}; };
}; }
} );
);
devShells = forAllSystems ( devShells = forAllSystems (
{ {
pkgs, pkgs,
system, system,
... ...
}: }:
{ {
default = pkgs.mkShell { default = pkgs.mkShell {
inherit (self.checks.${system}.pre-commit-check) shellHook; inherit (self.checks.${system}.pre-commit-check) shellHook;
name = "dotfiles"; name = "dotfiles";
buildInputs = self.checks.${system}.pre-commit-check.enabledPackages; buildInputs = self.checks.${system}.pre-commit-check.enabledPackages;
nativeBuildInputs = [ nativeBuildInputs = [
treefmtEval.${system}.config.build.wrapper treefmtEval.${system}.config.build.wrapper
]; ];
packages = with pkgs; [ packages = with pkgs; [
sops sops
age age
ssh-to-age ssh-to-age
nixfmt-rfc-style nixfmt-rfc-style
]; ];
DIRENV_LOG_FORMAT = ""; DIRENV_LOG_FORMAT = "";
}; };
} }
); );
packages = forAllSystems (commonArgs': (import ./packages commonArgs')); packages = forAllSystems (commonArgs': (import ./packages commonArgs'));
formatter = forAllSystems ({ system, ... }: treefmtEval.${system}.config.build.wrapper); formatter = forAllSystems ({ system, ... }: treefmtEval.${system}.config.build.wrapper);
}; };
} }

View file

@ -6,7 +6,8 @@
system, system,
dots, dots,
... ...
}: { }:
{
imports = [ imports = [
./email ./email
./emacs ./emacs
@ -53,7 +54,7 @@
programs = { programs = {
nh = { nh = {
enable = true; enable = true;
package = pkgs.custom.nh; package = pkgs.custom.nh;
clean.enable = true; clean.enable = true;
clean.extraArgs = "--keep-since 4d --keep 3"; clean.extraArgs = "--keep-since 4d --keep 3";
flake = dots; flake = dots;

View file

@ -5,7 +5,8 @@
config, config,
dots, dots,
... ...
}: { }:
{
options.custom = with lib; { options.custom = with lib; {
emacs = { emacs = {
enable = mkEnableOption "Enable emacs"; enable = mkEnableOption "Enable emacs";

View file

@ -24,7 +24,7 @@
enable = config.custom.email.davmail; enable = config.custom.email.davmail;
settings = { settings = {
"davmail.mode" = "O365Manual"; "davmail.mode" = "O365Manual";
"davmail.url" = "https://outlook.office365.com/EWS/Exchange.asmx"; "davmail.url" = "https://outlook.office365.com/EWS/Exchange.asmx";
# davmail.mode = "O365Modern"; # davmail.mode = "O365Modern";
"davmail.keepDelay" = 30; "davmail.keepDelay" = 30;
# log4j.logger.davmail = "DEBUG"; # log4j.logger.davmail = "DEBUG";
@ -65,145 +65,147 @@
}; };
}; };
accounts.email = let accounts.email =
cat = lib.getExe' pkgs.coreutils "cat"; let
in rec { cat = lib.getExe' pkgs.coreutils "cat";
maildirBasePath = "${home-dir}/mail"; in
accounts = lib.mkMerge ([ rec {
{ maildirBasePath = "${home-dir}/mail";
"personal" = { accounts = lib.mkMerge ([
userName = "raydreww@gmail.com"; {
address = "raydreww@gmail.com"; "personal" = {
realName = "Ray Andrew"; userName = "raydreww@gmail.com";
primary = !config.custom.email.davmail; address = "raydreww@gmail.com";
signature = { realName = "Ray Andrew";
text = '' primary = !config.custom.email.davmail;
-- Ray Andrew signature = {
''; text = ''
showSignature = "append"; -- Ray Andrew
}; '';
passwordCommand = "${cat} ${config.sops.secrets."personal".path}"; showSignature = "append";
gpg = { };
key = "1913ECC8FD7076BC8330E11607AA5254804C009F"; passwordCommand = "${cat} ${config.sops.secrets."personal".path}";
signByDefault = true; gpg = {
}; key = "1913ECC8FD7076BC8330E11607AA5254804C009F";
smtp = { signByDefault = true;
host = "smtp.gmail.com"; };
}; smtp = {
imap = { host = "smtp.gmail.com";
host = "imap.gmail.com"; };
}; imap = {
mbsync = { host = "imap.gmail.com";
enable = true; };
create = "both"; mbsync = {
expunge = "both"; enable = true;
patterns = [ create = "both";
"*" expunge = "both";
"!\"[Airmail]/Done\"" patterns = [
"!\"[Airmail]/Snooze\"" "*"
"!\"[Airmail]/To Do\"" "!\"[Airmail]/Done\""
"!\"[Airmail]/Send Later\"" "!\"[Airmail]/Snooze\""
"!\"[Gmail]/All Mail\"" "!\"[Airmail]/To Do\""
"!\"[Gmail]/Important\"" "!\"[Airmail]/Send Later\""
"!\"[Gmail]/Starred\"" "!\"[Gmail]/All Mail\""
"!\"[Gmail]/Bin\"" "!\"[Gmail]/Important\""
]; "!\"[Gmail]/Starred\""
}; "!\"[Gmail]/Bin\""
msmtp = { ];
enable = true; };
}; msmtp = {
neomutt = rec { enable = true;
enable = true; };
mailboxName = "p"; neomutt = rec {
extraConfig = '' enable = true;
set use_from = yes mailboxName = "p";
set pgp_verify_sig = yes extraConfig = ''
set pgp_sign_as = 0x07AA5254804C009F set use_from = yes
set pgp_timeout = 3600 set pgp_verify_sig = yes
named-mailboxes "${mailboxName}/inbox" =Inbox set pgp_sign_as = 0x07AA5254804C009F
named-mailboxes "${mailboxName}/drafts" =Drafts set pgp_timeout = 3600
named-mailboxes "${mailboxName}/sent" =Sent named-mailboxes "${mailboxName}/inbox" =Inbox
named-mailboxes "${mailboxName}/important" =Important named-mailboxes "${mailboxName}/drafts" =Drafts
named-mailboxes "${mailboxName}/trash" =Trash named-mailboxes "${mailboxName}/sent" =Sent
named-mailboxes "${mailboxName}/archive" =Archive named-mailboxes "${mailboxName}/important" =Important
''; named-mailboxes "${mailboxName}/trash" =Trash
}; named-mailboxes "${mailboxName}/archive" =Archive
}; '';
}
(lib.mkIf config.custom.email.davmail {
"uchicago" = {
userName = "rayandrew@uchicago.edu";
address = "rayandrew@uchicago.edu";
realName = "Ray Andrew";
primary = true;
signature = {
text = ''
-- Ray Andrew
'';
showSignature = "append";
};
passwordCommand = "${cat} ${config.sops.secrets."uchicago".path}";
gpg = {
key = "0BADFAD0FB93296C84956F9CEEF04CFFE9DFE5FC";
signByDefault = false;
};
smtp = {
host = "127.0.0.1";
port = 1025;
tls = {
enable = false;
certificatesFile = null;
}; };
}; };
imap = { }
host = "127.0.0.1"; (lib.mkIf config.custom.email.davmail {
port = 1143; "uchicago" = {
tls.enable = false; userName = "rayandrew@uchicago.edu";
}; address = "rayandrew@uchicago.edu";
mbsync = { realName = "Ray Andrew";
enable = true; primary = true;
create = "both"; signature = {
expunge = "both"; text = ''
patterns = [ -- Ray Andrew
"*" '';
"!\"[Airmail]/Done\"" showSignature = "append";
"!\"[Airmail]/Snooze\"" };
"!\"[Airmail]/To Do\"" passwordCommand = "${cat} ${config.sops.secrets."uchicago".path}";
"!\"[Airmail]/Send Later\"" gpg = {
]; key = "0BADFAD0FB93296C84956F9CEEF04CFFE9DFE5FC";
extraConfig.account = { signByDefault = false;
TLSType = "None"; };
AuthMechs = "LOGIN"; smtp = {
Timeout = 0; host = "127.0.0.1";
port = 1025;
tls = {
enable = false;
certificatesFile = null;
};
};
imap = {
host = "127.0.0.1";
port = 1143;
tls.enable = false;
};
mbsync = {
enable = true;
create = "both";
expunge = "both";
patterns = [
"*"
"!\"[Airmail]/Done\""
"!\"[Airmail]/Snooze\""
"!\"[Airmail]/To Do\""
"!\"[Airmail]/Send Later\""
];
extraConfig.account = {
TLSType = "None";
AuthMechs = "LOGIN";
Timeout = 0;
};
};
msmtp = {
enable = true;
extraConfig = {
auth = "plain";
};
};
neomutt = rec {
enable = true;
mailboxName = "u";
extraConfig = ''
set use_from = yes
set pgp_sign_as = 0xEEF04CFFE9DFE5FC
set pgp_verify_sig = yes
set pgp_timeout = 3600
named-mailboxes "${mailboxName}/inbox" =Inbox
named-mailboxes "${mailboxName}/drafts" =Drafts
named-mailboxes "${mailboxName}/sent" =Sent
named-mailboxes "${mailboxName}/important" =Important
named-mailboxes "${mailboxName}/trash" =Trash
named-mailboxes "${mailboxName}/archive" =Archive
named-mailboxes "${mailboxName}/teaching" =Teaching
'';
}; };
}; };
msmtp = { })
enable = true; ]);
extraConfig = { };
auth = "plain";
};
};
neomutt = rec {
enable = true;
mailboxName = "u";
extraConfig = ''
set use_from = yes
set pgp_sign_as = 0xEEF04CFFE9DFE5FC
set pgp_verify_sig = yes
set pgp_timeout = 3600
named-mailboxes "${mailboxName}/inbox" =Inbox
named-mailboxes "${mailboxName}/drafts" =Drafts
named-mailboxes "${mailboxName}/sent" =Sent
named-mailboxes "${mailboxName}/important" =Important
named-mailboxes "${mailboxName}/trash" =Trash
named-mailboxes "${mailboxName}/archive" =Archive
named-mailboxes "${mailboxName}/teaching" =Teaching
'';
};
};
})
]);
};
sops = { sops = {
age.keyFile = "${home-dir}/.config/sops/age/keys.txt"; age.keyFile = "${home-dir}/.config/sops/age/keys.txt";

View file

@ -23,26 +23,26 @@ in
home.file.".mailcap" = { home.file.".mailcap" = {
text = '' text = ''
# HTML # HTML
text/html; ${w3m} -sixel -o tmp_dir=~/.cache/w3m -o auto_image=TRUE -o display_image=1 -T text/html %s; nametemplate=%s.html text/html; ${w3m} -sixel -o tmp_dir=~/.cache/w3m -o auto_image=TRUE -o display_image=1 -T text/html %s; nametemplate=%s.html
# text/html; ${w3m} -o inline_img_protocol=4 -o tmp_dir=~/.cache/w3m -o auto_image=TRUE -o display_image=1 -T text/html %s; nametemplate=%s.html # text/html; ${w3m} -o inline_img_protocol=4 -o tmp_dir=~/.cache/w3m -o auto_image=TRUE -o display_image=1 -T text/html %s; nametemplate=%s.html
# This second one is chosen by auto_view due to the copiousoutput tag # This second one is chosen by auto_view due to the copiousoutput tag
text/html; ${w3m} -I %{charset} -T text/html -cols 140 -o tmp_dir=~/.cache/w3m -o display_link_number=1 -dump; copiousoutput text/html; ${w3m} -I %{charset} -T text/html -cols 140 -o tmp_dir=~/.cache/w3m -o display_link_number=1 -dump; copiousoutput
text/plain; nvim %s text/plain; nvim %s
#PDFs #PDFs
application/x-pdf; ${zathura} '%s'; test=test -n "$DISPLAY" application/x-pdf; ${zathura} '%s'; test=test -n "$DISPLAY"
application/pdf; ${zathura} '%s'; test=test -n "$DISPLAY" application/pdf; ${zathura} '%s'; test=test -n "$DISPLAY"
message/rfc822; nvim %s message/rfc822; nvim %s
#Images #Images
# image/png; /usr/bin/feh %s # image/png; /usr/bin/feh %s
# image/jpeg; /usr/bin/feh %s # image/jpeg; /usr/bin/feh %s
# image/*; (clear && ${term} +kitten icat %s); needsterminal # image/*; (clear && ${term} +kitten icat %s); needsterminal
image/*; (clear && ${term} imgcat %s); needsterminal image/*; (clear && ${term} imgcat %s); needsterminal
''; '';
}; };
}; };
} }

View file

@ -20,13 +20,16 @@ in
}; };
config = lib.mkIf (config.custom.email.enable && config.custom.email.neomutt) { config = lib.mkIf (config.custom.email.enable && config.custom.email.neomutt) {
xsession.windowManager.i3.config = let xsession.windowManager.i3.config =
i3config = config.xsession.windowManager.i3.config; let
in { i3config = config.xsession.windowManager.i3.config;
keybindings = lib.mkOptionDefault { in
"${i3config.modifier}+m" = "exec --no-startup-id ${i3config.terminal} -e ${config.programs.neomutt.package}/bin/neomutt"; {
keybindings = lib.mkOptionDefault {
"${i3config.modifier}+m" =
"exec --no-startup-id ${i3config.terminal} -e ${config.programs.neomutt.package}/bin/neomutt";
};
}; };
};
programs.neomutt = { programs.neomutt = {
enable = true; enable = true;
@ -36,40 +39,40 @@ in
binds = keybinds.binds ++ [ ]; binds = keybinds.binds ++ [ ];
macros = keybinds.macros ++ [ ]; macros = keybinds.macros ++ [ ];
extraConfig = '' extraConfig = ''
set abort_key = "<Esc>" set abort_key = "<Esc>"
# set editor = "nvim" # set editor = "nvim"
set editor = "emacs -nw" set editor = "emacs -nw"
set edit_headers = yes set edit_headers = yes
set sidebar_visible set sidebar_visible
set sidebar_format = "%D%?F? [%F]?%* %?N?%N/?%S" set sidebar_format = "%D%?F? [%F]?%* %?N?%N/?%S"
set mail_check_stats set mail_check_stats
# set new_mail_command="notify-send 'New Email' '%n new messages, %u unread.' &" # set new_mail_command="notify-send 'New Email' '%n new messages, %u unread.' &"
# status bar, date format, finding stuff etc. # status bar, date format, finding stuff etc.
set status_chars = " *%A" set status_chars = " *%A"
# set status_format = "[ Folder: %f ] [%r%m messages%?n? (%n new)?%?d? (%d to delete)?%?t? (%t tagged)? ]%>─%?p?( %p postponed )?" # set status_format = "[ Folder: %f ] [%r%m messages%?n? (%n new)?%?d? (%d to delete)?%?t? (%t tagged)? ]%>─%?p?( %p postponed )?"
set status_format = "[ Folder: %D ] [%r%m messages%?n? (%n new)?%?d? (%d to delete)?%?t? (%t tagged)? ]%>%?p?( %p postponed )?" set status_format = "[ Folder: %D ] [%r%m messages%?n? (%n new)?%?d? (%d to delete)?%?t? (%t tagged)? ]%>%?p?( %p postponed )?"
set date_format = "%d.%m.%Y %H:%M" set date_format = "%d.%m.%Y %H:%M"
set uncollapse_jump set uncollapse_jump
set sort_re set sort_re
set reply_regexp = "^(([Rr][Ee]?(\[[0-9]+\])?: *)?(\[[^]]+\] *)?)*" set reply_regexp = "^(([Rr][Ee]?(\[[0-9]+\])?: *)?(\[[^]]+\] *)?)*"
set quote_regexp = "^( {0,4}[>|:#%]| {0,4}[a-z0-9]+[>|]+)+" set quote_regexp = "^( {0,4}[>|:#%]| {0,4}[a-z0-9]+[>|]+)+"
set send_charset = "utf-8:iso-8859-1:us-ascii" set send_charset = "utf-8:iso-8859-1:us-ascii"
set charset = "utf-8" set charset = "utf-8"
set arrow_cursor = "no" # Change `color indicator` depending set arrow_cursor = "no" # Change `color indicator` depending
# Pager View Options # Pager View Options
set pager_index_lines = 10 # Shows 10 lines of index when pager is active set pager_index_lines = 10 # Shows 10 lines of index when pager is active
set pager_context = 3 set pager_context = 3
set pager_stop set pager_stop
set menu_scroll set menu_scroll
set tilde set tilde
unset markers unset markers
${colors} ${colors}
''; '';
}; };
}; };
} }

View file

@ -15,53 +15,56 @@
}; };
config = lib.mkIf config.custom.gui.ghostty.enable { config = lib.mkIf config.custom.gui.ghostty.enable {
home.packages = lib.mkIf pkgs.stdenv.isLinux (with pkgs; [ home.packages = lib.mkIf pkgs.stdenv.isLinux (
inputs.ghostty.packages."${system}".default with pkgs;
]); [
inputs.ghostty.packages."${system}".default
]
);
xdg.configFile."ghostty/config".text = '' xdg.configFile."ghostty/config".text = ''
gtk-single-instance = true gtk-single-instance = true
gtk-titlebar = false gtk-titlebar = false
window-decoration = server window-decoration = server
quit-after-last-window-closed = true quit-after-last-window-closed = true
# gtk-adwaita = false # gtk-adwaita = false
font-family = ${system-font} font-family = ${system-font}
font-size = 11 font-size = 11
app-notifications = no-clipboard-copy app-notifications = no-clipboard-copy
# theme = gruber-darker # theme = gruber-darker
# font-family = Iosevka Nerd Font Mono # font-family = Iosevka Nerd Font Mono
# font-size = 13 # font-size = 13
# background = #062329 # background = #062329
background = #072626 background = #072626
# foreground = #d1b897 # foreground = #d1b897
foreground = #d3b58d foreground = #d3b58d
cursor-color = #ffffff cursor-color = #ffffff
# cursor-text = #d1b897 # cursor-text = #d1b897
cursor-text = #d3b58d cursor-text = #d3b58d
# selection-background = #0000ff # selection-background = #0000ff
# selection-foreground = #d1b897 # selection-foreground = #d1b897
selection-background = #0000ff selection-background = #0000ff
selection-foreground = #d3b58d selection-foreground = #d3b58d
# palette = 0=#062329 # palette = 0=#062329
palette = 0=#072626 palette = 0=#072626
# palette = 1=#0b3335 # palette = 1=#0b3335
# palette = 2=#0000ff # palette = 2=#0000ff
palette = 3=#44b340 palette = 3=#44b340
palette = 4=#8cde94 palette = 4=#8cde94
# palette = 5=#d1b897 # palette = 5=#d1b897
palette = 5=#d3b58d palette = 5=#d3b58d
palette = 6=#c1d1e3 palette = 6=#c1d1e3
palette = 7=#ffffff palette = 7=#ffffff
palette = 8=#626880 palette = 8=#626880
palette = 9=#e67172 palette = 9=#e67172
palette = 10=#8ec772 palette = 10=#8ec772
palette = 11=#d9ba73 palette = 11=#d9ba73
palette = 12=#7b9ef0 palette = 12=#7b9ef0
palette = 13=#f2a4db palette = 13=#f2a4db
palette = 14=#5abfb5 palette = 14=#5abfb5
palette = 15=#b5bfe2 palette = 15=#b5bfe2
keybind = all:ctrl+shift+period=text:\x1b\x1f\x4c\x23\x1f keybind = all:ctrl+shift+period=text:\x1b\x1f\x4c\x23\x1f
''; '';
}; };
} }

View file

@ -25,116 +25,109 @@
darwin = { darwin = {
enable = mkEnableOption "Enable Darwin-only GUI"; enable = mkEnableOption "Enable Darwin-only GUI";
}; };
}; vscode = {
enable = mkEnableOption "Enable VSCode";
config = lib.mkIf config.custom.gui.default.enable {
dconf.settings = {
"org/gnome/desktop/interface" = {
color-scheme = "prefer-dark";
show-battery-percentage = true;
clock-format = "12h";
};
}; };
firefox = {
programs.vscode = { enable = mkEnableOption "Enable Firefox";
enable = true;
package = pkgs.vscode;
profiles.default = {
extensions = with pkgs.vscode-extensions; [
bbenoist.nix
ms-python.python
ms-vscode-remote.remote-ssh
] ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [
{
name = "remote-ssh-edit";
publisher = "ms-vscode-remote";
version = "0.87.0";
sha256 = "sha256-yeX6RAJl07d+SuYyGQFLZNcUzVKAsmPFyTKEn+y3GuM=";
}
];
};
};
programs.firefox = {
enable = true;
# package = lib.mkIf custom.gui.darwin.enable pkgs.firefox-bin or pkgs.firefox;
package = if config.custom.gui.darwin.enable then pkgs.firefox-bin else pkgs.firefox;
};
home.sessionVariables = lib.mkIf config.custom.gui.darwin.enable {
MOZ_LEGACY_PROFILES = "1";
};
# launchd.user.envVariables = lib.mkIf config.custom.gui.darwin.enable {
# MOZ_LEGACY_PROFILES = "1";
# };
home.packages = with pkgs; [
# globalprotect-openconnect
# firefox
# fonts
custom.sf-mono
custom.sf-symbols
ultimate-oldschool-pc-font-pack
vista-fonts
nerd-fonts.ubuntu-mono
nerd-fonts.iosevka
nerd-fonts.fira-code
nerd-fonts.sauce-code-pro
nerd-fonts.inconsolata
nerd-fonts.inconsolata-go
nerd-fonts.droid-sans-mono
nerd-fonts.space-mono
nerd-fonts.dejavu-sans-mono
]
++ lib.optionals config.custom.gui.darwin.enable [
raycast
custom.whatsapp-for-mac
]
++ lib.optionals config.custom.gui.linux.enable [
zotero
zoom-us
spotify
slack
webex
whatsapp-for-linux
teams-for-linux
skypeforlinux
inputs.zen-browser.packages."${system}".twilight
chromium
arandr
seahorse # gnome keyring
xfce.thunar
xfce.thunar-volman
xclip
quickemu
gf # debugger
];
gtk = {
enable = true;
theme = {
name = "Adwaita-dark";
package = pkgs.gnome-themes-extra;
};
};
qt = {
enable = config.custom.gui.linux.enable;
platformTheme.name = "adwaita";
style.name = "adwaita-dark";
};
services.redshift = {
enable = config.custom.gui.linux.enable;
# provider = "geoclue2";
provider = "manual";
# madison
latitude = "43.07305000";
longitude = "-89.40123000";
# chicago
# latitude = "41.85003000";
# longitude = "-87.65005000";
}; };
}; };
config = lib.mkMerge [
{
home.packages = with pkgs; [
# globalprotect-openconnect
# firefox
# fonts
custom.sf-mono
custom.sf-symbols
ultimate-oldschool-pc-font-pack
vista-fonts
nerd-fonts.ubuntu-mono
nerd-fonts.iosevka
nerd-fonts.fira-code
nerd-fonts.sauce-code-pro
nerd-fonts.inconsolata
nerd-fonts.inconsolata-go
nerd-fonts.droid-sans-mono
nerd-fonts.space-mono
nerd-fonts.dejavu-sans-mono
];
}
(lib.mkIf config.custom.gui.default.enable {
dconf.settings = {
"org/gnome/desktop/interface" = {
color-scheme = "prefer-dark";
show-battery-percentage = true;
clock-format = "12h";
};
};
})
(lib.mkIf config.custom.gui.vscode.enable {
programs.vscode = {
enable = true;
package = pkgs.vscode;
profiles.default = {
extensions =
with pkgs.vscode-extensions;
[
bbenoist.nix
ms-python.python
ms-vscode-remote.remote-ssh
]
++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [
{
name = "remote-ssh-edit";
publisher = "ms-vscode-remote";
version = "0.87.0";
sha256 = "sha256-yeX6RAJl07d+SuYyGQFLZNcUzVKAsmPFyTKEn+y3GuM=";
}
];
};
};
})
(lib.mkIf config.custom.gui.firefox.enable {
programs.firefox = {
enable = true;
# package = lib.mkIf custom.gui.darwin.enable pkgs.firefox-bin or pkgs.firefox;
package = if config.custom.gui.darwin.enable then pkgs.firefox-bin else pkgs.firefox;
};
home.sessionVariables = lib.mkIf config.custom.gui.darwin.enable {
MOZ_LEGACY_PROFILES = "1";
};
})
(lib.mkIf config.custom.gui.darwin.enable {
home.packages = with pkgs; [
raycast
custom.whatsapp-for-mac
];
})
(lib.mkIf config.custom.gui.linux.enable {
home.packages = with pkgs; [
zotero
zoom-us
spotify
slack
webex
whatsapp-for-linux
teams-for-linux
skypeforlinux
inputs.zen-browser.packages."${system}".twilight
chromium
arandr
seahorse # gnome keyring
xfce.thunar
xfce.thunar-volman
xclip
quickemu
gf # debugger
];
})
];
} }

View file

@ -32,18 +32,18 @@
enable = true; enable = true;
scriptPath = ".xsession-hm"; scriptPath = ".xsession-hm";
initExtra = '' initExtra = ''
# export GDK_SCALE=2 # export GDK_SCALE=2
# export GDK_DPI_SCALE=0.5 # export GDK_DPI_SCALE=0.5
export _JAVA_OPTIONS="-Dsun.java2d.uiScale=2" export _JAVA_OPTIONS="-Dsun.java2d.uiScale=2"
export QT_AUTO_SCREEN_SCALE_FACTOR=1 export QT_AUTO_SCREEN_SCALE_FACTOR=1
export QT_DEVICE_PIXEL_RATIO=2 export QT_DEVICE_PIXEL_RATIO=2
# export XCURSOR_SIZE=128 # export XCURSOR_SIZE=128
# ${pkgs.xorg.xsetroot}/bin/xsetroot -cursor_name ${pkgs.vanilla-dmz}/share/icons/Vanilla-DMZ/cursors/left_ptr 128 &disown # ${pkgs.xorg.xsetroot}/bin/xsetroot -cursor_name ${pkgs.vanilla-dmz}/share/icons/Vanilla-DMZ/cursors/left_ptr 128 &disown
if test -e $HOME/.Xresources; then if test -e $HOME/.Xresources; then
${pkgs.xorg.xrdb}/bin/xrdb -merge $HOME/.Xresources &disown ${pkgs.xorg.xrdb}/bin/xrdb -merge $HOME/.Xresources &disown
fi fi
echo "Xft.dpi: 192" | ${pkgs.xorg.xrdb}/bin/xrdb -merge echo "Xft.dpi: 192" | ${pkgs.xorg.xrdb}/bin/xrdb -merge
''; '';
windowManager.i3 = windowManager.i3 =
let let
modifier = "Mod4"; modifier = "Mod4";
@ -84,125 +84,132 @@
# ''; # '';
# }; # };
in in
{ {
enable = true; enable = true;
config = { config = {
inherit modifier terminal; inherit modifier terminal;
keybindings = lib.mkOptionDefault { keybindings = lib.mkOptionDefault {
"${modifier}+h" = "focus left"; "${modifier}+h" = "focus left";
"${modifier}+j" = "focus down"; "${modifier}+j" = "focus down";
"${modifier}+k" = "focus up"; "${modifier}+k" = "focus up";
"${modifier}+l" = "focus right"; "${modifier}+l" = "focus right";
"${modifier}+Shift+h" = "move left"; "${modifier}+Shift+h" = "move left";
"${modifier}+Shift+j" = "move down"; "${modifier}+Shift+j" = "move down";
"${modifier}+Shift+k" = "move up"; "${modifier}+Shift+k" = "move up";
"${modifier}+Shift+l" = "move right"; "${modifier}+Shift+l" = "move right";
"${modifier}+v" = "split h"; "${modifier}+v" = "split h";
"${modifier}+Shift+v" = "split v"; "${modifier}+Shift+v" = "split v";
"${modifier}+s" = "layout stacking"; "${modifier}+s" = "layout stacking";
"${modifier}+t" = "layout tabbed"; "${modifier}+t" = "layout tabbed";
"${modifier}+e" = "layout toggle split"; "${modifier}+e" = "layout toggle split";
"${modifier}+p" = "floating toggle"; "${modifier}+p" = "floating toggle";
"${modifier}+Shift+p" = "focus mode_toggle"; "${modifier}+Shift+p" = "focus mode_toggle";
"${modifier}+Shift+c" = "reload"; "${modifier}+Shift+c" = "reload";
"${modifier}+Shift+r" = "restart"; "${modifier}+Shift+r" = "restart";
# mode # mode
"${modifier}+r" = ''mode "${resizeMode}"''; "${modifier}+r" = ''mode "${resizeMode}"'';
"${modifier}+Escape" = ''mode "${powerManagementMode}"''; "${modifier}+Escape" = ''mode "${powerManagementMode}"'';
"${modifier}+Shift+Escape" = ''mode "${miscellaneousMode}"''; "${modifier}+Shift+Escape" = ''mode "${miscellaneousMode}"'';
# workspace # workspace
# "${modifier}+Shift+minus" = "move scratchpad"; # "${modifier}+Shift+minus" = "move scratchpad";
# "${modifier}+minus" = "scratchpad show"; # "${modifier}+minus" = "scratchpad show";
# media # media
"XF86AudioRaiseVolume" = "exec --no-startup-id ${pactl} set-sink-volume @DEFAULT_SINK@ +1% && ${refresh_i3status}"; "XF86AudioRaiseVolume" =
"XF86AudioLowerVolume" = "exec --no-startup-id ${pactl} set-sink-volume @DEFAULT_SINK@ -1% && ${refresh_i3status}"; "exec --no-startup-id ${pactl} set-sink-volume @DEFAULT_SINK@ +1% && ${refresh_i3status}";
"XF86AudioMute" = "exec --no-startup-id ${pactl} set-sink-mute @DEFAULT_SINK@ toggle && ${refresh_i3status}"; "XF86AudioLowerVolume" =
"XF86AudioMicMute" = "exec --no-startup-id ${pactl} set-source-mute @DEFAULT_SOURCE@ toggle && ${refresh_i3status}"; "exec --no-startup-id ${pactl} set-sink-volume @DEFAULT_SINK@ -1% && ${refresh_i3status}";
"XF86AudioPlay" = "exec --no-startup-id ${playerctl} play-pause"; "XF86AudioMute" =
"XF86AudioPause" = "exec --no-startup-id ${playerctl} play-pause"; "exec --no-startup-id ${pactl} set-sink-mute @DEFAULT_SINK@ toggle && ${refresh_i3status}";
"XF86AudioNext" = "exec --no-startup-id ${playerctl} next"; "XF86AudioMicMute" =
"XF86AudioPrev" = "exec --no-startup-id ${playerctl} previous"; "exec --no-startup-id ${pactl} set-source-mute @DEFAULT_SOURCE@ toggle && ${refresh_i3status}";
# brightness "XF86AudioPlay" = "exec --no-startup-id ${playerctl} play-pause";
"XF86MonBrightnessUp" = "exec --no-startup-id ${light} s +10%"; "XF86AudioPause" = "exec --no-startup-id ${playerctl} play-pause";
"XF86MonBrightnessDown" = "exec --no-startup-id ${light} s 10%-"; "XF86AudioNext" = "exec --no-startup-id ${playerctl} next";
# screenshot "XF86AudioPrev" = "exec --no-startup-id ${playerctl} previous";
"${modifier}+o" = "exec --no-startup-id ${maim} -s ~/Pictures/screenshots/$(date +%Y-%m-%d-%H-%M-%S).png"; # brightness
"${modifier}+Shift+o" = "exec --no-startup-id ${maim} -s | ${clipboard} -selection clipboard -t image/png"; "XF86MonBrightnessUp" = "exec --no-startup-id ${light} s +10%";
# others "XF86MonBrightnessDown" = "exec --no-startup-id ${light} s 10%-";
"${modifier}+space" = "exec --no-startup-id ${dmenu}"; # screenshot
"${modifier}+b" = "exec --no-startup-id ${terminal} -e ${yazi}"; "${modifier}+o" =
"${modifier}+z" = "exec --no-startup-id ${boomer}"; # tsoding's zoom "exec --no-startup-id ${maim} -s ~/Pictures/screenshots/$(date +%Y-%m-%d-%H-%M-%S).png";
# "${modifier}+Shift+Return" = "exec ${second_terminal}"; "${modifier}+Shift+o" =
# reset "exec --no-startup-id ${maim} -s | ${clipboard} -selection clipboard -t image/png";
"${modifier}+Shift+e" = null; # others
"${modifier}+w" = null; "${modifier}+space" = "exec --no-startup-id ${dmenu}";
"${modifier}+d" = null; "${modifier}+b" = "exec --no-startup-id ${terminal} -e ${yazi}";
}; "${modifier}+z" = "exec --no-startup-id ${boomer}"; # tsoding's zoom
modes = let # "${modifier}+Shift+Return" = "exec ${second_terminal}";
# reset
"${modifier}+Shift+e" = null;
"${modifier}+w" = null;
"${modifier}+d" = null;
};
modes =
let
exitMode = { exitMode = {
"Escape" = "mode default"; "Escape" = "mode default";
"Return" = "mode default"; "Return" = "mode default";
}; };
in in
{ {
"${resizeMode}" = { "${resizeMode}" = {
"Left" = "resize shrink width 10 px or 10 ppt"; "Left" = "resize shrink width 10 px or 10 ppt";
"Down" = "resize grow height 10 px or 10 ppt"; "Down" = "resize grow height 10 px or 10 ppt";
"Up" = "resize shrink height 10 px or 10 ppt"; "Up" = "resize shrink height 10 px or 10 ppt";
"Right" = "resize grow width 10 px or 10 ppt"; "Right" = "resize grow width 10 px or 10 ppt";
"Escape" = "mode default"; "Escape" = "mode default";
"Return" = "mode default"; "Return" = "mode default";
} // exitMode; } // exitMode;
"${powerManagementMode}" = { "${powerManagementMode}" = {
l = "mode default, exec loginctl lock-session"; l = "mode default, exec loginctl lock-session";
e = "mode default, exec loginctl terminate-session $XDG_SESSION_ID"; e = "mode default, exec loginctl terminate-session $XDG_SESSION_ID";
s = "mode default, exec systemctl suspend"; s = "mode default, exec systemctl suspend";
h = "mode default, exec systemctl hibernate"; h = "mode default, exec systemctl hibernate";
"Shift+r" = "mode default, exec systemctl reboot"; "Shift+r" = "mode default, exec systemctl reboot";
"Shift+s" = "mode default, exec systemctl poweroff"; "Shift+s" = "mode default, exec systemctl poweroff";
} // exitMode; } // exitMode;
"${miscellaneousMode}" = { "${miscellaneousMode}" = {
p = "mode default, exec kill -SIGUSR1 $(pidof dunst)"; p = "mode default, exec kill -SIGUSR1 $(pidof dunst)";
c = "mode default, exec kill -SIGUSR2 $(pidof dunst"; c = "mode default, exec kill -SIGUSR2 $(pidof dunst";
} // exitMode; } // exitMode;
}; };
startup = [ startup = [
{ {
command = "${pkgs.hsetroot}/bin/hsetroot -solid \"#062329\""; command = "${pkgs.hsetroot}/bin/hsetroot -solid \"#062329\"";
notification = false; notification = false;
} }
{ {
command = "${pkgs.dex}/bin/dex --autostart --environment i3"; command = "${pkgs.dex}/bin/dex --autostart --environment i3";
notification = false; notification = false;
} }
{ {
command = "${pkgs.networkmanagerapplet}/bin/nm-applet"; command = "${pkgs.networkmanagerapplet}/bin/nm-applet";
notification = false; notification = false;
} }
{ {
command = "${pkgs.pasystray}/bin/pasystray"; command = "${pkgs.pasystray}/bin/pasystray";
notification = false; notification = false;
} }
{ {
command = "${pkgs.xss-lock}/bin/xss-lock --transfer-sleep-lock -- i3lock --nofork"; command = "${pkgs.xss-lock}/bin/xss-lock --transfer-sleep-lock -- i3lock --nofork";
notification = false; notification = false;
} }
{ {
command = "${pkgs.autorandr}/bin/autorandr -c"; command = "${pkgs.autorandr}/bin/autorandr -c";
always = false; # Important, run only on first start (will loop otherwise)! always = false; # Important, run only on first start (will loop otherwise)!
notification = false; notification = false;
} }
{ {
command = "${pkgs.xfce.xfce4-volumed-pulse}/bin/xfce4-volumed-pulse &"; command = "${pkgs.xfce.xfce4-volumed-pulse}/bin/xfce4-volumed-pulse &";
always = false; always = false;
notification = false; notification = false;
} }
{ {
command = "${light} s 25%"; command = "${light} s 25%";
} }
]; ];
};
}; };
};
}; };
}; };
} }

View file

@ -23,33 +23,33 @@
enableBashIntegration = true; enableBashIntegration = true;
}; };
extraConfig = '' extraConfig = ''
modify_font cell_height 1.1 modify_font cell_height 1.1
# modify_font cell_width 95% # modify_font cell_width 95%
text_composition_strategy legacy text_composition_strategy legacy
background #062329 background #062329
foreground #d1b897 foreground #d1b897
cursor-color #ffffff cursor-color #ffffff
cursor-text #d1b897 cursor-text #d1b897
selection_background #0000ff selection_background #0000ff
selection_foreground #d1b897 selection_foreground #d1b897
color0 #062329 color0 #062329
# color1 #0b3335 # color1 #0b3335
# color2 #0000ff # color2 #0000ff
color3 #44b340 color3 #44b340
color4 #8cde94 color4 #8cde94
color5 #d1b897 color5 #d1b897
color6 #c1d1e3 color6 #c1d1e3
color7 #ffffff color7 #ffffff
color8 #626880 color8 #626880
color9 #e67172 color9 #e67172
color10 #8ec772 color10 #8ec772
color11 #d9ba73 color11 #d9ba73
color12 #7b9ef0 color12 #7b9ef0
color13 #f2a4db color13 #f2a4db
color14 #5abfb5 color14 #5abfb5
color15 #b5bfe2 color15 #b5bfe2
''; '';
keybindings = { keybindings = {
# "CTRL+GRAVE_ACCENT" = "send_text all \x1b\x1f\x2a\x62\x1f"; # "CTRL+GRAVE_ACCENT" = "send_text all \x1b\x1f\x2a\x62\x1f";
# "SHIFT+CTRL+GRAVE_ACCENT" = "send_text all \x1b\x1f\x2a\x63\x1f"; # "SHIFT+CTRL+GRAVE_ACCENT" = "send_text all \x1b\x1f\x2a\x63\x1f";

View file

@ -9,7 +9,8 @@
hm, hm,
host, host,
... ...
}: { }:
{
imports = [ imports = [
]; ];
@ -17,14 +18,22 @@
nix.enable = false; nix.enable = false;
users.users = { users.users.${user} = {
${user} = { home = "/Users/${user}";
home = "/Users/${user}";
};
}; };
custom = { custom = {
aerospace.enable = true; aerospace.enable = true;
brew = {
zen-browser = true;
webex = true;
slack = true;
zoom = true;
spotify = true;
ghostty = true;
ms-office = true;
ms-teams = true;
};
}; };
hm.custom = { hm.custom = {
@ -34,6 +43,8 @@
default.enable = true; default.enable = true;
darwin.enable = true; darwin.enable = true;
ghostty.enable = true; ghostty.enable = true;
firefox.enable = true;
vscode.enable = true;
}; };
}; };
} }

View file

@ -12,36 +12,38 @@ let
pkgs = import inputs.nixpkgs { pkgs = import inputs.nixpkgs {
inherit system; inherit system;
config.allowUnfree = true; config.allowUnfree = true;
overlays = [ overlays = [
(import ../overlays { (import ../overlays {
inherit inputs; inherit inputs;
inherit (pkgs) system; inherit (pkgs) system;
}) })
]; ];
}; };
lib = ( lib = (
import ../lib.nix { import ../lib.nix {
inherit (inputs.nixpkgs) lib; inherit (inputs.nixpkgs) lib;
inherit pkgs; inherit pkgs;
inherit (inputs) home-manager; inherit (inputs) home-manager;
} }
); );
in in
lib.nixosSystem { lib.nixosSystem {
inherit pkgs lib; inherit pkgs lib;
specialArgs = specialArgs // { specialArgs = specialArgs // {
inherit host user; inherit host user;
dots = "/home/${user}/dotfiles"; dots = "/home/${user}/dotfiles";
}; };
modules = [ modules = [
inputs.disko.nixosModules.default inputs.disko.nixosModules.default
./${host} ./${host}
./${host}/hardware.nix ./${host}/hardware.nix
../nixos ../nixos
../overlays ../overlays
({config, ...}: { (
{ config, ... }:
{
home-manager = { home-manager = {
useGlobalPkgs = true; useGlobalPkgs = true;
useUserPackages = true; useUserPackages = true;
@ -49,7 +51,7 @@ let
extraSpecialArgs = specialArgs // { extraSpecialArgs = specialArgs // {
inherit host user system; inherit host user system;
system-font = "Consolas"; system-font = "Consolas";
dots = "/home/${user}/dotfiles"; dots = "/home/${user}/dotfiles";
home-dir = config.home-manager.users.${user}.home.homeDirectory; home-dir = config.home-manager.users.${user}.home.homeDirectory;
}; };
@ -58,20 +60,24 @@ let
inputs.nix-index-database.hmModules.nix-index inputs.nix-index-database.hmModules.nix-index
inputs.sops-nix.homeManagerModules.sops inputs.sops-nix.homeManagerModules.sops
../home ../home
] ++ lib.optional(builtins.pathExists ./${host}/home.nix) ./${host}/home.nix; ] ++ lib.optional (builtins.pathExists ./${host}/home.nix) ./${host}/home.nix;
}; };
}; };
}) }
# alias for home-manager )
(lib.mkAliasOptionModule [ "hm" ] [ # alias for home-manager
(lib.mkAliasOptionModule
[ "hm" ]
[
"home-manager" "home-manager"
"users" "users"
user user
]) ]
inputs.home-manager.nixosModules.home-manager )
inputs.sops-nix.nixosModules.sops inputs.home-manager.nixosModules.home-manager
]; inputs.sops-nix.nixosModules.sops
}; ];
};
mkDarwinConfiguration = mkDarwinConfiguration =
host: system: host: system:
@ -79,34 +85,36 @@ let
pkgs = import inputs.nixpkgs { pkgs = import inputs.nixpkgs {
inherit system; inherit system;
config.allowUnfree = true; config.allowUnfree = true;
overlays = [ overlays = [
(import ../overlays { (import ../overlays {
inherit inputs; inherit inputs;
inherit (pkgs) system; inherit (pkgs) system;
}) })
inputs.nixpkgs-firefox-darwin.overlay inputs.nixpkgs-firefox-darwin.overlay
]; ];
}; };
lib = ( lib = (
import ../lib.nix { import ../lib.nix {
inherit (inputs.nixpkgs) lib; inherit (inputs.nixpkgs) lib;
inherit pkgs; inherit pkgs;
inherit (inputs) home-manager; inherit (inputs) home-manager;
} }
); );
in in
inputs.nix-darwin.lib.darwinSystem { inputs.nix-darwin.lib.darwinSystem {
inherit pkgs lib; inherit pkgs lib;
specialArgs = specialArgs // { specialArgs = specialArgs // {
inherit host user; inherit host user;
dots = "/Users/${user}/dotfiles"; dots = "/Users/${user}/dotfiles";
}; };
modules = [ modules = [
./${host} ./${host}
../darwin ../darwin
({config, ...}: { (
{ config, ... }:
{
home-manager = { home-manager = {
useGlobalPkgs = true; useGlobalPkgs = true;
useUserPackages = true; useUserPackages = true;
@ -115,35 +123,39 @@ let
inherit host user system; inherit host user system;
system-font = "SF Mono"; system-font = "SF Mono";
home-dir = config.home-manager.users.${user}.home.homeDirectory; home-dir = config.home-manager.users.${user}.home.homeDirectory;
dots = "/Users/${user}/dotfiles"; dots = "/Users/${user}/dotfiles";
}; };
users.${user} = { users.${user} = {
imports = [ imports = [
inputs.nix-index-database.hmModules.nix-index inputs.nix-index-database.hmModules.nix-index
inputs.sops-nix.homeManagerModules.sops inputs.sops-nix.homeManagerModules.sops
inputs.mac-app-util.homeManagerModules.default inputs.mac-app-util.homeManagerModules.default
../home ../home
] ++ lib.optional(builtins.pathExists ./${host}/home.nix) ./${host}/home.nix; ] ++ lib.optional (builtins.pathExists ./${host}/home.nix) ./${host}/home.nix;
}; };
}; };
}) }
# alias for home-manager )
(lib.mkAliasOptionModule [ "hm" ] [ # alias for home-manager
(lib.mkAliasOptionModule
[ "hm" ]
[
"home-manager" "home-manager"
"users" "users"
user user
]) ]
inputs.home-manager.darwinModules.home-manager )
inputs.mac-app-util.darwinModules.default inputs.home-manager.darwinModules.home-manager
inputs.nix-homebrew.darwinModules.nix-homebrew inputs.mac-app-util.darwinModules.default
]; inputs.nix-homebrew.darwinModules.nix-homebrew
}; ];
};
in in
{ {
nixosConfigurations = { nixosConfigurations = {
pickwick = mkNixosConfiguration "pickwick" "x86_64-linux"; pickwick = mkNixosConfiguration "pickwick" "x86_64-linux";
lemur = mkNixosConfiguration "lemur" "x86_64-linux"; lemur = mkNixosConfiguration "lemur" "x86_64-linux";
}; };
darwinConfigurations = { darwinConfigurations = {
dango = mkDarwinConfiguration "dango" "aarch64-darwin"; dango = mkDarwinConfiguration "dango" "aarch64-darwin";

View file

@ -9,7 +9,8 @@
hm, hm,
host, host,
... ...
}: { }:
{
imports = [ imports = [
./hardware.nix ./hardware.nix
]; ];
@ -37,8 +38,13 @@
${user} = { ${user} = {
initialPassword = "abc123"; initialPassword = "abc123";
isNormalUser = true; isNormalUser = true;
openssh.authorizedKeys.keys = []; openssh.authorizedKeys.keys = [ ];
extraGroups = ["wheel" "video" "audio" "networkmanager"]; extraGroups = [
"wheel"
"video"
"audio"
"networkmanager"
];
}; };
}; };

View file

@ -21,8 +21,8 @@
format = "vfat"; format = "vfat";
mountpoint = "/boot"; mountpoint = "/boot";
mountOptions = [ mountOptions = [
"defaults" "defaults"
"umask=0077" "umask=0077"
]; ];
extraArgs = [ extraArgs = [
"-n" "-n"

View file

@ -1,14 +1,27 @@
{ config, lib, pkgs, modulesPath, inputs, ... }: {
config,
lib,
pkgs,
modulesPath,
inputs,
...
}:
{ {
boot.loader.systemd-boot.enable = true; boot.loader.systemd-boot.enable = true;
imports = imports = [
[ (modulesPath + "/installer/scan/not-detected.nix") (modulesPath + "/installer/scan/not-detected.nix")
./disko.nix ./disko.nix
inputs.nixos-hardware.nixosModules.system76 inputs.nixos-hardware.nixosModules.system76
]; ];
boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "usbhid" "sd_mod" "sdhci_pci" ]; boot.initrd.availableKernelModules = [
"nvme"
"xhci_pci"
"usbhid"
"sd_mod"
"sdhci_pci"
];
boot.initrd.kernelModules = [ ]; boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ]; boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ]; boot.extraModulePackages = [ ];

View file

@ -9,7 +9,8 @@
hm, hm,
host, host,
... ...
}: { }:
{
imports = [ imports = [
./hardware.nix ./hardware.nix
]; ];
@ -18,9 +19,9 @@
keyd = { keyd = {
enable = true; enable = true;
ids = [ ids = [
"0001:0001:70533846" # framework "0001:0001:70533846" # framework
"3434:06a0:d7dfbeabt" # keychron q10 "3434:06a0:d7dfbeabt" # keychron q10
"046d:c339:9f276ca6" # Logitech Pro "046d:c339:9f276ca6" # Logitech Pro
]; ];
}; };
displaymanager.enable = true; displaymanager.enable = true;
@ -38,8 +39,13 @@
${user} = { ${user} = {
initialPassword = "abc123"; initialPassword = "abc123";
isNormalUser = true; isNormalUser = true;
openssh.authorizedKeys.keys = []; openssh.authorizedKeys.keys = [ ];
extraGroups = ["wheel" "video" "audio" "networkmanager"]; extraGroups = [
"wheel"
"video"
"audio"
"networkmanager"
];
}; };
}; };

View file

@ -21,8 +21,8 @@
format = "vfat"; format = "vfat";
mountpoint = "/boot"; mountpoint = "/boot";
mountOptions = [ mountOptions = [
"defaults" "defaults"
"umask=0077" "umask=0077"
]; ];
extraArgs = [ extraArgs = [
"-n" "-n"

View file

@ -1,14 +1,28 @@
{ config, lib, pkgs, modulesPath, inputs, ... }: {
config,
lib,
pkgs,
modulesPath,
inputs,
...
}:
{ {
boot.loader.systemd-boot.enable = true; boot.loader.systemd-boot.enable = true;
imports = imports = [
[ (modulesPath + "/installer/scan/not-detected.nix") (modulesPath + "/installer/scan/not-detected.nix")
./disko.nix ./disko.nix
inputs.nixos-hardware.nixosModules.framework-13-7040-amd inputs.nixos-hardware.nixosModules.framework-13-7040-amd
]; ];
boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "thunderbolt" "usb_storage" "usbhid" "sd_mod" ]; boot.initrd.availableKernelModules = [
"nvme"
"xhci_pci"
"thunderbolt"
"usb_storage"
"usbhid"
"sd_mod"
];
boot.initrd.kernelModules = [ ]; boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ]; boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ]; boot.extraModulePackages = [ ];

View file

@ -21,12 +21,12 @@
environment.etc = { environment.etc = {
"1password/custom_allowed_browsers" = { "1password/custom_allowed_browsers" = {
text = '' text = ''
zen zen
zen-twilight zen-twilight
.zen-wrapped .zen-wrapped
.firefox-wrapped .firefox-wrapped
firefox firefox
''; '';
mode = "0755"; mode = "0755";
}; };
}; };

View file

@ -50,5 +50,5 @@
}; };
}; };
}; };
}; };
} }

View file

@ -6,7 +6,8 @@
system, system,
host, host,
... ...
}: { }:
{
imports = [ imports = [
./1password.nix ./1password.nix
./audio.nix ./audio.nix
@ -84,10 +85,13 @@
}; };
}; };
environment.systemPackages = with pkgs; [ environment.systemPackages =
vim with pkgs;
htop [
] ++ (lib.attrValues config.custom.shell.packages); vim
htop
]
++ (lib.attrValues config.custom.shell.packages);
system.stateVersion = "25.05"; system.stateVersion = "25.05";
}; };

View file

@ -5,49 +5,49 @@
... ...
}: }:
{ {
options.custom = with lib; { options.custom = with lib; {
displaymanager = { displaymanager = {
enable = mkEnableOption "Enable displaymanager"; enable = mkEnableOption "Enable displaymanager";
}; };
}; };
config = lib.mkIf config.custom.displaymanager.enable { config = lib.mkIf config.custom.displaymanager.enable {
services = { services = {
xserver = { xserver = {
enable = true;
desktopManager = {
xterm.enable = false;
};
displayManager = {
lightdm = {
enable = true;
greeters.enso = {
enable = true;
};
};
session = [
{
manage = "window";
name = "hm";
start = ''
export CURRENT_XSESSION="hm"
${pkgs.stdenv.shell} $HOME/.xsession-hm &
waitPID=$!
'';
}
];
};
windowManager.i3 = {
enable = true; enable = true;
extraPackages = with pkgs; [ desktopManager = {
dmenu xterm.enable = false;
i3status };
i3lock displayManager = {
]; lightdm = {
enable = true;
greeters.enso = {
enable = true;
};
};
session = [
{
manage = "window";
name = "hm";
start = ''
export CURRENT_XSESSION="hm"
${pkgs.stdenv.shell} $HOME/.xsession-hm &
waitPID=$!
'';
}
];
};
windowManager.i3 = {
enable = true;
extraPackages = with pkgs; [
dmenu
i3status
i3lock
];
};
}; };
xserver.xkb.layout = "us";
gnome.gnome-keyring.enable = true;
}; };
xserver.xkb.layout = "us";
gnome.gnome-keyring.enable = true;
}; };
};
} }

View file

@ -21,56 +21,57 @@
}; };
}; };
config = lib.mkIf config.custom.keyd.enable { config = lib.mkIf config.custom.keyd.enable {
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
keyd keyd
]; ];
users.groups.keyd = { }; users.groups.keyd = { };
services.keyd = let services.keyd =
commonSettings = { let
main = { commonSettings = {
capslock = "layer(capslock)"; main = {
insert = "S-insert"; capslock = "layer(capslock)";
insert = "S-insert";
};
meta = {
w = "macro(C-w)";
a = "macro(C-a)";
};
"capslock:C" = { };
}; };
meta = { in
w = "macro(C-w)"; {
a = "macro(C-a)"; enable = true;
}; keyboards = {
"capslock:C" = { }; default = {
}; ids = [ "*" ];
in { settings = commonSettings;
enable = true; };
keyboards = { workstation = {
default = { ids = config.custom.keyd.ids;
ids = [ "*" ]; settings = lib.mkMerge [
settings = commonSettings; commonSettings
}; {
workstation = { main = {
ids = config.custom.keyd.ids; leftalt = "layer(meta)";
settings = lib.mkMerge [ leftmeta = "layer(alt)";
commonSettings };
{ }
main = { ];
leftalt = "layer(meta)"; };
leftmeta = "layer(alt)";
};
}
];
}; };
}; };
};
systemd.services.keyd.serviceConfig.CapabilityBoundingSet = [ systemd.services.keyd.serviceConfig.CapabilityBoundingSet = [
"CAP_SETGID" "CAP_SETGID"
]; ];
environment.etc."libinput/local-overrides.quirks".text = '' environment.etc."libinput/local-overrides.quirks".text = ''
[Serial Keyboards] [Serial Keyboards]
MatchUdevType=keyboard MatchUdevType=keyboard
MatchName=keyd virtual keyboard MatchName=keyd virtual keyboard
AttrKeyboardIntegration=internal AttrKeyboardIntegration=internal
''; '';
}; };
} }

View file

@ -58,7 +58,7 @@
inherit nixPath; inherit nixPath;
channel.enable = false; channel.enable = false;
# required for nix-shell -p to work # required for nix-shell -p to work
registry = lib.mapAttrs (_: flake: {inherit flake;}) flakeInputs; registry = lib.mapAttrs (_: flake: { inherit flake; }) flakeInputs;
# gc = { # gc = {
# # Automatic garbage collection # # Automatic garbage collection
# automatic = true; # automatic = true;

View file

@ -1,21 +1,22 @@
{ {
inputs, inputs,
... ...
}: _: prev: { }:
# include nixpkgs stable _: prev: {
stable = import inputs.nixpkgs-stable { # include nixpkgs stable
inherit (prev.pkgs) system; stable = import inputs.nixpkgs-stable {
config.allowUnfree = true; inherit (prev.pkgs) system;
}; config.allowUnfree = true;
};
# include custom packages # include custom packages
custom = custom =
(prev.custom or { }) (prev.custom or { })
// (import ../packages { // (import ../packages {
inherit (prev) pkgs; inherit (prev) pkgs;
inherit inputs; inherit inputs;
}); });
# use nixfmt-rfc-style as the default # use nixfmt-rfc-style as the default
nixfmt = prev.nixfmt-rfc-style; nixfmt = prev.nixfmt-rfc-style;
} }

View file

@ -1,4 +1,13 @@
{ lib, stdenv, fetchFromGitHub, nim, libX11, libXrandr, libGL, nim-1_0 }: {
lib,
stdenv,
fetchFromGitHub,
nim,
libX11,
libXrandr,
libGL,
nim-1_0,
}:
let let
x11-nim = fetchFromGitHub { x11-nim = fetchFromGitHub {
@ -13,7 +22,8 @@ let
rev = "8e2e098f82dc5eefd874488c37b5830233cd18f4"; rev = "8e2e098f82dc5eefd874488c37b5830233cd18f4";
sha256 = "sha256-v3bMDobYQZqX0anBFIUfZx5q5/vxTHO6PDtKQlf5mgU="; sha256 = "sha256-v3bMDobYQZqX0anBFIUfZx5q5/vxTHO6PDtKQlf5mgU=";
}; };
in stdenv.mkDerivation rec { in
stdenv.mkDerivation rec {
pname = "boomer"; pname = "boomer";
version = "unstable-2024-02-08"; version = "unstable-2024-02-08";
src = fetchFromGitHub { src = fetchFromGitHub {
@ -22,11 +32,23 @@ in stdenv.mkDerivation rec {
rev = "dfd4e1f5514e2a9d7c7a6429c1c0642c2021e792"; rev = "dfd4e1f5514e2a9d7c7a6429c1c0642c2021e792";
sha256 = "sha256-o65/VVxttriA5Qqt35lLKkWIZYS7T4VBBuYdAIGUmx8="; sha256 = "sha256-o65/VVxttriA5Qqt35lLKkWIZYS7T4VBBuYdAIGUmx8=";
}; };
buildInputs = [ nim-1_0 libX11 libXrandr libGL ]; buildInputs = [
nim-1_0
libX11
libXrandr
libGL
];
buildPhase = '' buildPhase = ''
HOME=$TMPDIR HOME=$TMPDIR
nim -p:${x11-nim}/ -p:${opengl-nim}/src c -d:release src/boomer.nim nim -p:${x11-nim}/ -p:${opengl-nim}/src c -d:release src/boomer.nim
''; '';
installPhase = "install -Dt $out/bin src/boomer"; installPhase = "install -Dt $out/bin src/boomer";
fixupPhase = "patchelf --set-rpath ${lib.makeLibraryPath [stdenv.cc.cc libX11 libXrandr libGL]} $out/bin/boomer"; fixupPhase = "patchelf --set-rpath ${
lib.makeLibraryPath [
stdenv.cc.cc
libX11
libXrandr
libGL
]
} $out/bin/boomer";
} }

View file

@ -5,7 +5,8 @@
}: }:
let let
inherit (pkgs) lib callPackage; inherit (pkgs) lib callPackage;
in rec { in
rec {
minimal-emacs-d = callPackage ./minimal-emacs-d { }; minimal-emacs-d = callPackage ./minimal-emacs-d { };
boomer = callPackage ./boomer { }; boomer = callPackage ./boomer { };
nh = callPackage ./nh { }; nh = callPackage ./nh { };

View file

@ -1,4 +1,8 @@
{ lib, stdenv, pkgs }: {
lib,
stdenv,
pkgs,
}:
let let
pre-early-init = ./pre-early-init.el; pre-early-init = ./pre-early-init.el;

View file

@ -34,15 +34,10 @@ stdenvNoCC.mkDerivation rec {
sourceRoot = "."; sourceRoot = ".";
installPhase = installPhase =
'' ''''
''
+ lib.optionalString fonts '' + lib.optionalString fonts ''
mkdir -p $out/share/fonts/truetype mkdir -p $out/share/fonts/truetype
cp ./Library/Fonts/${ cp ./Library/Fonts/${if full then "*" else "SF-Pro.ttf"} $out/share/fonts/truetype
if full
then "*"
else "SF-Pro.ttf"
} $out/share/fonts/truetype
'' ''
+ lib.optionalString app '' + lib.optionalString app ''
mkdir -p $out/Applications mkdir -p $out/Applications
@ -51,13 +46,11 @@ stdenvNoCC.mkDerivation rec {
meta = { meta = {
description = description =
if app if app then
then "Tool that provides consistent, highly configurable symbols for apps" "Tool that provides consistent, highly configurable symbols for apps"
else "Fonts from SF Symbols"; else
"Fonts from SF Symbols";
homepage = "https://developer.apple.com/sf-symbols/"; homepage = "https://developer.apple.com/sf-symbols/";
platforms = platforms = if app then lib.platforms.darwin else lib.platforms.all;
if app
then lib.platforms.darwin
else lib.platforms.all;
}; };
} }