{"id":21871716,"url":"https://github.com/rtts/debian","last_synced_at":"2025-04-05T16:08:14.758Z","repository":{"id":40785609,"uuid":"501449741","full_name":"rtts/debian","owner":"rtts","description":"A complete, minimalist Debian setup for power users","archived":false,"fork":false,"pushed_at":"2025-02-26T09:59:35.000Z","size":130,"stargazers_count":145,"open_issues_count":2,"forks_count":3,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-03-29T15:07:53.227Z","etag":null,"topics":["ansible","debian"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rtts.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-06-09T00:13:21.000Z","updated_at":"2025-02-26T09:59:39.000Z","dependencies_parsed_at":"2024-12-06T23:23:08.055Z","dependency_job_id":"a11178a3-3b96-4d2c-b6b3-1fe565d163b7","html_url":"https://github.com/rtts/debian","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rtts%2Fdebian","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rtts%2Fdebian/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rtts%2Fdebian/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rtts%2Fdebian/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rtts","download_url":"https://codeload.github.com/rtts/debian/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247361690,"owners_count":20926643,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ansible","debian"],"created_at":"2024-11-28T06:15:04.525Z","updated_at":"2025-04-05T16:08:14.734Z","avatar_url":"https://github.com/rtts.png","language":"Shell","readme":"# rtts/Debian\n\n### *A complete, minimalist Debian setup for power users*\n\n**This repository contains the exact configuration of all my\nworkstations, gaming computers, laptops and even a couple of VPSes. Of\ncourse, your situation will differ, but I believe the installation\ninstructions and Ansible roles contained herein will be a great\nstarting point for anyone who wants to enjoy using a minimalist setup\nto its maximum potential.**\n\n## FAQ\n\n### Is this a GNU/Linux distribution?\n\nYes, it kind of is! Except that all that I'm distributing is a bunch\nof [Ansible](https://docs.ansible.com/ansible/latest/index.html) roles\nand the installation instructions. Think of this as a dotfiles\nrepository that also includes the playbook to install [the\ndotfiles](https://github.com/search?q=repo%3Artts%2Fdebian+path%3Adotfiles\u0026type=code).\n\n### Why should I use this instead of distribution X?\n\nYou should not use this at all, this system is tailored exactly to my\nown needs and nothing more. However, you may find some configuration\ngems here that you can use in your own setup. Find an old laptop or\nspin up a VM and give it a try if you want to see how a fellow\nGNU/Linux enthusiast has configured their computer!\n\n### How can I install it?\n\nKeep reading! This README contains all the steps needed to install\nDebian, set up the base system, and run the Ansible playbook that will\ntake care of the remaining configuration.\n\n## The starting point\n\n![Debian family tree](https://upload.wikimedia.org/wikipedia/commons/6/69/DebianFamilyTree1210.svg)\n\nLet's return to the source and start with a minimal, vanilla Debian\ninstallation. Visit [Debian.org](https://www.debian.org/) and click\n\"Download\", then write the image to a USB flash drive with:\n\n    sudo dd if=debian-12.8.0-amd64-netinst.iso of=/dev/sdX\n\nMake sure you substitute `X` with the correct letter of your USB\ndrive). Then, do your best to reboot your computer in such a way\nthat you arrive at the following screen:\n\n![Debian installer](https://raw.githubusercontent.com/rtts/debian/main/doc/debian.png)\n\nHurrah! The hardest part – getting your computer to successfully boot\nfrom a USB stick – is over! Note that the screenshot says \"BIOS mode\",\nbut if you manage to boot the \"UEFI Installer menu\" that is probably\neven better. The second hardest part is choosing a hostname for the\nnew system. Get your inspiration at https://namingschemes.com/.\n\nCarefully follow the installation instructions and choose the\npartitioning method \"Use entire disk and set up encrypted LVM\" for\nmaximum security. At the \"Set up users and passwords\" prompt, supply\nan empty password for the root user and create an initial user\naccount. This account will be given the power to become root using the\n`sudo` command. One day, I will add a [Debian\nPreseed](https://wiki.debian.org/DebianInstaller/Preseed) to this\nrepository which will make all this happen automatically.\n\nAt the end of the installation you'll see this:\n\n![Tasksel](https://raw.githubusercontent.com/rtts/debian/main/doc/tasksel.png)\n\nSelect nothing except for \"SSH Server\" and \"standard system\nutilities\". After the installation is complete, boot into the new\nsystem and log in using the username and password you have set during\ninstallation. There is no graphical environment, yet, but be patient\nbecause we'll configure the important things first.\n\n\u003e **Note**\n\u003e\n\u003e Even when you have configured a WiFi connection during the\n\u003e installation, the resulting system may not have WiFi.\n\u003e\n\u003e One way to solve this is to boot the installer again and enter\n\u003e \"Rescue mode\", follow the steps to get a root shell, and install\n\u003e NetworkManager with `apt install network-manager`.\n\u003e\n\u003e Then, remove the USB drive, reboot into your system and execute:\n\u003e `nmcli dev wifi connect \u003cYour WiFi name\u003e password \u003cYour WiFi password\u003e`\n\n## Give yourself (remote) access\n\nOn the target computer, run:\n\n    $ sudo apt install libnss-mdns\n\nOn the target computer or another computer, run:\n\n    $ ssh-copy-id \u003chostname\u003e.local\n\nFinally, on the target computer, run:\n\n    $ sudo visudo\n\nAnd change the line containing `%sudo` to:\n\n    %sudo ALL=(ALL:ALL) NOPASSWD:ALL\n\nThis is everything that's required to run the Ansible playbook from\nthis repository, which will take care of the rest of the installation.\n\n## Run the playbook\n\nOn either the target computer or on another computer, install\n[Git](https://git-scm.com/) and\n[Ansible](https://docs.ansible.com/ansible/latest/index.html) and\nclone this repository:\n\n    $ sudo apt install git ansible\n    $ git clone https://github.com/rtts/debian\n    $ cd debian\n\nThe playbook is divided into a number of hosts, with each host having\na number of roles. The roles are meant to be composable, so you can,\nfor example, configure a host with the `common` and `X` roles for use\nas a [media player](https://github.com/rtts/median).\n\nFor now, however, let's assume you are setting up a personal computer\nthat is in your physical possesion, such as a laptop or a desktop\ncomputer. Open the file `inventory.ini` and add your hostname to the\n`[workstations]` section and, if it's a laptop, to the `[laptops]`\nsection. If you want the system to be able to send and receive email,\nprovide your email credentials (optional).\n\nNow run the playbook!\n\n    $ ./playbook.yml\n\n## Using the system\n\nCongratulations! Your system has been fully set up for general use,\nAfter the system boots, you will be greeted with the following message\nof the day:\n\n![Message of the day](https://raw.githubusercontent.com/rtts/debian/main/doc/motd.png)\n\nThis message is shown in\n[rxvt-unicode](http://software.schmorp.de/pkg/rxvt-unicode.html)\ndisplayed by the tiling window manager [xmonad](https://xmonad.org/).\nA single terminal is automatically launched at startup. You can\nspecify which program(s) launch at startup by editing `~/.xsession`.\nAlso have look at the other dotfiles that were installed.\n\n\u003e **Note**\n\u003e\n\u003e All dotfiles (except `.bashrc`) are placed by Ansible with the\n\u003e [force](https://docs.ansible.com/ansible/latest/collections/ansible/builtin/copy_module.html#parameter-force)\n\u003e parameter set to `false`, which means that local changes will not be\n\u003e overwritten when you re-run the playbook. The dotfiles are also\n\u003e written to the `/etc/skel` directory, so they will be installed for\n\u003e new users created by `adduser`. This is also a convenient location\n\u003e to check for updates to dotfiles.\n\nHere are some useful keyboard shortcuts (note: `Mod` is mapped to the\nwindows key by the `X` role):\n\n- `Mod` `Shift` `Enter` opens a new terminal.\n- `Mod` `[1-9]` switches to the virtual desktop 1 through 9.\n- `Mod` `P` launches `dmenu`. Type the starting letters of a\n  graphical program, such as `chromium` or `firefox` and press Enter\n  to launch it.\n- `Mod` `Tab` cycles between the windows on the current virtual\n  desktop.\n- `Mod` `Space` switches between fullscreen and tiled window\n  layouts.\n- `Mod` `Enter` moves a window to the top of the window stack.\n- When in tiled layout, `Mod` `,` and `Mod` `.` do something\n  useful that's hard to explain. Try it out!\n- To change the size of tiled windows, `Mod` `H` and `Mod` `L`\n  You can also change the size of any window by holding `Mod`\n  and drag it using the right mouse button.\n- Dragging a window while holding the `Mod` key will make it\n  floating. You can make it tiled again with `Mod` `T`.\n\nYou can view all available keybindings with `Mod` `Shift` `/`.\n\n## More possibilities\n\nHere are the things that I use this setup for:\n\n### Web browsing\n\nThe playbook has installed the web browsers Chromium and Firefox.\nPersonally, I like to edit `/etc/chromium.d/default-flags` to add the\n`--incognito` flag so that Chromium will always browse incognito, and\nthen use Firefox for all my non-incognito browsing.\n\nBoth browsers include uBlock Origin through the `webext-ublock-origin-*`\nDebian packages. I have also heard good things about the\n[Firefox Multi-Account Containers](https://addons.mozilla.org/en-US/firefox/addon/multi-account-containers/)\nextension so you might want to give that a try. The recently introduced\n[Total Cookie Protection](https://blog.mozilla.org/en/products/firefox/firefox-rolls-out-total-cookie-protection-by-default-to-all-users-worldwide/)\nsounds very promising.\n\nI highly recommend setting your default search engine to DuckDuckGo so\nyou have access to their incredible [Bang\nsyntax](https://duckduckgo.com/bang). In practice, however, most of my\nweb searches still use the `!g` bang to search Google.\n\n### Email\n\nEmail configuration is split up into two roles:\n\n1. `mailserver`\n2. `mailclient`\n\nThe `mailserver` role configures Exim4 to send all outgoing emails\nthrough a smarthost of your choosing, solving the mystery of [xkcd\n838](https://xkcd.com/838/):\n\n![XKCD 838](https://imgs.xkcd.com/comics/incident.png)\n\nThe `mailclient` role installs [mutt](http://www.mutt.org/) for a\nsingle user only, assuming that user is you. Launch it by typing\n`mutt` at the command line and be amazed at the usability of it. It\nhas a [lengthy manual](http://www.mutt.org/doc/manual/), but for basic\nusage all you need is the arrow keys and the following shortcuts:\n\n- `m`: Send new email\n- `r`: Reply to the current email\n- `t`: Mark the current email for deletion/archival\n- `d`: Delete the marked emails\n- `A`: Archive the marked emails\n\n### Lego CAD\n\nI use [LDCad](http://www.melkert.net/LDCad) to create building\ninstructions for [my Lego models](https://jj.created.today/). It's\nclosed-source, but I've emailed the author and he's assured me he\nwould open source it before his death. You can also install `leocad`\nand `ldraw-parts` from the Debian repositories. For more information\nvisit [LDraw.org](https://ldraw.org/).\n\n### Photography\n\nI use [Geeqie](https://www.geeqie.org/) (`apt install geeqie`) to cull\nthe photos after a shoot, then use\n[darktable](https://www.darktable.org/) (`apt install darktable`) to\npost-process them. Finally, I use\n[Photog!](https://pypi.org/project/photog/) (`pip install photog`) to\ngenerate [my photography website](https://www.superformosa.nl/).\n\n### Audio\n\nI use [Audacity](https://www.audacityteam.org/) (`apt install\naudacity`) to record high-quality audio using a Focusrite Scarlet 2i2,\nwhich works phenomenally well under Linux and PulseAudio. All I needed\nto do was plug the device in and attach speakers, and all audio was\nrouted correctly by default.\n\n### Video\n\nHave a look at [FFTok](https://github.com/rtts/fftok) for some handy\n`ffmpeg` shortcuts to cut, split, crop, scale, combine and transcode\nvideo files.\n\n### Programming\n\nThe terminal-first computing environment configured by this playbook\nnaturally lends itself well to all kinds of programming. Try for\nexample Bash, Python, Perl, Ruby, or Haskell (I dare you to edit the\n`xmonad` configuration file!).\n\n### Media\n\n[mpv](https://mpv.io/) is included in the `X` role by default. Read\n`man mpv` to find out all the available options of this grand\nsuccessor to `mplayer`.\n\nStreaming services work in Firefox after [enabling\nDRM](https://support.mozilla.org/en-US/kb/enable-drm) but not in\nChromium, because it lacks the required Widevine DRM. Please [fight\nfor alternatives to DRM](https://www.defectivebydesign.org/).\n\n### Gaming\n\nIf you're a gamer, you probably want to install the [Steam\nClient](https://store.steampowered.com/about/) even though it's not\nopen source. Personally I like playing titles that are available on\nthe Internet Archive, using my own [custom games launcher for\nDOSBox](https://ialauncher.created.today/) that will automatically\ndownload and run a large number of MS-DOS games. Here's how to install\nand run it:\n\n    $ sudo apt install dosbox\n    $ pip install ialauncher\n    $ ialauncher --no-fullscreen\n\nThe `--no-fullscreen` argument is there because `xmonad` will already\ntile the IA Launcher window to be fullscreen. Alternatively, you can\nadd your computer to the `gamestations` group to configure it as a\ngaming kiosk.\n\n### Kiosks\n\nThe `kiosks` group only installs the `common` and `X` roles intended\nfor single-use setups, such as:\n\n- Digital signage\n- Public library\n- [Media player](https://github.com/rtts/median)\n\nYou can turn your computer into a locked down Chromebook by adding the\nfollowing to the end of `~/.xsession`:\n\n```\nexec chromium --kiosk\n```\n\n### Work\n\nTo satisfy my employer's ISO 27001 requirement, the screens of all\nworkstations are set to lock after 15 minutes of inactivity. This\nis accomplished with `xautolock`, which is officially hosted by [one\nof the first web sites on the\ninternet](https://en.wikipedia.org/wiki/Ibiblio#History):\n`http://sunsite.unc.edu/pub/Linux/X11/screensavers/`. To get rid of\nthe auto-locking behavior, remove the file\n`/etc/X11/Xsession.d/90custom_autolock` and restart X with `Mod`\n`Shift` `Q`.\n\nIt's possible to [configure mutt to connect to an Exchange\nserver](https://jonathanh.co.uk/blog/mutt-setup/#connecting-to-exchange---davmail),\nbut according to the linked blog:\n\n\u003e get yourself a beer, this will probably take a couple of hours to\n\u003e set up\n\n## Maintenance\n\nLike any operating system, Debian publishes regular updates. Make it\na habit to run the following commands regularly:\n\n    $ sudo apt update\n    $ sudo apt upgrade\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frtts%2Fdebian","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frtts%2Fdebian","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frtts%2Fdebian/lists"}