diff --git a/flake.nix b/flake.nix index fe5b17e..329860c 100644 --- a/flake.nix +++ b/flake.nix @@ -49,5 +49,20 @@ ./hosts/thonkpad/configuration.nix ]; }; + + nixosConfigurations.rq = nixpkgs.lib.nixosSystem { + system = "x86_64-linux"; + + modules = [ + baseModule + { + environment.systemPackages = [agenix.packages.x86_64-linux.default]; + } + home-manager.nixosModules.default + agenix.nixosModules.default + # agenix.homeManagerModules.age + ./hosts/rq/configuration.nix + ]; + }; }; } diff --git a/home/home.nix b/home/home.nix index fea1b43..5d99361 100644 --- a/home/home.nix +++ b/home/home.nix @@ -53,6 +53,10 @@ in { zathura keepassxc sshpass + mpv + jellyfin-ffmpeg + simple-mtpfs + signal-desktop ] ++ ( with lib; let diff --git a/home/programs/beets/config.yaml b/home/programs/beets/config.yaml new file mode 100644 index 0000000..cf39f95 --- /dev/null +++ b/home/programs/beets/config.yaml @@ -0,0 +1,9 @@ +plugins: chroma + +chroma: + auto: yes + +import: + copy: no + write: yes + move: no diff --git a/home/programs/beets/default.nix b/home/programs/beets/default.nix new file mode 100644 index 0000000..8e46772 --- /dev/null +++ b/home/programs/beets/default.nix @@ -0,0 +1,10 @@ +{ + config, + pkgs, + ... +}: { + home.packages = with pkgs; [ + beets + ]; + home.file.".config/beets/config.yaml".source = ./config.yaml; +} diff --git a/home/programs/bspwm/bspwmrc b/home/programs/bspwm/bspwmrc index ca41340..06ba8ee 100644 --- a/home/programs/bspwm/bspwmrc +++ b/home/programs/bspwm/bspwmrc @@ -10,10 +10,10 @@ pgrep -x sxhkd > /dev/null || sxhkd & # xrandr --output eDP-1 --mode 1920x1080 --primary # xrandr --output HDMI-1 --mode 1920x1080 --same-as eDP-1 --scale 1x1 -# xrandr --output eDP-1 --scale 1x1 --auto -xrandr --output LVDS-1 --mode 1366x768 --primary +xrandr --output eDP-1 --scale 1x1 --auto +# xrandr --output LVDS-1 --mode 1366x768 --primary -bspc monitor LVDS-1 -d 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 +bspc monitor eDP-1 -d 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 bspc config border_width 2 bspc config window_gap 2 diff --git a/home/programs/cmus/default.nix b/home/programs/cmus/default.nix index 4be09ce..12ab89b 100644 --- a/home/programs/cmus/default.nix +++ b/home/programs/cmus/default.nix @@ -3,6 +3,9 @@ pkgs, ... }: { + home.packages = with pkgs; [ + cmus + ]; home.file.".config/cmus/rc".source = ./rc; home.file.".config/cmus/autosave".source = ./autosave; } diff --git a/home/programs/firefox/default.nix b/home/programs/firefox/default.nix index 32a0a33..62f10d6 100644 --- a/home/programs/firefox/default.nix +++ b/home/programs/firefox/default.nix @@ -24,7 +24,7 @@ in { # https://mozilla.github.io/policy-templates/#extensionsettings policies = { ExtensionSettings = { - "*".installation_mode = "blocked"; # blocks all addons except the ones specified below + # "*".installation_mode = "blocked"; # blocks all addons except the ones specified below # uBlock Origin: "uBlock0@raymondhill.net" = { install_url = "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi"; @@ -113,7 +113,7 @@ in { } { name = "GPT"; - url = "https://chatgpt.com"; # sam altman is a horrible person + url = "https://chatgpt.com"; # sam altman is a horrible person and i cannot wait for the day i can ditch this shit } { name = "performance"; @@ -126,6 +126,10 @@ in { ### This is all aesthetic stuff # for tiling window managers expands to the size of the window + # dir lol + "browser.download.dir" = "/home/synchronous/downloads"; + "browser.download.folderList" = 2; + # https://support.mozilla.org/en-US/questions/1253302 "mousewheel.with_control.action" = 1; diff --git a/home/programs/nvim/init.lua b/home/programs/nvim/init.lua index 78b33e6..5ab1a43 100644 --- a/home/programs/nvim/init.lua +++ b/home/programs/nvim/init.lua @@ -92,6 +92,13 @@ vim.opt.encoding = "utf-8" -- Leader key vim.g.mapleader = "," +vim.opt_local.conceallevel = 0 +vim.opt_local.foldmethod = 'manual' +-- Keep treesitter, ditch legacy syntax: +vim.g.markdown_fenced_languages = {} + +vim.loader.enable() + ------------------------------------------------------ -- KEY MAPPINGS ------------------------------------------------------ @@ -106,6 +113,11 @@ vim.api.nvim_set_keymap("n", "^[", "^[", { noremap = true }) -- inoremap { {}O} vim.api.nvim_set_keymap("i", "{", "{}O", { noremap = true }) +local map = vim.keymap.set +local opts = { noremap = true, silent = true } +-- yank link +map("n", "yl", "?\\](lvi)ynohlsearch", opts) + -- Save file with Ctrl+S vim.cmd([[ command -nargs=0 -bar Update if &modified diff --git a/home/programs/nvim/plugins/goyo.lua b/home/programs/nvim/plugins/goyo.lua index 6048bbb..e1fbd52 100644 --- a/home/programs/nvim/plugins/goyo.lua +++ b/home/programs/nvim/plugins/goyo.lua @@ -4,15 +4,24 @@ local opts = { noremap = true, silent = true } vim.api.nvim_set_keymap("n", "z", ":Goyo 80", opts) vim.api.nvim_set_keymap("n", "q", ":Goyo!", opts) +-- https://github.com/junegunn/goyo.vim/issues/180 -- automatically resize goyo when nvim resizes vim.api.nvim_create_autocmd("VimResized", { callback = function() - if vim.fn.exists('#goyo') == 1 then - vim.cmd("normal =") + if vim.t.goyo_master == 1 then + vim.cmd([[exe "normal \="]]) end end, }) +-- vim.api.nvim_create_autocmd("VimResized", { + -- callback = function() + -- if vim.fn.exists('#goyo') == 1 then + -- vim.cmd("normal =") + -- end + -- end, +-- }) + -- hide and unhide lualine when entering and leaving goyo local lualine = require('lualine') diff --git a/home/programs/nvim/plugins/treesitter.lua b/home/programs/nvim/plugins/treesitter.lua index e04b064..60a212e 100644 --- a/home/programs/nvim/plugins/treesitter.lua +++ b/home/programs/nvim/plugins/treesitter.lua @@ -4,3 +4,13 @@ require('nvim-treesitter.configs').setup { highlight = { enable = true }, indent = { enable = true }, } + +require('nvim-treesitter.configs').setup({ + highlight = { + enable = true, -- keep TS for everything else + disable = { "markdown", "markdown_inline" }, + additional_vim_regex_highlighting = false, + }, + indent = { enable = false }, + incremental_selection = { enable = false }, +}) diff --git a/home/programs/nvim/snippets/markdown.lua b/home/programs/nvim/snippets/markdown.lua new file mode 100644 index 0000000..0e1f265 --- /dev/null +++ b/home/programs/nvim/snippets/markdown.lua @@ -0,0 +1,284 @@ +local ls = require("luasnip") +local s = ls.snippet +local sn = ls.snippet_node +local isn = ls.indent_snippet_node +local t = ls.text_node +local i = ls.insert_node +local f = ls.function_node +local c = ls.choice_node +local d = ls.dynamic_node +local r = ls.restore_node +local events = require("luasnip.util.events") +local ai = require("luasnip.nodes.absolute_indexer") +local extras = require("luasnip.extras") +local l = extras.lambda +local rep = extras.rep +local p = extras.partial +local m = extras.match +local n = extras.nonempty +local dl = extras.dynamic_lambda +local fmt = require("luasnip.extras.fmt").fmt +local fmta = require("luasnip.extras.fmt").fmta +local conds = require("luasnip.extras.expand_conditions") +local postfix = require("luasnip.extras.postfix").postfix +local types = require("luasnip.util.types") +local parse = require("luasnip.util.parser").parse_snippet +local ms = ls.multi_snippet +local k = require("luasnip.nodes.key_indexer").new_key + +local line_begin = require("luasnip.extras.expand_conditions").line_begin + +ls.add_snippets("markdown", { + s("date", { + t("# "), f(function() return os.date("%y-%m-%d") end, {}), + t({ "", "- " }), + }), + + -- s({ + -- trig = [[\v(https?://(?:www\.)?([-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b[-a-zA-Z0-9()@:%_\+.~#?&//=]*))]], + -- regTrig = true, + -- wordTrig = false, + -- }, + -- fmt("[{}]({})", { + -- f(function(_, snip) return snip.captures[2] end), + -- f(function(_, snip) return snip.captures[1] end), + -- }) + -- ), + + s({ + trig = [[%f[%S](https?://([^/%s]+)[^%s]*)]], + regTrig = true, + wordTrig = false, + }, fmt("[{}]({})", { + -- link text → host + f(function(_, snip) return snip.captures[2] end), + -- link target → full url + f(function(_, snip) return snip.captures[1] end), + })) + + +}) +-- local ls = require('luasnip') +-- local fmt = require('luasnip.extras.fmt').fmt +-- local fmta = require('luasnip.extras.fmt').fmta +-- local rep = require('luasnip.extras').rep +-- local dl = require('luasnip.extras').dynamic_lambda +-- local l = require('luasnip.extras').lambda +-- local autosnippet = ls.extend_decorator.apply(s, { snippetType = 'autosnippet' }) + +-- -- some shorthands... +-- local s = ls.snippet +-- local n = ls.snippet_node +-- local t = ls.text_node +-- local i = ls.insert_node +-- local f = ls.function_node +-- local c = ls.choice_node +-- local d = ls.dynamic_node + +-- ls.config.set_config({ + -- history = true, + -- -- treesitter-hl has 100, use something higher (default is 200). + -- ext_base_prio = 200, + -- -- minimal increase in priority. + -- ext_prio_increase = 1, + -- enable_autosnippets = true, + -- store_selection_keys = '', +-- }) + +-- vim.keymap.set({ 'i', 's' }, '', function() + -- if ls.choice_active() then ls.change_choice(1) end +-- end) + +-- vim.keymap.set({ 'i', 's' }, '', function() + -- if ls.choice_active() then ls.change_choice(-1) end +-- end) + +-- local function get_line_iter(str) + -- if str:sub(-1) ~= '\n' then str = str .. '\n' end + + -- return str:gmatch('(.-)\n') +-- end +-- local function box_trim_lines(str) + -- local new_str = '' + + -- for line in get_line_iter(str) do + -- line = line:gsub('^%s+', '') + -- line = string.gsub(line, '%s+$', '') + -- new_str = new_str .. '\n' .. line + -- end + + -- return new_str +-- end + +-- -- local return_filename = function() +-- -- return vim.fn.fnamemodify(vim.fn.expand('%'), ':p') +-- -- end + +-- local return_filename = function() + -- -- return vim.fn.fnamemodify(vim.fn.expand('%'), ':p') + -- local filename = vim.fn.fnamemodify(vim.fn.expand('%'), ':p') + -- local home_dir = vim.fn.expand('~') + -- if filename:sub(1, #home_dir) == home_dir then filename = '~/' .. filename:sub(#home_dir + 2) end + -- return filename +-- end + +-- local date = function() return { os.date('%Y-%m-%d') } end + +-- local fulldate = function() return { os.date('%a, %b %Y/%m/%d - %H:%M:%S') } end + +-- -- lua print(os.date("%a, %b %Y/%m/%d - %H:%M:%S")) + +-- local get_visual = function(args, parent) + -- if #parent.snippet.env.SELECT_RAW > 0 then + -- return sn(nil, i(1, parent.snippet.env.SELECT_RAW)) + -- else -- If SELECT_RAW is empty, return a blank insert node + -- return sn(nil, i(1)) + -- end +-- end + +-- local filename = function() return { vim.fn.expand('%:p') } end + +-- local clipboard = function() return { vim.fn.getreg('+') } end + +-- -- Make sure to not pass an invalid command, as io.popen() may write over nvim-text. +-- local function bash(_, _, command) + -- local file = io.popen(command, 'r') + -- local res = {} + -- for line in file:lines() do + -- table.insert(res, line) + -- end + -- return res +-- end + +-- local function get_port_snip(args) + -- if #args < 1 and not args[1][1] then return n(nil, t('hello world')) end + + -- local type = args[1][1] + -- local indent = ' ' + + -- if type == 'NodePort' or type == 'LoadBalancer' then + -- return n( + -- nil, + -- fmt( + -- box_trim_lines([[ + -- - port: {} + -- {}targetPort: {} + -- {}nodePort: {} + -- ]]), + -- { + -- i(1, '30000'), + -- indent, + -- i(2, '80'), + -- indent, + -- i(3, '30000'), + -- } + -- ) + -- ) + -- end + + -- if type == 'ClusterIP' then + -- return n( + -- nil, + -- fmt( + -- [[ + -- - port: {} + -- {}targetPort: {} + -- ]], + -- { + -- i(1, '30000'), + -- indent, + -- i(2, '80'), + -- } + -- ) + -- ) + -- end +-- end + +-- ls.add_snippets(nil, { + + -- markdown = { + -- s({ + -- trig = 'link', + -- namr = 'markdown_link [selection]', + -- dscr = 'Create markdown link [txt](url) Select description + TAB', + -- }, { + -- t('['), + -- i(1), + -- t(']('), + -- d(2, get_visual), + -- t(')'), + -- i(0), + -- }), + + -- s({ + -- trig = 't', + -- namr = 'check list', + -- desc = 'Create item of a checklist', + -- }, fmt('- [{}] {}', { c(2, { t(' '), t('-'), t('') }), i(1, 'task') })), + + -- autosnippet( + -- { + -- trig = 'qw', + -- name = 'trig', + -- dscr = 'inline code', + -- }, + -- fmt( + -- [[ + -- `<>` <> + -- ]], + -- { d(1, get_visual), i(0) }, + -- { delimiters = '<>' } + -- ) + -- ), + + -- s({ + -- trig = 'code', + -- namr = 'markdown_code_fenced', + -- desc = 'code backsticks', + -- priority = 2000, + -- }, { + -- t('```'), + -- i(1, 'Lang'), + -- t({ '', '' }), + -- d(2, get_visual), + -- t({ '', '```', '' }), + -- i(0), + -- }), + + -- s({ + -- trig = 'meta', + -- namr = 'Metadata', + -- dscr = 'Yaml metadata format for markdown', + -- }, { + -- t({ '---', 'title: ' }), + -- i(1, 'note_title'), + -- t({ '', 'author: ' }), + -- i(2, 'author'), + -- t({ '', 'date: ' }), + -- f(date, {}), + -- t({ '', 'cathegories: [' }), + -- i(3, ''), + -- t({ ']', 'lastmod: ' }), + -- f(date, {}), + -- t({ '', 'tags: [' }), + -- i(4), + -- t({ ']', 'comments: true', '---', '' }), + -- i(0), + -- }), + + -- s({ + -- trig = '_skel', + -- namr = 'File_skeleton', + -- dscr = 'File header (dynamic)', + -- }, { + -- t({ '---', 'File: ' }), + -- f(return_filename, {}), + -- t({ '', 'Last Change: ' }), + -- f(fulldate, {}), + -- t({ '', 'tags: [' }), + -- i(1), + -- t({ ']', '---', '' }), + -- i(0), + -- }), + -- }, +-- }) diff --git a/home/programs/programs.nix b/home/programs/programs.nix index 8b38da7..f2536e9 100644 --- a/home/programs/programs.nix +++ b/home/programs/programs.nix @@ -24,5 +24,6 @@ ./zathura/default.nix ./keepassxc/default.nix ./nf/default.nix + ./beets/default.nix ]; } diff --git a/home/scripts/journal/nf.sh b/home/scripts/journal/nf.sh index 8fb240b..924b9da 100644 --- a/home/scripts/journal/nf.sh +++ b/home/scripts/journal/nf.sh @@ -13,7 +13,7 @@ search() { if [[ "$rcv" == "" ]]; then exit 1; fi if [[ $(echo "$rs" | rg "$rcv") ]]; then # check if we actually have our note alacritty -t "$rcv" -e nvim "$main_dir/$rcv" \ - -c "execute 'lua vim.g.goyo_if = 1' | Goyo | execute 'normal 4j' | set path+=$main_dir | autocmd BufEnter * let b:coc_suggest_disable=1" &! + -c "execute 'lua vim.g.goyo_if = 1' | Goyo | execute 'normal 4j' | set path+=$main_dir | set wrap | autocmd BufEnter * let b:coc_suggest_disable=1" &! # -c "lua vim.g.goyo_if = 1" # -c "syntax match LinkPattern /[a-zA-Z0-9\-][a-zA-Z0-9\-]*\.md/" \ # -c "highlight LinkPattern guifg=LightBlue gui=underline" \ @@ -31,7 +31,7 @@ search() { # echo "lol" alacritty -t "$rcv" -e nvim "$main_dir/$rcv" \ - -c "execute 'lua vim.g.goyo_if = 1' | Goyo | set path+=$main_dir | autocmd BufEnter * let b:coc_suggest_disable=1" \ + -c "execute 'lua vim.g.goyo_if = 1' | Goyo | set path+=$main_dir | set wrap | autocmd BufEnter * let b:coc_suggest_disable=1" \ -c "call setline(1, ['---', 'title: $replaced', 'tags: ', '---', '']) | execute 'normal G'" &! # make sure standardized frontmatter is there fi @@ -39,14 +39,14 @@ search() { open_daily() { alacritty -t "daily.md" -e nvim "$main/daily.md" \ - -c "Goyo | set path+=$main_dir" \ + -c "Goyo | set wrap | set path+=$main_dir" \ -c "execute 'normal G'" \ -c "lua vim.g.goyo_if = 1" &! } open_todo() { alacritty -t "todo.md" -e nvim "$main/todo.md" \ - -c "execute 'lua vim.g.goyo_if = 1' | Goyo | set path+=$main_dir" &! + -c "execute 'lua vim.g.goyo_if = 1' | set wrap | Goyo | set path+=$main_dir" &! # -c "execute 'normal G'" } @@ -147,7 +147,7 @@ search_by_title() { replaced="${no_md//[-_]/ }" alacritty -t "$rcv" -e nvim "$main_dir/$rcv" \ - -c "execute 'lua vim.g.goyo_if = 1' | Goyo | set path+=$main_dir | autocmd BufEnter * let b:coc_suggest_disable=1" \ + -c "execute 'lua vim.g.goyo_if = 1' | Goyo | set wrap | set path+=$main_dir | autocmd BufEnter * let b:coc_suggest_disable=1" \ -c "call setline(1, ['---', 'title: $replaced', 'tags: ', '---', '']) | execute 'normal G'" &! fi } diff --git a/home/scripts/music/ytdl.sh b/home/scripts/music/ytdl.sh index d439dfe..dcc3dc0 100644 --- a/home/scripts/music/ytdl.sh +++ b/home/scripts/music/ytdl.sh @@ -32,12 +32,12 @@ fi # Import into beets if [ "$2" = "-na" ] || [ "$2" = "--no-auto" ]; then - if ! /usr/bin/beet import -s /home/synchronous/.music-not-tagged/tmp.mp3; then + if ! /etc/profiles/per-user/synchronous/bin/beet import -s /home/synchronous/.music-not-tagged/tmp.mp3; then echo "Error importing into beets." exit 1 fi else - if ! /usr/bin/beet import -s /home/synchronous/.music-not-tagged/tmp.mp3 <<< "A"; then + if ! /etc/profiles/per-user/synchronous/bin/beet import -s /home/synchronous/.music-not-tagged/tmp.mp3 <<< "A"; then echo "Error importing into beets." exit 1 fi @@ -45,7 +45,7 @@ fi # Remove all entries from beets -if ! /usr/bin/beet ls | /usr/bin/beet remove -f; then +if ! /etc/profiles/per-user/synchronous/bin/beet ls | /etc/profiles/per-user/synchronous/bin/beet remove -f; then echo "Error removing entries from beets." exit 1 fi diff --git a/home/scripts/rebuild.sh b/home/scripts/rebuild.sh index d738f6f..5fbaf57 100644 --- a/home/scripts/rebuild.sh +++ b/home/scripts/rebuild.sh @@ -34,7 +34,9 @@ git status --porcelain echo "" echo "NixOS Rebuilding..." -prev=$(basename $(readlink /run/current-system) | sed 's/.*nixos-system-\(.*\)-.*$/\1/') +# brain damaged method +# prev=$(basename $(readlink /run/current-system) | sed 's/.*nixos-system-\(.*\)-.*$/\1/') +prev=$(hostname) # Rebuild, output simplified errors, log trackebacks sudo /run/current-system/sw/bin/nixos-rebuild switch --flake /home/synchronous/nix-cfg/flake.nix#"$prev" 2>&1 | tee /tmp/nixos-switch.log diff --git a/hosts/rq/configuration.nix b/hosts/rq/configuration.nix new file mode 100644 index 0000000..71dba0b --- /dev/null +++ b/hosts/rq/configuration.nix @@ -0,0 +1,263 @@ +{ + config, + pkgs, + lib, + ... +}: let + pkg_with_working_nitrogen = import (builtins.fetchTarball { + url = "https://github.com/NixOS/nixpkgs/archive/c0c50dfcb70d48e5b79c4ae9f1aa9d339af860b4.tar.gz"; + sha256 = "17p3w4mgfr4yj2p0jz6kqgzhyr04h4fap5hnd837664xd1xhwdjb"; + }) {inherit (pkgs) system;}; + + old-nitrogen = pkg_with_working_nitrogen.nitrogen; +in { + imports = [ + ./hardware-configuration.nix + ../../system/system.nix + ]; + + options.res = lib.mkOption { + type = lib.types.str; + default = "1920x1080"; + description = "screen resolution"; + }; + + options.zsh_remote = lib.mkOption { + type = lib.types.str; + default = "1920x1080"; + description = "zsh remote secret"; + }; + + config = { + home-manager = { + useGlobalPkgs = true; + useUserPackages = true; + backupFileExtension = "backup"; + # sharedModules = [agenix.homeManagerModules.default]; + # extraSpecialArgs = {inherit (config);}; + # users.synchronous.imports = [ + # ({ + # config, + # lib, + # ... + # }: + # import ../../home/home.nix { + # inherit config pkgs lib; + # }) + # ]; + users.synchronous.imports = [../../home/home.nix]; + }; + + res = "2560x1440"; + age = { + secrets.zsh_remote = { + file = ../../secrets/zsh_remote.age; + owner = "synchronous"; + mode = "0400"; + }; + secretsDir = "/home/synchronous/.agenix/agenix"; + secretsMountPoint = "/home/synchronous/.agenix/agenix.d"; + identityPaths = ["/home/synchronous/.ssh/id_ed25519"]; + }; + + # config = { + # res = "1366x768"; + # }; + + # system.res = "1366x768"; + + # Bootloader. + boot.loader.grub.enable = true; + boot.loader.grub.device = "/dev/nvme0n1"; + boot.loader.grub.useOSProber = true; + boot.loader.grub.version = 2; + #boot = { + # loader.systemd-boot = { + # enable = true; + # editor = false; + # }; + # kernelPackages = pkgs.linuxPackages; + #}; + # boot.loader.systemd-boot.enable = true; + # boot.loader.efi.canTouchEfiVariables = true; + # boot.loader.grub.enable = false; + + networking.hostName = "rq"; # Define your hostname. + # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. + + nix = { + nixPath = [ + "nixpkgs=/nix/var/nix/profiles/per-user/root/channels/nixos" + "nixos-config=/home/synchronous/nix-cfg/configuration.nix" + "/nix/var/nix/profiles/per-user/root/channels" + ]; + + settings = { + experimental-features = ["nix-command" "flakes"]; + substituters = [ + "https://nix-community.cachix.org" + ]; + trusted-public-keys = [ + "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" + ]; + }; + }; + + # Configure network proxy if necessary + # networking.proxy.default = "http://user:password@proxy:port/"; + # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; + + # Enable networking + networking.networkmanager.enable = true; + + # Set your time zone. + time.timeZone = "America/New_York"; + + # Select internationalisation properties. + i18n.defaultLocale = "en_US.UTF-8"; + + i18n.extraLocaleSettings = { + LC_ADDRESS = "en_US.UTF-8"; + LC_IDENTIFICATION = "en_US.UTF-8"; + LC_MEASUREMENT = "en_US.UTF-8"; + LC_MONETARY = "en_US.UTF-8"; + LC_NAME = "en_US.UTF-8"; + LC_NUMERIC = "en_US.UTF-8"; + LC_PAPER = "en_US.UTF-8"; + LC_TELEPHONE = "en_US.UTF-8"; + LC_TIME = "en_US.UTF-8"; + }; + + # Enable CUPS to print documents. + services.printing.enable = true; + hardware.bluetooth.enable = true; + programs.dconf.enable = true; + + # Enable sound with pipewire. + hardware.pulseaudio.enable = false; + security.rtkit.enable = true; + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + # If you want to use JACK applications, uncomment this + #jack.enable = true; + + # use the example session manager (no others are packaged yet so this is enabled by default, + # no need to redefine it in your config for now) + #media-session.enable = true; + }; + + # Enable touchpad support (enabled default in most desktopManager). + # services.xserver.libinput.enable = true; + + users.users.synchronous = { + isNormalUser = true; + description = "jake"; + extraGroups = ["networkmanager" "wheel"]; + packages = with pkgs; [ + kdePackages.kate + # firefox + git + arandr + procs + htop + zsh + ripgrep + rofi + alacritty + python3 + tree + old-nitrogen + polybar + sxhkd + bspwm + # librewolf + eza + flameshot + neofetch + lolcat + nnn + xclip + brightnessctl + xbindkeys + pulseaudio + xorg.xf86inputsynaptics + libnotify # for notify-send + alejandra + discord + legcord + polybar-pulseaudio-control + bluez # polybar + zotero + texliveFull + texlivePackages.latexmk + nmap + procps # for pgrep + # xorg.xrandr + # thunderbird + ]; + }; + + security.sudo = { + # me ne frego. i dare you to privilege escalate me + enable = true; + extraRules = [ + { + commands = [ + { + command = "/etc/profiles/per-user/synchronous/bin/rebuild"; + options = ["NOPASSWD"]; + } + { + command = "/home/synchronous/nix-cfg/home/scripts/nixos-rebuild.sh"; + options = ["NOPASSWD"]; + } + { + command = "/home/synchronous/.scripts/nixos-rebuild.sh"; + options = ["NOPASSWD"]; + } + { + # are you serious? + command = "/run/current-system/sw/bin/nixos-rebuild switch --flake /home/synchronous/nix-cfg/flake.nix"; + options = ["NOPASSWD"]; + } + ]; + users = ["synchronous"]; + } + ]; + }; + + # Allow unfree packages + nixpkgs.config.allowUnfree = true; + + # List packages installed in system profile. To search, run: + # $ nix search wget + environment.systemPackages = with pkgs; [ + vim + neovim + linux-manual + man-pages + man-pages-posix + fontconfig + python3 + rofi + flameshot + tree + # nitrogen + polybar + sxhkd + bspwm + # librewolf + ]; + + # This value determines the NixOS release from which the default + # settings for stateful data, like file locations and database versions + # on your system were taken. It‘s perfectly fine and recommended to leave + # this value at the release version of the first install of this system. + # Before changing this value read the documentation for this option + # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). + system.stateVersion = "24.11"; # Did you read the comment? + }; +} diff --git a/hosts/rq/hardware-configuration.nix b/hosts/rq/hardware-configuration.nix new file mode 100644 index 0000000..aadd56e --- /dev/null +++ b/hosts/rq/hardware-configuration.nix @@ -0,0 +1,37 @@ +# Do not modify this file! It was generated by ‘nixos-generate-config’ +# and may be overwritten by future invocations. Please make changes +# to /etc/nixos/configuration.nix instead. +{ + config, + lib, + pkgs, + modulesPath, + ... +}: { + imports = [ + (modulesPath + "/installer/scan/not-detected.nix") + ]; + + boot.initrd.availableKernelModules = ["xhci_pci" "nvme" "rtsx_pci_sdmmc"]; + boot.initrd.kernelModules = []; + boot.kernelModules = ["kvm-intel"]; + boot.extraModulePackages = []; + + fileSystems."/" = { + device = "/dev/disk/by-uuid/05ca9d56-3506-43c5-b9ec-be928b782996"; + fsType = "ext4"; + }; + + swapDevices = []; + + # Enables DHCP on each ethernet and wireless interface. In case of scripted networking + # (the default) this is the recommended approach. When using systemd-networkd it's + # still possible to use this option, but it's recommended to use it in conjunction + # with explicit per-interface declarations with `networking.interfaces..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.enp0s31f6.useDHCP = lib.mkDefault true; + # networking.interfaces.wlp4s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +}