diff --git a/flake.lock b/flake.lock index 48fa56a..0ea0331 100644 --- a/flake.lock +++ b/flake.lock @@ -1418,11 +1418,11 @@ "rust-overlay": "rust-overlay_3" }, "locked": { - "lastModified": 1735017137, - "narHash": "sha256-JXVFiAO3NpnxED+//+MS0aEElIJlUIsCyiWL5mEooug=", + "lastModified": 1735329660, + "narHash": "sha256-orVsy4BTlJjFFl8sZdKf0qOH0A7eISKqxu9upISnFw8=", "ref": "refs/heads/master", - "rev": "31b96e313a70650fee70bd33765bb4ffbeabcb1e", - "revCount": 247, + "rev": "b43def52fc1f11d6438bc657842b1b876ffebbcd", + "revCount": 248, "type": "git", "url": "https://git.joshuabell.xyz/nvim" }, diff --git a/hosts/oren/flake.lock b/hosts/oren/flake.lock index 5dcec72..58cb233 100644 --- a/hosts/oren/flake.lock +++ b/hosts/oren/flake.lock @@ -25,6 +25,33 @@ "type": "github" } }, + "cosmic": { + "inputs": { + "flake-compat": "flake-compat", + "nixpkgs": [ + "mods_de_cosmic", + "nixpkgs" + ], + "nixpkgs-stable": [ + "mods_de_cosmic", + "nixpkgs-stable" + ], + "rust-overlay": "rust-overlay_2" + }, + "locked": { + "lastModified": 1735263434, + "narHash": "sha256-5Bn1c2sWzedpGV+PNfXtoainQ3uUKkx/v7T3N6lKKms=", + "owner": "lilyinstarlight", + "repo": "nixos-cosmic", + "rev": "e5fdfe023742172ec0e7af0ca6d88362228d14b7", + "type": "github" + }, + "original": { + "owner": "lilyinstarlight", + "repo": "nixos-cosmic", + "type": "github" + } + }, "crane": { "locked": { "lastModified": 1725409566, @@ -64,6 +91,22 @@ "type": "github" } }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1717312683, + "narHash": "sha256-FrlieJH50AuvagamEvWMIE6D2OAnERuDboFDYAED/dE=", + "owner": "nix-community", + "repo": "flake-compat", + "rev": "38fd3954cf65ce6faf3d0d45cd26059e059f07ea", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "flake-compat", + "type": "github" + } + }, "flake-utils": { "inputs": { "systems": "systems_2" @@ -129,12 +172,12 @@ "mods_boot_systemd": { "locked": { "lastModified": 1, - "narHash": "sha256-q8gMFwivaZtlaqp44mV7W5M8T5RkBhvjnikr6Ed4xIQ=", - "path": "/nix/store/prvi2x26ymzgydzr49na2qs7ihgjrq2d-source/modules/boot_systemd", + "narHash": "sha256-9Z/Z8Y4Q1q95zUeJWfUQFyeaAVkhb804kd3tiBpHfpI=", + "path": "/nix/store/ka4sn5h3pw93s1j7blv48vn30jfxiw19-source/modules/boot_systemd", "type": "path" }, "original": { - "path": "/nix/store/prvi2x26ymzgydzr49na2qs7ihgjrq2d-source/modules/boot_systemd", + "path": "/nix/store/ka4sn5h3pw93s1j7blv48vn30jfxiw19-source/modules/boot_systemd", "type": "path" } }, @@ -147,12 +190,33 @@ }, "locked": { "lastModified": 1, - "narHash": "sha256-lWrwhvR+E4BC9vSKptGrAKy0C12HeasTMCtDmqI0rdY=", - "path": "/nix/store/prvi2x26ymzgydzr49na2qs7ihgjrq2d-source/modules/common", + "narHash": "sha256-Hgc2b0w7x9oi15wHy45ZAZ3w6UEESORoDNZX2tVyYmc=", + "path": "/nix/store/ka4sn5h3pw93s1j7blv48vn30jfxiw19-source/modules/common", "type": "path" }, "original": { - "path": "/nix/store/prvi2x26ymzgydzr49na2qs7ihgjrq2d-source/modules/common", + "path": "/nix/store/ka4sn5h3pw93s1j7blv48vn30jfxiw19-source/modules/common", + "type": "path" + } + }, + "mods_de_cosmic": { + "inputs": { + "cosmic": "cosmic", + "nixpkgs": [ + "nixpkgs" + ], + "nixpkgs-stable": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1, + "narHash": "sha256-R80oVWKVWJJBUCYgMiyTtP1X25zf7zo4C0Ziwrrt7aA=", + "path": "/nix/store/ka4sn5h3pw93s1j7blv48vn30jfxiw19-source/modules/de_cosmic", + "type": "path" + }, + "original": { + "path": "/nix/store/ka4sn5h3pw93s1j7blv48vn30jfxiw19-source/modules/de_cosmic", "type": "path" } }, @@ -202,6 +266,7 @@ "home-manager": "home-manager", "mods_boot_systemd": "mods_boot_systemd", "mods_common": "mods_common", + "mods_de_cosmic": "mods_de_cosmic", "nixpkgs": "nixpkgs" } }, @@ -227,6 +292,28 @@ "type": "github" } }, + "rust-overlay_2": { + "inputs": { + "nixpkgs": [ + "mods_de_cosmic", + "cosmic", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1735180071, + "narHash": "sha256-ceUDFBsLf5Cz3GlhQAdaJsEfi5s1MDjDsO9VvPFoKAE=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "550e1f10be4a504747a7894c35e887e61235763b", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, "systems": { "locked": { "lastModified": 1681028828, diff --git a/hosts/oren/flake.nix b/hosts/oren/flake.nix index eb86820..9a01591 100644 --- a/hosts/oren/flake.nix +++ b/hosts/oren/flake.nix @@ -11,6 +11,9 @@ mods_common.url = "../../modules/common"; mods_common.inputs.nixpkgs.follows = "nixpkgs"; mods_boot_systemd.url = "../../modules/boot_systemd"; + mods_de_cosmic.url = "../../modules/de_cosmic"; + mods_de_cosmic.inputs.nixpkgs-stable.follows = "nixpkgs"; + mods_de_cosmic.inputs.nixpkgs.follows = "nixpkgs"; }; outputs = diff --git a/hosts_old/oren/configuration.nix b/hosts_old/oren/configuration.nix index b38eb59..d345e74 100644 --- a/hosts_old/oren/configuration.nix +++ b/hosts_old/oren/configuration.nix @@ -11,8 +11,8 @@ # My custom modules mods = { - boot_systemd.enable = true; - shell_common.enable = true; + boot_systemd.enable = true; # new + shell_common.enable = true; # new de_cosmic.enable = true; neovim.enable = true; tty_caps_esc.enable = true; @@ -20,7 +20,7 @@ fonts.enable = true; stormd.enable = true; nebula.enable = true; - ssh.enable = true; + ssh.enable = true; # new # rustdesk.enable = true; }; diff --git a/modules/boot_systemd/flake.nix b/modules/boot_systemd/flake.nix index abbc192..9736349 100644 --- a/modules/boot_systemd/flake.nix +++ b/modules/boot_systemd/flake.nix @@ -16,9 +16,6 @@ ... }: { - options = { - }; - config = { # Use the systemd-boot EFI boot loader. boot.loader = { diff --git a/modules/common/flake.nix b/modules/common/flake.nix index ed5bdf3..87fa5a0 100644 --- a/modules/common/flake.nix +++ b/modules/common/flake.nix @@ -1,4 +1,5 @@ { + description = "Common flake for all of my systems. ANy logic that I do on all my ssystems I put here so that I don't need to put it into sepratate nix flakes. This includes some basic nix[helper] settings, ragenix secrets, and ssh (ssh keys are used for ragenix)"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; @@ -54,6 +55,7 @@ # NOTE: Ragenix requires services.openssh.enable to be true otherwise it would require manually setting public keys, so ssh is enabled in the common module as well ./ssh.nix ./ragenix.nix + ./shell/common.nix ]; config = { _module.args = { diff --git a/modules/common/shell/common.nix b/modules/common/shell/common.nix new file mode 100644 index 0000000..2aa9016 --- /dev/null +++ b/modules/common/shell/common.nix @@ -0,0 +1,81 @@ +{ + config, + lib, + pkgs, + ... +}: +with lib; +{ + config = { + networking = { + hostName = config.mods.common.systemName; + extraHosts = '' + 127.0.0.1 local.belljm.com + 127.0.0.1 n0.local.belljm.com + 127.0.0.1 n1.local.belljm.com + 127.0.0.1 n2.local.belljm.com + 127.0.0.1 n3.local.belljm.com + 127.0.0.1 n4.local.belljm.com + ''; + # Use nftables not iptables + nftables.enable = true; + firewall.enable = true; + }; + + environment.systemPackages = with pkgs; [ + # Basics + vim + nano + wget + curl + fastfetch + bat + htop + unzip + git + fzf + ripgrep + lsof + killall + hdparm + speedtest-cli + ffmpeg-full + appimage-run + ]; + + environment.shellAliases = { + n = "nvim"; + nn = "nvim --headless '+SessionDelete' +qa > /dev/null 2>&1 && nvim"; + bat = "bat --theme Coldark-Dark"; + cat = "bat --pager=never -p"; + # TODO this may not be needed now that I am using `nh` clean mode (see /hosts/_common/configuration.nix#programs.nh) + nix-boot-clean = "find '/boot/loader/entries' -type f ! -name 'windows.conf' | head -n -4 | xargs -I {} rm {}; nix store gc; nixos-rebuild boot; echo; df"; + + # general unix + date_compact = "date +'%Y%m%d'"; + date_short = "date +'%Y-%m-%d'"; + ls = "ls --color -Gah"; + ll = "ls --color -Galh"; + lss = "du --max-depth=0 -h * 2>/dev/null | sort -hr"; + psg = "ps aux | head -n 1 && ps aux | grep -v 'grep' | grep"; + cl = "clear"; + + # git + stash = "git stash"; + pop = "git stash pop"; + branch = "git checkout -b"; + status = "git status"; + diff = "git diff"; + branches = "git branch -a"; + gcam = "git commit -a -m"; + gcm = "git commit -m"; + stashes = "git stash list"; + + # ripgrep + rg = "rg --no-ignore"; + rgf = "rg --files 2>/dev/null | rg"; + }; + + environment.shellInit = builtins.readFile ./common.sh; + }; +} diff --git a/modules/common/shell/common.sh b/modules/common/shell/common.sh new file mode 100644 index 0000000..3e244f3 --- /dev/null +++ b/modules/common/shell/common.sh @@ -0,0 +1,171 @@ +# Check if ~/.config/environment exists and source all files within it +if [ -d "$HOME/.config/environment" ]; then + for file in "$HOME/.config/environment/"*; do + if [ -r "$file" ]; then + if ! . "$file"; then + echo "Failed to source $file" + fi + fi + done +fi + +# Basics +htop_psg () { + htop -p $(psg $1 | awk '{r=r s $2;s=","} END{print r}') +} + +htop_pid () { + htop -p $(ps -ef | awk -v proc=$1 '$3 == proc { cnt++;if (cnt == 1) { printf "%s",$2 } else { printf ",%s",$2 } }') +} + +psg_kill() { + ps aux | grep -v "grep" | grep "${1}" | awk '{print $2}' | while read -r pid; do + if [ -n "${pid}" ]; then + echo "killing ${pid}" + kill -9 "${pid}" &> /dev/null + fi + done +} + +psg_terminate() { + ps aux | grep -v "grep" | grep "${1}" | awk '{print $2}' | while read -r pid; do + if [ -n "${pid}" ]; then + echo "Terminating ${pid}" + kill -15 "${pid}" &> /dev/null + fi + done +} + +psg_skill() { + ps aux | grep -v "grep" | grep "${1}" | awk '{print $2}' | while read -r pid; do + if [ -n "${pid}" ]; then + echo "Killing ${pid}" + sudo kill -9 "${pid}" &> /dev/null + fi + done +} + +mail_clear() { + : > /var/mail/$USER +} + +speedtest_fs () { + dir=$(pwd) + drive=$(df -h ${dir} | awk 'NR==2 {print $1}') + echo Testing read speeds on drive ${drive} + sudo hdparm -Tt ${drive} + test_file=$(date +%u%m%d) + test_file="${dir}/speedtest_fs_${test_file}" + echo + echo Testing write speeds into test file: ${test_file} + dd if=/dev/zero of=${test_file} bs=8k count=10k; rm -f ${test_file} +} + +speedtest_internet () { + speedtest-cli +} + +# git +getdefault () { + git remote show origin | grep "HEAD branch" | sed 's/.*: //' +} + +master () { + git stash + git checkout $(getdefault) + pull +} + +mp () { + master + prunel +} + +pullmaster () { + git pull origin $(getdefault) +} + +push () { + B=$(git branch | sed -n -e 's/^\* \(.*\)/\1/p') + git pull origin $B + git push origin $B --no-verify +} + +pull () { + git fetch + B=$(git branch | sed -n -e 's/^\* \(.*\)/\1/p') + git pull origin $B +} + +forcepush () { + B=$(git branch | sed -n -e 's/^\* \(.*\)/\1/p') + git push origin $B --force +} + +remote_branches () { + git branch -a | grep 'remotes' | grep -v -E '.*(HEAD|${DEFAULT})' | cut -d'/' -f 3- +} + +local_branches () { + git branch -a | grep -v 'remotes' | grep -v -E '.*(HEAD|${DEFAULT})' | grep -v '^*' | cut -d' ' -f 3- +} + +prunel () { + git fetch + git remote prune origin + + for local in $(local_branches); do + in=false + for remote in $(remote_branches); do + if [[ ${local} = ${remote} ]]; then + in=true + fi + done; + if [[ $in = 'false' ]]; then + git branch -D ${local} + else + echo 'Skipping branch '${local} + fi + done; +} + +checkout () { + git fetch + git checkout $1 + pull +} + +from_master () { + git checkout $(getdefault) $@ +} + + +# nix +alias nixpkgs=nixpkg +nixpkg () { + if [ $# -eq 0 ]; then + echo "Error: No arguments provided. Please specify at least one package." + return 1 + fi + cmd="nix shell" + for pkg in "$@"; do + cmd="$cmd \"nixpkgs#$pkg\"" + done + eval $cmd +} + +# Marks some files as in "git" but they won't actually get pushed up to the git repo +# Usefull for `gintent .envrc flake.lock flake.nix` to add nix items required by flakes in a git repo that won't want flakes added +gintent() { + for file in "$@"; do + if [ -f "$file" ]; then + git add --intent-to-add "$file" + git update-index --assume-unchanged "$file" + echo "Intent added for $file" + else + echo "File not found: $file" + fi + done +} +alias gintentnix="gintent .envrc flake.lock flake.nix" + diff --git a/modules/de_cosmic/config/com.system76.CosmicComp/v1/input_default b/modules/de_cosmic/config/com.system76.CosmicComp/v1/input_default new file mode 100644 index 0000000..fa5c71c --- /dev/null +++ b/modules/de_cosmic/config/com.system76.CosmicComp/v1/input_default @@ -0,0 +1,9 @@ +( + state: Enabled, + scroll_config: Some(( + method: None, + natural_scroll: Some(true), + scroll_button: None, + scroll_factor: None, + )), +) \ No newline at end of file diff --git a/modules/de_cosmic/flake.nix b/modules/de_cosmic/flake.nix index 4124a1c..78a1874 100644 --- a/modules/de_cosmic/flake.nix +++ b/modules/de_cosmic/flake.nix @@ -11,70 +11,64 @@ outputs = { - self, cosmic, - nixpkgs, ... }: - let - lib = nixpkgs.lib; - - cosmicConfigDir = ./config; - cosmicFiles = builtins.attrNames (builtins.readDir cosmicConfigDir); - cosmicConfigFiles = builtins.map (fileName: { - name = "cosmic/${fileName}"; - value = { - source = "${cosmicConfigDir}/${fileName}"; - }; - }) cosmicFiles; - cosmicConfigFilesAttrs = builtins.listToAttrs cosmicConfigFiles; - in - with lib; { nixosModules = { - default = { - options = { - # mods.de_cosmic = { - # nvidiaExtraDisplayFix = mkOption { - # type = types.bool; - # default = false; - # description = '' - # Enable extra display fix for nvidia cards. - # ''; - # }; - # }; - }; - config = { + default = + { + config, + lib, + pkgs, + ... + }: + with lib; + { + options.mods.de_cosmic = { + users = mkOption { + type = types.listOf types.str; + description = "Users to apply cosmic DE settings to."; + default = [ + "root" + ] ++ (lib.optionals (config.mods.common.primaryUser != null) [ config.mods.common.primaryUser ]); + }; + }; + imports = [ cosmic.nixosModules.default ]; - # Use cosmic binary cache - nix.settings = { - substituters = [ "https://cosmic.cachix.org/" ]; - trusted-public-keys = [ "cosmic.cachix.org-1:Dya9IyXD4xdBehWjrkPv6rtxpmMdRel02smYzA85dPE=" ]; - }; + config = { - environment.systemPackages = with pkgs; [ - wl-clipboard - ]; + # Use cosmic binary cache + nix.settings = { + substituters = [ "https://cosmic.cachix.org/" ]; + trusted-public-keys = [ "cosmic.cachix.org-1:Dya9IyXD4xdBehWjrkPv6rtxpmMdRel02smYzA85dPE=" ]; + }; - # Enable cosmic - services.desktopManager.cosmic.enable = true; - services.displayManager.cosmic-greeter.enable = true; - environment.cosmic.excludePackages = with pkgs; [ - cosmic-edit - cosmic-term - cosmic-store - ]; + environment.systemPackages = with pkgs; [ + wl-clipboard + ]; - # Config - home-manager.backupFileExtension = "bak"; - home-manager.users.${settings.user.username} = { - xdg.configFile = cosmicConfigFilesAttrs; + # Enable cosmic + services.desktopManager.cosmic.enable = true; + services.displayManager.cosmic-greeter.enable = true; + environment.cosmic.excludePackages = with pkgs; [ + cosmic-edit + cosmic-term + cosmic-store + ]; + + # Config + environment.etc = lib.mkIf (config.mods.de_cosmic.users != null) ( + lib.genAttrs config.mods.de_cosmic.users (user: { + source = ./config; + target = "/home/${user}/.config/cosmic"; + }) + ); }; }; - }; }; }; } diff --git a/modules_old/de/cosmic/config/com.system76.CosmicComp/v1/input_default b/modules_old/de/cosmic/config/com.system76.CosmicComp/v1/input_default new file mode 100644 index 0000000..fa5c71c --- /dev/null +++ b/modules_old/de/cosmic/config/com.system76.CosmicComp/v1/input_default @@ -0,0 +1,9 @@ +( + state: Enabled, + scroll_config: Some(( + method: None, + natural_scroll: Some(true), + scroll_button: None, + scroll_factor: None, + )), +) \ No newline at end of file diff --git a/modules_old/shell/common.sh b/modules_old/shell/common.sh index 018075f..50903ac 100644 --- a/modules_old/shell/common.sh +++ b/modules_old/shell/common.sh @@ -1,7 +1,11 @@ # Check if ~/.config/environment exists and source all files within it if [ -d "$HOME/.config/environment" ]; then for file in "$HOME/.config/environment/"*; do - [ -r "$file" ] && . "$file" + if [ -r "$file" ]; then + if ! . "$file"; then + echo "Failed to source $file" + fi + fi done fi diff --git a/users/_common/components/home_manager/tmux/tmux-reset.conf b/users/_common/components/home_manager/tmux/tmux-reset.conf index 514597c..258c1d4 100644 --- a/users/_common/components/home_manager/tmux/tmux-reset.conf +++ b/users/_common/components/home_manager/tmux/tmux-reset.conf @@ -50,7 +50,7 @@ bind C command-prompt -p "session name:" "new-session -s '%%'" # Tmux util bind : command-prompt -bind C-D detach +bind C-d detach # ========== # My options diff --git a/users/root/configuration.nix b/users/root/configuration.nix index 721d513..6aa9150 100644 --- a/users/root/configuration.nix +++ b/users/root/configuration.nix @@ -12,6 +12,7 @@ system.activationScripts.sshConfig = { # TODO revisit this, this is stupid and ugly what am I doing here... + # this is just making it so that the root user can fetch from github. I don't think I need this anymore... text = '' mkdir -p /root/.ssh ln -snf ${config.age.secrets.nix2github.path} /root/.ssh/nix2github